Merge remote-tracking branch 'origin/camera-follow'
This commit is contained in:
commit
a0ed188138
11
Makefile
11
Makefile
|
@ -1,12 +1,12 @@
|
|||
#-*- Makefile -*-
|
||||
|
||||
OBJS = main.o player.o dt.o block.o entity.o
|
||||
OBJS = main.o player.o dt.o block.o entity.o camera.o
|
||||
|
||||
CC = g++
|
||||
|
||||
COMPILER_FLAGS = -w
|
||||
|
||||
LINKER_FLAGS = -lSDL2 -std=gnu++11
|
||||
LINKER_FLAGS = -lSDL2 -std=gnu++11 -lSDL2_image
|
||||
|
||||
OBJ_NAME = bin/main
|
||||
|
||||
|
@ -17,14 +17,17 @@ all: $(OBJS)
|
|||
main.o: main.cpp
|
||||
$(CC) -c main.cpp $(LINKER_FLAGS)
|
||||
|
||||
player.o: player.cpp player.h entity.h
|
||||
player.o: player.cpp player.h entity.o
|
||||
$(CC) -c player.cpp -lm $(LINKER_FLAGS)
|
||||
|
||||
dt.o: dt.cpp dt.h
|
||||
$(CC) -c dt.cpp $(LINKER_FLAGS)
|
||||
|
||||
block.o: block.cpp block.h entity.h
|
||||
block.o: block.cpp block.h entity.o
|
||||
$(CC) -c block.cpp $(LINKER_FLAGS)
|
||||
|
||||
entity.o: entity.cpp entity.h
|
||||
$(CC) -c entity.cpp $(LINKER_FLAGS)
|
||||
|
||||
camera.o: camera.cpp camera.h
|
||||
$(CC) -c camera.cpp
|
||||
|
|
24
block.cpp
24
block.cpp
|
@ -1,13 +1,19 @@
|
|||
#include"block.h"
|
||||
|
||||
void Block::print(int x, int y, int w, int h,SDL_Renderer* renderer){
|
||||
posX = x;
|
||||
posY = y;
|
||||
szW = w;
|
||||
szH = h;
|
||||
|
||||
rect = {posX, posY, szW, szH};
|
||||
Block::Block(int x, int y, int w, int h,SDL_Renderer** render){
|
||||
//set the rectangle dimensions
|
||||
rect = {x,y,w,h};
|
||||
|
||||
SDL_SetRenderDrawColor(renderer,0,0xFF,0,0xFF);
|
||||
SDL_RenderFillRect(renderer,&rect);
|
||||
//Set the renderer pointer
|
||||
renderer = render;
|
||||
}
|
||||
|
||||
void Block::print(int cameraX){
|
||||
//New SDL_Rect to make the objects follow the camera
|
||||
SDL_Rect cameraFix = rect;
|
||||
cameraFix.x -= cameraX;
|
||||
|
||||
//Set render color and render the rectangle
|
||||
SDL_SetRenderDrawColor(*renderer,0,0xFF,0,0xFF);
|
||||
SDL_RenderFillRect(*renderer,&cameraFix);
|
||||
};
|
||||
|
|
5
block.h
5
block.h
|
@ -11,7 +11,10 @@ class Entity;
|
|||
|
||||
class Block: public Entity{
|
||||
public:
|
||||
void print(int x,int y,int w,int h,SDL_Renderer* renderer);
|
||||
Block(int x,int y,int w,int h,SDL_Renderer** render);
|
||||
void print(int cameraX);
|
||||
private:
|
||||
SDL_Renderer** renderer;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
//Camera class body
|
||||
|
||||
#include"camera.h"
|
||||
|
||||
Camera::Camera(int mapWidth,int screenWidth){
|
||||
mW = mapWidth;
|
||||
scW = screenWidth;
|
||||
}
|
||||
|
||||
void Camera::update(int playerX, int playerY){
|
||||
//Make the camera when the player hits the middle of the screem
|
||||
if(playerX >= scW/2) posX = playerX - scW/2;
|
||||
else posX = 0;
|
||||
if(playerX >= mW - scW/2) posX = mW - scW;
|
||||
|
||||
//posY = playerY;
|
||||
};
|
||||
|
||||
int Camera::getPosX(){
|
||||
return posX;
|
||||
};
|
||||
|
||||
int Camera::getPosY(){
|
||||
return posY;
|
||||
};
|
|
@ -0,0 +1,17 @@
|
|||
//Camera class header
|
||||
|
||||
#ifndef __CAMERA_H_INCLUDED__
|
||||
#define __CAMERA_H_INCLUDED__
|
||||
|
||||
class Camera{
|
||||
public:
|
||||
Camera(int mapWidth,int screenWidth);
|
||||
void update(int playerX, int playerY);
|
||||
int getPosX();
|
||||
int getPosY();
|
||||
private:
|
||||
int posX, posY;
|
||||
int mW, scW;
|
||||
};
|
||||
|
||||
#endif
|
58
main.cpp
58
main.cpp
|
@ -2,8 +2,10 @@
|
|||
|
||||
#include<iostream>
|
||||
#include<SDL2/SDL.h>
|
||||
//#include<SDL2/SDL_image.h>
|
||||
#include"player.h"
|
||||
#include"block.h"
|
||||
#include"camera.h"
|
||||
|
||||
const int SCREEN_WIDTH = 640;
|
||||
const int SCREEN_HEIGHT = 480;
|
||||
|
@ -17,10 +19,6 @@ const int sz = SCREEN_WIDTH/16;
|
|||
void init();
|
||||
bool loadMedia();
|
||||
void close();
|
||||
void gameLoop();
|
||||
|
||||
Player posweg;
|
||||
Block ground;
|
||||
|
||||
bool loadMedia(){
|
||||
bool success = true;
|
||||
|
@ -46,35 +44,22 @@ void close(){
|
|||
SDL_Quit();
|
||||
}
|
||||
|
||||
void gameLoop(){
|
||||
SDL_SetRenderDrawColor(gRenderer,0,0,0,0xFF);
|
||||
SDL_RenderClear(gRenderer);
|
||||
|
||||
Block wallA;
|
||||
Block wallB;
|
||||
Block wallC;
|
||||
wallA.print(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,gRenderer);
|
||||
wallB.print(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,gRenderer);
|
||||
wallC.print(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,gRenderer);
|
||||
ground.print(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,gRenderer);
|
||||
posweg.print();
|
||||
|
||||
|
||||
posweg.check(wallA.getRectangle());
|
||||
posweg.check(wallB.getRectangle());
|
||||
posweg.check(wallC.getRectangle());
|
||||
posweg.check(ground.getRectangle());
|
||||
|
||||
SDL_RenderPresent(gRenderer);
|
||||
}
|
||||
|
||||
int main(int argc, char* args[]){
|
||||
init();
|
||||
loadMedia();
|
||||
|
||||
bool quit = false;
|
||||
SDL_Event e;
|
||||
|
||||
Player posweg;
|
||||
Camera camera(36*sz,SCREEN_WIDTH);
|
||||
|
||||
Block wallA(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,&gRenderer);
|
||||
Block wallB(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer);
|
||||
Block wallC(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer);
|
||||
Block ground(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer);
|
||||
Block ground2(SCREEN_WIDTH+sz*4,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer);
|
||||
|
||||
posweg.init(100,100,sz,sz,&gRenderer);
|
||||
|
||||
while(!quit){
|
||||
|
@ -83,8 +68,27 @@ int main(int argc, char* args[]){
|
|||
quit = true;
|
||||
}
|
||||
}
|
||||
SDL_SetRenderDrawColor(gRenderer,0,0,0,0xFF);
|
||||
SDL_RenderClear(gRenderer);
|
||||
|
||||
gameLoop();
|
||||
camera.update(posweg.getRectangle().x,posweg.getRectangle().y);
|
||||
|
||||
posweg.print(camera.getPosX());
|
||||
std::cout << posweg.getRectangle().x << std::endl;
|
||||
|
||||
wallA.print(camera.getPosX());
|
||||
wallB.print(camera.getPosX());
|
||||
wallC.print(camera.getPosX());
|
||||
ground.print(camera.getPosX());
|
||||
ground2.print(camera.getPosX());
|
||||
|
||||
posweg.check(wallA.getRectangle());
|
||||
posweg.check(wallB.getRectangle());
|
||||
posweg.check(wallC.getRectangle());
|
||||
posweg.check(ground.getRectangle());
|
||||
posweg.check(ground2.getRectangle());
|
||||
|
||||
SDL_RenderPresent(gRenderer);
|
||||
}
|
||||
close();
|
||||
return 0;
|
||||
|
|
10
player.cpp
10
player.cpp
|
@ -2,11 +2,13 @@
|
|||
|
||||
#include"player.h"
|
||||
|
||||
void Player::print(){
|
||||
rect = {posX,posY,szW,szH};
|
||||
void Player::print(int cameraX){
|
||||
|
||||
SDL_Rect cameraFix = rect;
|
||||
cameraFix.x -= cameraX;
|
||||
|
||||
SDL_SetRenderDrawColor(*renderer,0xFF,0,0,0xFF);
|
||||
SDL_RenderFillRect(*renderer, &rect);
|
||||
SDL_RenderFillRect(*renderer, &cameraFix);
|
||||
|
||||
oldPosX = posX;
|
||||
oldPosY = posY;
|
||||
|
@ -93,6 +95,8 @@ void Player::move(){
|
|||
//Convert and set new int position
|
||||
posX += static_cast<int>(x);
|
||||
posY -= static_cast<int>(y+0.5);
|
||||
|
||||
rect = {posX,posY,szW,szH};
|
||||
};
|
||||
|
||||
int Player::check(SDL_Rect rectA){
|
||||
|
|
Loading…
Reference in New Issue