Better collisions and entity handling
Signed-off-by: Pòsweg <posweg@gmail.com>
This commit is contained in:
parent
349b8210ed
commit
c03f5db6dd
16
block.cpp
16
block.cpp
|
@ -7,7 +7,6 @@ Block::Block(int x, int y, int w, int h,SDL_Renderer** render, Player* player, i
|
||||||
//Set the renderer pointer
|
//Set the renderer pointer
|
||||||
renderer = render;
|
renderer = render;
|
||||||
|
|
||||||
posu = player;
|
|
||||||
type = 1;
|
type = 1;
|
||||||
|
|
||||||
//New SDL_Rect to make the objects follow the camera
|
//New SDL_Rect to make the objects follow the camera
|
||||||
|
@ -18,18 +17,5 @@ Block::Block(int x, int y, int w, int h,SDL_Renderer** render, Player* player, i
|
||||||
SDL_SetRenderDrawColor(*renderer,0,0xFF,0,0xFF);
|
SDL_SetRenderDrawColor(*renderer,0,0xFF,0,0xFF);
|
||||||
SDL_RenderFillRect(*renderer,&cameraFix);
|
SDL_RenderFillRect(*renderer,&cameraFix);
|
||||||
|
|
||||||
posu->check(rect,type);
|
player->check(rect,type);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
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);
|
|
||||||
|
|
||||||
posu->check(rect,type);
|
|
||||||
};*/
|
|
||||||
|
|
41
core.cpp
41
core.cpp
|
@ -26,36 +26,53 @@ int Core::coreInit(){
|
||||||
bool quit = false;
|
bool quit = false;
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
|
|
||||||
|
|
||||||
Player posweg(&gRenderer);
|
|
||||||
|
|
||||||
Powerup powerup(13*sz,SCREEN_HEIGHT-sz*4,&gRenderer,&posweg);
|
|
||||||
|
|
||||||
while(!quit){
|
while(!quit){
|
||||||
while(SDL_PollEvent(&e)!=0){
|
while(SDL_PollEvent(&e)!=0){
|
||||||
if(e.type == SDL_QUIT){
|
if(e.type == SDL_QUIT){
|
||||||
quit = true;
|
quit = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Camera camera(36*sz,SCREEN_WIDTH);
|
|
||||||
|
|
||||||
SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF);
|
SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF);
|
||||||
SDL_RenderClear(gRenderer);
|
SDL_RenderClear(gRenderer);
|
||||||
|
|
||||||
|
|
||||||
|
SDL_RenderPresent(gRenderer);
|
||||||
|
}
|
||||||
|
map1();
|
||||||
|
|
||||||
|
close();
|
||||||
|
return 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
void Core::map1(){
|
||||||
|
Player posweg(&gRenderer);
|
||||||
|
|
||||||
|
bool quit = false;
|
||||||
|
SDL_Event e;
|
||||||
|
|
||||||
|
while(quit == false){
|
||||||
|
while(SDL_PollEvent(&e)!=0){
|
||||||
|
if(e.type == SDL_QUIT){
|
||||||
|
quit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SDL_SetRenderDrawColor(gRenderer,0,0,100,0xFF);
|
||||||
|
SDL_RenderClear(gRenderer);
|
||||||
|
|
||||||
|
Camera camera(36*sz,SCREEN_WIDTH);
|
||||||
|
|
||||||
posweg.print(100,100,camera.getPosX());
|
posweg.print(100,100,camera.getPosX());
|
||||||
|
|
||||||
|
camera.update(posweg.getRectangle().x,posweg.getRectangle().y);
|
||||||
Block wallA(8*sz,7*sz,sz*2,sz*2,&gRenderer,&posweg,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 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 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 ground(0,11*sz,16*sz,sz,&gRenderer,&posweg,camera.getPosX());
|
||||||
Block ground2(sz*20,sz*11,sz*16,sz,&gRenderer,&posweg,camera.getPosX());
|
Block ground2(sz*20,sz*11,sz*16,sz,&gRenderer,&posweg,camera.getPosX());
|
||||||
|
Powerup powerup(13*sz,8*sz,&gRenderer,&posweg,camera.getPosX());
|
||||||
|
|
||||||
camera.update(posweg.getRectangle().x,posweg.getRectangle().y);
|
|
||||||
|
|
||||||
SDL_RenderPresent(gRenderer);
|
SDL_RenderPresent(gRenderer);
|
||||||
}
|
}
|
||||||
close();
|
|
||||||
return 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
4
core.h
4
core.h
|
@ -18,12 +18,16 @@ class Core{
|
||||||
void init();
|
void init();
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
|
void map1();
|
||||||
|
|
||||||
const int SCREEN_WIDTH = 640;
|
const int SCREEN_WIDTH = 640;
|
||||||
const int SCREEN_HEIGHT = 480;
|
const int SCREEN_HEIGHT = 480;
|
||||||
int sz;
|
int sz;
|
||||||
|
|
||||||
SDL_Window* gWindow = NULL;
|
SDL_Window* gWindow = NULL;
|
||||||
SDL_Renderer* gRenderer = NULL;
|
SDL_Renderer* gRenderer = NULL;
|
||||||
|
|
||||||
|
//Player posweg(&gRenderer);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -24,7 +24,6 @@ void Player::print(int x,int y,int cameraX){
|
||||||
ply.render(&cameraFix,&plyRun);
|
ply.render(&cameraFix,&plyRun);
|
||||||
power--;
|
power--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ifRunning or power > 0)ply.render(&cameraFix,&plyFrame[1]);
|
if(ifRunning or power > 0)ply.render(&cameraFix,&plyFrame[1]);
|
||||||
|
|
||||||
move();
|
move();
|
||||||
|
@ -41,6 +40,7 @@ Player::Player(SDL_Renderer** render){
|
||||||
|
|
||||||
ply.setRenderer(renderer);
|
ply.setRenderer(renderer);
|
||||||
loadMedia();
|
loadMedia();
|
||||||
|
//first = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Player::loadMedia(){
|
void Player::loadMedia(){
|
||||||
|
@ -163,8 +163,6 @@ int Player::check(SDL_Rect rectA, int type){
|
||||||
and ((movY > bY and movY < b2Y)
|
and ((movY > bY and movY < b2Y)
|
||||||
or (movY + szH > bY and movY + szH < b2Y)
|
or (movY + szH > bY and movY + szH < b2Y)
|
||||||
or (movY < bY and movY + szH > b2Y))){
|
or (movY < bY and movY + szH > b2Y))){
|
||||||
//movX += cos(angle) / 2;
|
|
||||||
//movY += sin(angle) / 2;
|
|
||||||
movX -= (posX - oldPosX)/2;
|
movX -= (posX - oldPosX)/2;
|
||||||
movY -= (posY - oldPosY)/2;
|
movY -= (posY - oldPosY)/2;
|
||||||
collision = 1;
|
collision = 1;
|
||||||
|
|
17
powerup.cpp
17
powerup.cpp
|
@ -2,28 +2,19 @@
|
||||||
|
|
||||||
#include"powerup.h"
|
#include"powerup.h"
|
||||||
|
|
||||||
Powerup::Powerup(int x, int y, SDL_Renderer** render,Player* player){
|
Powerup::Powerup(int x, int y, SDL_Renderer** render,Player* player, int cameraX){
|
||||||
posX = x;
|
rect = {x,y,20,20};
|
||||||
posY = y;
|
|
||||||
szW = 20;
|
|
||||||
szH = 20;
|
|
||||||
|
|
||||||
type = 2;
|
|
||||||
|
|
||||||
rect = {posX, posY, szW, szH};
|
|
||||||
|
|
||||||
renderer = render;
|
renderer = render;
|
||||||
|
|
||||||
posu = player;
|
type = 2;
|
||||||
};
|
|
||||||
|
|
||||||
void Powerup::print(int cameraX){
|
|
||||||
//New SDL_Rect to make the objects follow the camera
|
//New SDL_Rect to make the objects follow the camera
|
||||||
SDL_Rect cameraFix = rect;
|
SDL_Rect cameraFix = rect;
|
||||||
cameraFix.x -= cameraX;
|
cameraFix.x -= cameraX;
|
||||||
|
|
||||||
//Set render color and render the rectangle
|
//Set render color and render the rectangle
|
||||||
if(posu->check(rect,type)==0){
|
if(player->check(rect,type)==0){
|
||||||
SDL_SetRenderDrawColor(*renderer,0xFF,0xFF,0,0xFF);
|
SDL_SetRenderDrawColor(*renderer,0xFF,0xFF,0,0xFF);
|
||||||
SDL_RenderFillRect(*renderer,&cameraFix);
|
SDL_RenderFillRect(*renderer,&cameraFix);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,8 +12,7 @@ class Entity;
|
||||||
|
|
||||||
class Powerup: public Entity{
|
class Powerup: public Entity{
|
||||||
public:
|
public:
|
||||||
Powerup(int x, int y, SDL_Renderer** render, Player* player);
|
Powerup(int x, int y, SDL_Renderer** render, Player* player,int);
|
||||||
void print(int cameraX);
|
|
||||||
protected:
|
protected:
|
||||||
Player* posu;
|
Player* posu;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue