Colision con el suelo terminada
This commit is contained in:
@@ -12,7 +12,7 @@ Game::Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang,
|
|||||||
// Crea los objetos
|
// Crea los objetos
|
||||||
mScreen = new Screen(window, renderer);
|
mScreen = new Screen(window, renderer);
|
||||||
mRoom = new Room(mAsset->get("01.room"), mRenderer, mAsset);
|
mRoom = new Room(mAsset->get("01.room"), mRenderer, mAsset);
|
||||||
mPlayer = new Player(mAsset->get("player01.png"), mRenderer, mAsset, mInput);
|
mPlayer = new Player(mAsset->get("player01.png"), mRenderer, mAsset, mInput, mRoom);
|
||||||
mEventHandler = new SDL_Event();
|
mEventHandler = new SDL_Event();
|
||||||
mTextureText = new LTexture();
|
mTextureText = new LTexture();
|
||||||
mText = new Text(mAsset->get("smb2.txt"), mTextureText, renderer);
|
mText = new Text(mAsset->get("smb2.txt"), mTextureText, renderer);
|
||||||
@@ -117,6 +117,7 @@ void Game::update()
|
|||||||
mRoom->update();
|
mRoom->update();
|
||||||
mPlayer->update();
|
mPlayer->update();
|
||||||
checkPlayerOnBorder();
|
checkPlayerOnBorder();
|
||||||
|
checkPlayerOnFloor();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,6 +176,9 @@ bool Game::changeRoom(std::string file)
|
|||||||
// Crea un objeto habitación nuevo a partir del fichero
|
// Crea un objeto habitación nuevo a partir del fichero
|
||||||
mRoom = new Room(mAsset->get(file), mRenderer, mAsset);
|
mRoom = new Room(mAsset->get(file), mRenderer, mAsset);
|
||||||
|
|
||||||
|
// Comunica al jugador la nueva referencia para la habitación
|
||||||
|
mPlayer->setRoom(mRoom);
|
||||||
|
|
||||||
success = true;
|
success = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,4 +193,18 @@ void Game::checkPlayerOnBorder()
|
|||||||
changeRoom(mRoom->getRoom(mPlayer->getBorder()));
|
changeRoom(mRoom->getRoom(mPlayer->getBorder()));
|
||||||
mPlayer->switchBorders();
|
mPlayer->switchBorders();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Comprueba si el jugador esta sobre el suelo
|
||||||
|
void Game::checkPlayerOnFloor()
|
||||||
|
{
|
||||||
|
// Comprueba ambos pies
|
||||||
|
if ((mRoom->isFloor(mPlayer->getLeftFoot())) || (mRoom->isFloor(mPlayer->getRightFoot())))
|
||||||
|
{
|
||||||
|
mPlayer->setFalling(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mPlayer->setFalling(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -59,6 +59,9 @@ private:
|
|||||||
// Comprueba si el jugador esta en el borde de la pantalla y actua
|
// Comprueba si el jugador esta en el borde de la pantalla y actua
|
||||||
void checkPlayerOnBorder();
|
void checkPlayerOnBorder();
|
||||||
|
|
||||||
|
// Comprueba si el jugador esta sobre el suelo
|
||||||
|
void checkPlayerOnFloor();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input);
|
Game(SDL_Window *window, SDL_Renderer *renderer, Asset *asset, Lang *lang, Input *input);
|
||||||
|
|||||||
@@ -3,12 +3,13 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
// Constructor
|
// Constructor
|
||||||
Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input)
|
Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room)
|
||||||
{
|
{
|
||||||
// Obten punteros a objetos
|
// Obten punteros a objetos
|
||||||
asset = _asset;
|
asset = _asset;
|
||||||
renderer = _renderer;
|
renderer = _renderer;
|
||||||
input = _input;
|
input = _input;
|
||||||
|
room = _room;
|
||||||
|
|
||||||
// Crea objetos
|
// Crea objetos
|
||||||
texture = new LTexture();
|
texture = new LTexture();
|
||||||
@@ -23,7 +24,9 @@ Player::Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Inp
|
|||||||
border = BORDER_TOP;
|
border = BORDER_TOP;
|
||||||
|
|
||||||
sprite->setPosX(2 * 8);
|
sprite->setPosX(2 * 8);
|
||||||
|
sprite->setPosX(10 * 8);
|
||||||
sprite->setPosY(12 * 8);
|
sprite->setPosY(12 * 8);
|
||||||
|
sprite->setPosY(6 * 8);
|
||||||
sprite->setVelX(0);
|
sprite->setVelX(0);
|
||||||
sprite->setVelY(0);
|
sprite->setVelY(0);
|
||||||
sprite->setWidth(8);
|
sprite->setWidth(8);
|
||||||
@@ -108,7 +111,7 @@ int Player::getBorder()
|
|||||||
return border;
|
return border;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Comprueba si se halla en alguno de los cuatro bordes
|
// Comprueba si está situado en alguno de los cuatro bordes
|
||||||
void Player::checkBorders()
|
void Player::checkBorders()
|
||||||
{
|
{
|
||||||
if (sprite->getPosX() < PLAY_AREA_LEFT)
|
if (sprite->getPosX() < PLAY_AREA_LEFT)
|
||||||
@@ -158,4 +161,37 @@ void Player::switchBorders()
|
|||||||
}
|
}
|
||||||
|
|
||||||
onBorder = false;
|
onBorder = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void Player::setRoom(Room *_room)
|
||||||
|
{
|
||||||
|
room = _room;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor del pixel inferior izquierdo del jugador
|
||||||
|
SDL_Point Player::getLeftFoot()
|
||||||
|
{
|
||||||
|
SDL_Point point = {(int)sprite->getPosX(), (int)sprite->getPosY() + sprite->getHeight()};
|
||||||
|
return point;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Obtiene el valor del pixel inferior derecho del jugador
|
||||||
|
SDL_Point Player::getRightFoot()
|
||||||
|
{
|
||||||
|
SDL_Point point = {(int)sprite->getPosX() + sprite->getWidth(), (int)sprite->getPosY() + sprite->getHeight()};
|
||||||
|
return point;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Establece la velocidad en el eje Y al jugador
|
||||||
|
void Player::setFalling(bool value)
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
sprite->setVelY(0.5f);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sprite->setVelY(0.0f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "const.h"
|
#include "const.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "asset.h"
|
#include "asset.h"
|
||||||
|
#include "room.h"
|
||||||
#include "animatedsprite.h"
|
#include "animatedsprite.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -18,7 +19,8 @@ class Player
|
|||||||
private:
|
private:
|
||||||
LTexture *texture; // Textura con los graficos del enemigo
|
LTexture *texture; // Textura con los graficos del enemigo
|
||||||
AnimatedSprite *sprite; // Sprite del enemigo
|
AnimatedSprite *sprite; // Sprite del enemigo
|
||||||
Input *input; // Objeto para gestyionar la entrada
|
Input *input; // Objeto para gestionar la entrada
|
||||||
|
Room *room; // Objeto con el mapa del juego
|
||||||
|
|
||||||
SDL_Renderer *renderer; // El renderizador de la ventana
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
||||||
@@ -35,7 +37,7 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input);
|
Player(std::string _tileset, SDL_Renderer *_renderer, Asset *_asset, Input *_input, Room *_room);
|
||||||
|
|
||||||
// Destructor
|
// Destructor
|
||||||
~Player();
|
~Player();
|
||||||
@@ -54,6 +56,18 @@ public:
|
|||||||
|
|
||||||
// Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla
|
// Cambia al jugador de un borde al opuesto. Util para el cambio de pantalla
|
||||||
void switchBorders();
|
void switchBorders();
|
||||||
|
|
||||||
|
// Establece el valor de la variable
|
||||||
|
void setRoom(Room *_room);
|
||||||
|
|
||||||
|
// Obtiene el valor del pixel inferior izquierdo del jugador
|
||||||
|
SDL_Point getLeftFoot();
|
||||||
|
|
||||||
|
// Obtiene el valor del pixel inferior derecho del jugador
|
||||||
|
SDL_Point getRightFoot();
|
||||||
|
|
||||||
|
// Establece la velocidad en el eje Y al jugador
|
||||||
|
void setFalling(bool value);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -308,10 +308,11 @@ std::string Room::getRoom(int border)
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dice si el tile al que pertenece el pixel es sólido o no
|
// Indica si el tile al que pertenece el pixel es sólido o no
|
||||||
bool Room::isSolid(int x, int y)
|
bool Room::isFloor(SDL_Point point)
|
||||||
{
|
{
|
||||||
int tile = ((y / 8) * 32) + (x / 8);
|
int tile = ((point.y / 8) * 32) + (point.x / 8);
|
||||||
|
|
||||||
if (tile < 512)
|
if (tile < 512)
|
||||||
{
|
{
|
||||||
if (tilemap[tile] != 0)
|
if (tilemap[tile] != 0)
|
||||||
|
|||||||
@@ -81,8 +81,8 @@ public:
|
|||||||
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
// Devuelve la cadena del fichero de la habitación contigua segun el borde
|
||||||
std::string getRoom(int border);
|
std::string getRoom(int border);
|
||||||
|
|
||||||
// Dice si el tile al que pertenece el pixel es sólido o no
|
// Indica si el tile al que pertenece el pixel es sólido o no
|
||||||
bool isSolid(int x, int y);
|
bool isFloor(SDL_Point point);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user