From 349b8210ed21267202f523e1e13a3d50385747f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=B2sweg?= Date: Sun, 21 May 2017 09:22:25 +0200 Subject: [PATCH] Better collisions and entity handling --- .gitignore | 63 +++++++++++++++++++++++++++++++++++++++- Makefile | 7 +++-- block.h | 2 +- camera.h | 2 ++ core.cpp | 61 +++++++++++++++++++++++++++++++++++++++ core.h | 29 +++++++++++++++++++ main | Bin 23964 -> 24052 bytes main.cpp | 82 +++-------------------------------------------------- player.cpp | 70 ++++++++++++++++++++++----------------------- player.h | 5 ++-- 10 files changed, 202 insertions(+), 119 deletions(-) create mode 100644 core.cpp create mode 100644 core.h diff --git a/.gitignore b/.gitignore index 4826d30..5b45ac6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,63 @@ +reated by https://www.gitignore.io/api/vim,c++,linux + +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo *.o -*.sw* +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Vim ### +# swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-v][a-z] +[._]sw[a-p] +# session +Session.vim +# temporary +.netrwhist +# auto-generated tag files +tags diff --git a/Makefile b/Makefile index 95261c2..738d141 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ #-*- Makefile -*- -OBJS = main.o player.o dt.o block.o entity.o camera.o texture.o powerup.o +OBJS = main.o player.o dt.o block.o entity.o camera.o texture.o powerup.o core.o CC = g++ @@ -14,7 +14,7 @@ OBJ_NAME = main all: $(OBJS) $(CC) $(OBJS) $(COMPLER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME) -main.o: main.cpp +main.o: main.cpp core.o $(CC) -c main.cpp $(LINKER_FLAGS) player.o: player.cpp player.h entity.o texture.o @@ -37,3 +37,6 @@ texture.o: texture.cpp texture.h powerup.o: powerup.cpp powerup.h $(CC) -c powerup.cpp $(LINKER_FLAGS) + +core.o: core.cpp core.h + $(CC) -c core.cpp $(LINKER_FLAGS) diff --git a/block.h b/block.h index 90757ad..c244115 100644 --- a/block.h +++ b/block.h @@ -12,7 +12,7 @@ class Entity; class Block: public Entity{ public: - Block(int x,int y,int w,int h,SDL_Renderer** render, Player* player); + Block(int x,int y,int w,int h,SDL_Renderer** render, Player* player,int); void print(int cameraX); protected: Player* posu; diff --git a/camera.h b/camera.h index ac3c657..70e2f49 100644 --- a/camera.h +++ b/camera.h @@ -3,6 +3,8 @@ #ifndef __CAMERA_H_INCLUDED__ #define __CAMERA_H_INCLUDED__ +#include"player.h" + class Camera{ public: Camera(int mapWidth,int screenWidth); diff --git a/core.cpp b/core.cpp new file mode 100644 index 0000000..e7223c2 --- /dev/null +++ b/core.cpp @@ -0,0 +1,61 @@ +//Core class body + +#include"core.h" + +void Core::init(){ + SDL_Init(SDL_INIT_VIDEO); + gWindow = SDL_CreateWindow("Platform Test!",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN); + gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + SDL_SetRenderDrawColor(gRenderer,0xFF,0xFF,0xFF,0xFF); + + sz = SCREEN_WIDTH/16; +} + +void Core::close(){ + SDL_DestroyRenderer(gRenderer); + SDL_DestroyWindow(gWindow); + gWindow = NULL; + gRenderer = NULL; + + SDL_Quit(); +} + +int Core::coreInit(){ + init(); + + bool quit = false; + SDL_Event e; + + + Player posweg(&gRenderer); + + Powerup powerup(13*sz,SCREEN_HEIGHT-sz*4,&gRenderer,&posweg); + + while(!quit){ + while(SDL_PollEvent(&e)!=0){ + if(e.type == SDL_QUIT){ + quit = true; + } + } + + Camera camera(36*sz,SCREEN_WIDTH); + + SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF); + SDL_RenderClear(gRenderer); + + posweg.print(100,100,camera.getPosX()); + + Block wallA(8*sz,7*sz,sz*2,sz*2,&gRenderer,&posweg,camera.getPosX()); + Block wallB(4*sz,9*sz,sz,sz*2,&gRenderer,&posweg,camera.getPosX()); + Block wallC(6*sz,9*sz,sz,sz*2,&gRenderer,&posweg,camera.getPosX()); + Block ground(0,11*sz,16*sz,sz,&gRenderer,&posweg,camera.getPosX()); + Block ground2(sz*20,sz*11,sz*16,sz,&gRenderer,&posweg,camera.getPosX()); + + camera.update(posweg.getRectangle().x,posweg.getRectangle().y); + + SDL_RenderPresent(gRenderer); + } + close(); + return 0; +}; + diff --git a/core.h b/core.h new file mode 100644 index 0000000..66ca716 --- /dev/null +++ b/core.h @@ -0,0 +1,29 @@ +//Core class header + +#ifndef __CORE_H_INCLUDED__ +#define __CORE_H_INCLUDED__ + +#include +#include +#include"entity.h" +#include"player.h" +#include"block.h" +#include"powerup.h" +#include"camera.h" + +class Core{ + public: + int coreInit(); + private: + void init(); + void close(); + + const int SCREEN_WIDTH = 640; + const int SCREEN_HEIGHT = 480; + int sz; + + SDL_Window* gWindow = NULL; + SDL_Renderer* gRenderer = NULL; +}; + +#endif diff --git a/main b/main index df0335d59baed32258d8d2e9ba0ad4943f63f2ce..e6d1a22e93f6cbc70919f0969662a9444bb1923f 100755 GIT binary patch literal 24052 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 -#include -#include"entity.h" -#include"player.h" -#include"block.h" -#include"powerup.h" -#include"camera.h" +#include"core.h" -const int SCREEN_WIDTH = 640; -const int SCREEN_HEIGHT = 480; - -SDL_Window* gWindow = NULL; -SDL_Renderer* gRenderer = NULL; - -//12 sz of height and 16 of width -const int sz = SCREEN_WIDTH/16; - -void init(); -void close(); - -void init(){ - SDL_Init(SDL_INIT_VIDEO); - gWindow = SDL_CreateWindow("Platform Test!",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN); - gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); - SDL_SetRenderDrawColor(gRenderer,0xFF,0xFF,0xFF,0xFF); -} - -void close(){ - SDL_DestroyRenderer(gRenderer); - SDL_DestroyWindow(gWindow); - gWindow = NULL; - gRenderer = NULL; - - SDL_Quit(); -} +Core core; int main(int argc, char* args[]){ - init(); - - bool quit = false; - SDL_Event e; - - Camera camera(36*sz,SCREEN_WIDTH); - - Player posweg(100,100,sz,sz,&gRenderer); + //if(argc == 2) std::cout << "Initializing..." << std::endl; - Block wallA(8*sz,SCREEN_HEIGHT-sz*5,sz*2,sz*2,&gRenderer,&posweg); - Block wallB(4*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer,&posweg); - Block wallC(6*sz,SCREEN_HEIGHT-sz*3,sz,sz*2,&gRenderer,&posweg); - Block ground(0,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer,&posweg); - Block ground2(SCREEN_WIDTH+sz*4,SCREEN_HEIGHT-sz,SCREEN_WIDTH,sz,&gRenderer,&posweg); - Powerup powerup(13*sz,SCREEN_HEIGHT-sz*4,&gRenderer,&posweg); - - while(!quit){ - while(SDL_PollEvent(&e)!=0){ - if(e.type == SDL_QUIT){ - quit = true; - } - } - SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF); - SDL_RenderClear(gRenderer); - - camera.update(posweg.getRectangle().x,posweg.getRectangle().y); + core.coreInit(); - posweg.print(camera.getPosX()); - - wallA.print(camera.getPosX()); - wallB.print(camera.getPosX()); - wallC.print(camera.getPosX()); - ground.print(camera.getPosX()); - ground2.print(camera.getPosX()); - powerup.print(camera.getPosX()); - - //Entity *ePwrUp = &powerup; - /*posweg.check(wallA.getRectangle()); - posweg.check(wallB.getRectangle()); - posweg.check(wallC.getRectangle()); - posweg.check(ground.getRectangle()); - posweg.check(ground2.getRectangle());*/ - //posweg.check(ePwrUp); - - SDL_RenderPresent(gRenderer); - } - close(); return 0; } diff --git a/player.cpp b/player.cpp index bbea440..2ef6244 100644 --- a/player.cpp +++ b/player.cpp @@ -2,43 +2,43 @@ #include"player.h" -void Player::print(int cameraX){ +void Player::print(int x,int y,int cameraX){ + if(first == true){ + first = false; + posX = x; + posY = y; + } + + oldPosX = posX; + oldPosY = posY; + + rect.x = posX; + rect.y = posY; SDL_Rect cameraFix = rect; cameraFix.x -= cameraX; - - if(false){ - std::cout << power << "ye" << std::endl; - power--; - } - + SDL_SetRenderDrawColor(*renderer,0xFF,0,0,0xFF); if(power == 0)ply.render(&cameraFix,&plyFrame[0]); else{ ply.render(&cameraFix,&plyRun); power--; } - //ply.render(currentFrame); - if(ifRunning or power > 0)ply.render(&cameraFix,&plyFrame[1]); + if(ifRunning or power > 0)ply.render(&cameraFix,&plyFrame[1]); - oldPosX = posX; - oldPosY = posY; move(); ground = false; topCollision = false; }; -Player::Player(int x,int y, int w, int h, SDL_Renderer** render){ - posX = x; - posY = y; - szW = w; - szH = h; +Player::Player(SDL_Renderer** render){ + szW = 40; + szH = 40; + rect.w = szW; + rect.h = szH; renderer = render; - oldPosX = posX; - oldPosY = posY; - ply.setRenderer(renderer); loadMedia(); }; @@ -67,7 +67,8 @@ int Player::intVelX(){ }; void Player::move(){ - float dt = dTime.getDt(); + //float dt = dTime.getDt(); + float dt = 0.016; //Set keyboard variable const Uint8* currentKeyStates = SDL_GetKeyboardState(NULL); @@ -139,14 +140,11 @@ void Player::move(){ //Convert and set new int position posX += static_cast(x); posY -= static_cast(y+0.5); - - rect = {posX,posY,szW,szH}; }; int Player::check(SDL_Rect rectA, int type){ //Initialize and reset collision type int collision = 0; - //Set B rectangle variables int bX = rectA.x; @@ -156,23 +154,22 @@ int Player::check(SDL_Rect rectA, int type){ //Float-ize the position float movX = posX, movY = posY; - - //Clacule the opposite od the player direction angle - float angle = atan2(oldPosY - posY, oldPosX - posX); - + //Move the player out of the rectangle if(type == 1){ while(((movX >= bX and movX < b2X) or (movX + szW > bX and movX + szW <= b2X) or (movX < bX and movX + szW > b2X)) - and ((movY >= bY and movY < b2Y) - or (movY + szH > bY and movY + szH <= b2Y) + and ((movY > bY and movY < b2Y) + or (movY + szH > bY and movY + szH < b2Y) or (movY < bY and movY + szH > b2Y))){ - movX += cos(angle) / 2; - movY += sin(angle) / 2; + //movX += cos(angle) / 2; + //movY += sin(angle) / 2; + movX -= (posX - oldPosX)/2; + movY -= (posY - oldPosY)/2; collision = 1; } - + //Correct possible position issues if(collision == 1){ //Vertical adjustement @@ -193,17 +190,19 @@ int Player::check(SDL_Rect rectA, int type){ or (movY < bY and movY + szH > b2Y)){ while(movX + szW < bX){ movX++; + velocityX = 0; } - while(posX > b2X){ + while(movX > b2X){ movX--; + velocityX = 0; } } } - //Set and int-ize the position + //Set and int-ize the position*/ posX = static_cast(movX); posY = static_cast(movY); - + //Check collsion type and reset velocities //Vertical collisions if((posX >= bX and posX < b2X) @@ -214,6 +213,7 @@ int Player::check(SDL_Rect rectA, int type){ ground = true; collision = 2; velocityY = 0; + //posY -= 40; } //Bottom collision else if(posY == b2Y){ diff --git a/player.h b/player.h index ea58cb2..250d2fd 100644 --- a/player.h +++ b/player.h @@ -14,9 +14,9 @@ class Entity; class Player: public Entity{ public: - void print(int cameraX); + void print(int x, int y,int cameraX); int check(SDL_Rect rectA,int type); - Player(int x, int y,int w, int h,SDL_Renderer** render); + Player(SDL_Renderer** render); private: void loadMedia(); void move(); @@ -31,6 +31,7 @@ class Player: public Entity{ bool isRunning = false; bool ifRunning = false; int oldPosX, oldPosY; + bool first; int power = 0; PosuTexture ply;