119 lines
3.1 KiB
C++
119 lines
3.1 KiB
C++
#include "maps.h"
|
|
|
|
Maps::Maps(SDL_Renderer* render){
|
|
//Set renderer
|
|
renderer = render;
|
|
|
|
//set the window's (renderer) dimensions
|
|
SDL_GetRendererOutputSize(renderer,&screenWidth,&screenHeight);
|
|
|
|
//Set unit size
|
|
sz = screenWidth/16;
|
|
|
|
//Set keyboard input
|
|
currentKeyStates = SDL_GetKeyboardState(NULL);
|
|
};
|
|
|
|
int Maps::map1(){
|
|
//Set the map dimensions
|
|
int mapWidth = 36*sz;
|
|
int mapHeight = screenHeight;
|
|
|
|
//Initialize the player, set its position, pass the map's size and set the renderer
|
|
Player player(40,8*sz,mapHeight,renderer);
|
|
|
|
//Set the camera and pass the map and screen's dimensions
|
|
Camera camera(mapWidth,mapHeight,screenWidth,screenHeight);
|
|
|
|
//Initialize the block class and set the player and the renderer
|
|
Block ground(renderer,&player);
|
|
|
|
//Set the quantity and size of the blocks
|
|
int blockRect[5][4];
|
|
setRectSize(blockRect[0], 8*sz, 7*sz, 2*sz,2*sz);
|
|
setRectSize(blockRect[1], 4*sz, 9*sz, sz,2*sz);
|
|
setRectSize(blockRect[2], 6*sz, 9*sz, sz,2*sz);
|
|
setRectSize(blockRect[3], 0 ,11*sz,16*sz, sz);
|
|
setRectSize(blockRect[4],20*sz,11*sz,16*sz, sz);
|
|
|
|
//Initialize the powerup, set his position, pass the renderer and the player
|
|
Powerup powerup(13*sz,8*sz,renderer,&player);
|
|
|
|
bool quit = false;
|
|
SDL_Event e;
|
|
|
|
//Game loop
|
|
while(quit == false){
|
|
while(SDL_PollEvent(&e)!=0){
|
|
if(e.type == SDL_QUIT){
|
|
quit = true;
|
|
}
|
|
}
|
|
if(currentKeyStates[SDL_SCANCODE_ESCAPE]) return 0;
|
|
|
|
//Clear the render and set the background color
|
|
SDL_SetRenderDrawColor(renderer,0,0,100,0xFF);
|
|
SDL_RenderClear(renderer);
|
|
|
|
//Update the camera position
|
|
camera.update(player.getRectangle().x,player.getRectangle().y);
|
|
|
|
//Print player
|
|
if(player.print(camera.getPosX()) == 1) map1();
|
|
|
|
//Print the blocks the corresponding dimensions and positions and check collisions
|
|
for(int i = 0; i < 5; i++) ground.printAndCheck(blockRect[i],camera.getPosX());
|
|
|
|
//Print the poweup and check collisions
|
|
powerup.printAndCheck(camera.getPosX());
|
|
|
|
//Render
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
return -1;
|
|
};
|
|
|
|
int Maps::map2(){
|
|
int mapWidth = screenWidth;
|
|
int mapHeight = screenHeight;
|
|
|
|
Player player(40,8*sz,mapHeight,renderer);
|
|
Camera camera(mapWidth,mapHeight,screenWidth,screenHeight);
|
|
Block ground(renderer,&player);
|
|
Powerup powerup(13*sz,8*sz,renderer,&player);
|
|
|
|
int blockRect[4];
|
|
setRectSize(blockRect, 0 ,11*sz,16*sz, sz);
|
|
|
|
bool quit = false;
|
|
SDL_Event e;
|
|
|
|
while(quit == false){
|
|
while(SDL_PollEvent(&e)!=0){
|
|
if(e.type == SDL_QUIT){
|
|
quit = true;
|
|
}
|
|
}
|
|
if(currentKeyStates[SDL_SCANCODE_ESCAPE]) return 0;
|
|
|
|
SDL_SetRenderDrawColor(renderer,0,0,100,0xFF);
|
|
SDL_RenderClear(renderer);
|
|
|
|
camera.update(player.getRectangle().x,player.getRectangle().y);
|
|
|
|
if(player.print(camera.getPosX()) == 1) map2();
|
|
ground.printAndCheck(blockRect,camera.getPosX());
|
|
powerup.printAndCheck(camera.getPosX());
|
|
|
|
SDL_RenderPresent(renderer);
|
|
}
|
|
return -1;
|
|
};
|
|
|
|
void Maps::setRectSize(int rect[],int x, int y, int w, int h){
|
|
rect[0] = x;
|
|
rect[1] = y;
|
|
rect[2] = w;
|
|
rect[3] = h;
|
|
}
|