diff --git a/Makefile b/Makefile index 6b770fb..5fd8d73 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ #-*- 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++ @@ -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 diff --git a/bin/main b/bin/main index a7aec38..8a7c649 100755 Binary files a/bin/main and b/bin/main differ diff --git a/block.cpp b/block.cpp index 39eacb6..9dbcad4 100644 --- a/block.cpp +++ b/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); +}; diff --git a/block.h b/block.h index 3a25f77..b09dc48 100644 --- a/block.h +++ b/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 diff --git a/camera.cpp b/camera.cpp new file mode 100644 index 0000000..fd0a6c2 --- /dev/null +++ b/camera.cpp @@ -0,0 +1,19 @@ +//Camera class body + +#include"camera.h" + +void Camera::update(int playerX, int playerY){ + //Make the camera when the player hits the middle of the screem + if(true) posX = playerX - 640/2; + //else posX = 0; + + //posY = playerY; +}; + +int Camera::getPosX(){ + return posX; +}; + +int Camera::getPosY(){ + return posY; +}; diff --git a/camera.h b/camera.h new file mode 100644 index 0000000..b1caa0a --- /dev/null +++ b/camera.h @@ -0,0 +1,15 @@ +//Camera class header + +#ifndef __CAMERA_H_INCLUDED__ +#define __CAMERA_H_INCLUDED__ + +class Camera{ + public: + void update(int playerX, int playerY); + int getPosX(); + int getPosY(); + private: + int posX, posY; +}; + +#endif diff --git a/main b/main deleted file mode 100644 index f2406e4..0000000 Binary files a/main and /dev/null differ diff --git a/main.cpp b/main.cpp index c386288..b9040e0 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ #include #include"player.h" #include"block.h" +#include"camera.h" const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; @@ -17,10 +18,9 @@ const int sz = SCREEN_WIDTH/16; void init(); bool loadMedia(); void close(); -void gameLoop(); Player posweg; -Block ground; +Camera camera; bool loadMedia(){ bool success = true; @@ -46,28 +46,6 @@ 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(); @@ -75,6 +53,11 @@ int main(int argc, char* args[]){ bool quit = false; SDL_Event e; + 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); + posweg.init(100,100,sz,sz,&gRenderer); while(!quit){ @@ -83,8 +66,25 @@ 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()); + + posweg.check(wallA.getRectangle()); + posweg.check(wallB.getRectangle()); + posweg.check(wallC.getRectangle()); + posweg.check(ground.getRectangle()); + + SDL_RenderPresent(gRenderer); } close(); return 0; diff --git a/player.cpp b/player.cpp index f392409..7a47573 100644 --- a/player.cpp +++ b/player.cpp @@ -2,11 +2,14 @@ #include"player.h" -void Player::print(){ +void Player::print(int cameraX){ rect = {posX,posY,szW,szH}; + 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; diff --git a/player.h b/player.h index 8bfc399..18e6505 100644 --- a/player.h +++ b/player.h @@ -13,7 +13,7 @@ class Entity; class Player: public Entity{ public: - void print(); + void print(int cameraX); int check(SDL_Rect rectB); void init(int x, int y,int w, int h,SDL_Renderer** render); //SDL_Rect getRectangle();