forked from jaildesigner-jailgames/jaildoctors_dilemma
Implementado el cambio de habitación
This commit is contained in:
122
source/game.cpp
122
source/game.cpp
@@ -78,43 +78,95 @@ section_t Game::run()
|
||||
// Sección juego jugando
|
||||
if (mSection.subsection == SECTION_GAME_PLAY)
|
||||
{
|
||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
||||
{
|
||||
// Actualiza el contador de ticks
|
||||
mTicks = SDL_GetTicks();
|
||||
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(mEventHandler) != 0)
|
||||
{
|
||||
// Evento de salida de la aplicación
|
||||
if (mEventHandler->type == SDL_QUIT)
|
||||
{
|
||||
mSection.name = SECTION_PROG_QUIT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Prepara para dibujar el frame
|
||||
const color_t color = {0xAA, 0x55, 0x55};
|
||||
mScreen->start();
|
||||
mScreen->clean(color);
|
||||
mScreen->clean(mRoom->getBGColor());
|
||||
|
||||
mRoom->drawMap();
|
||||
|
||||
// Escribe las medidas de ancho y alto de la pantalla
|
||||
// mText->writeCentered(GAMECANVAS_CENTER_X, 0, std::to_string(GAMECANVAS_WIDTH), -1);
|
||||
// mText->write(0, GAMECANVAS_CENTER_Y - (mText->getCharacterWidth() / 2), std::to_string(GAMECANVAS_HEIGHT), -1);
|
||||
|
||||
// Texto en el centro de la pantalla
|
||||
mText->writeCentered(GAMECANVAS_CENTER_X, 18 * 8, mRoom->getName(), -1);
|
||||
|
||||
// Actualiza la pantalla
|
||||
mScreen->blit();
|
||||
update();
|
||||
draw();
|
||||
}
|
||||
}
|
||||
|
||||
return mSection;
|
||||
}
|
||||
|
||||
// Actualiza el juego, las variables, comprueba la entrada, etc.
|
||||
void Game::update()
|
||||
{
|
||||
// Comprueba que la diferencia de ticks sea mayor a la velocidad del juego
|
||||
if (SDL_GetTicks() - mTicks > mTicksSpeed)
|
||||
{
|
||||
// Actualiza el contador de ticks
|
||||
mTicks = SDL_GetTicks();
|
||||
|
||||
// Comprueba los eventos que hay en la cola
|
||||
while (SDL_PollEvent(mEventHandler) != 0)
|
||||
{
|
||||
// Evento de salida de la aplicación
|
||||
if (mEventHandler->type == SDL_QUIT)
|
||||
{
|
||||
mSection.name = SECTION_PROG_QUIT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
checkInput();
|
||||
}
|
||||
}
|
||||
|
||||
// Pinta los objetos en pantalla
|
||||
void Game::draw()
|
||||
{
|
||||
// Prepara para dibujar el frame
|
||||
const color_t color = {0xAA, 0x55, 0x55};
|
||||
mScreen->start();
|
||||
mScreen->clean(color);
|
||||
mScreen->clean(mRoom->getBGColor());
|
||||
|
||||
mRoom->drawMap();
|
||||
|
||||
// Escribe las medidas de ancho y alto de la pantalla
|
||||
// mText->writeCentered(GAMECANVAS_CENTER_X, 0, std::to_string(GAMECANVAS_WIDTH), -1);
|
||||
// mText->write(0, GAMECANVAS_CENTER_Y - (mText->getCharacterWidth() / 2), std::to_string(GAMECANVAS_HEIGHT), -1);
|
||||
|
||||
// Texto en el centro de la pantalla
|
||||
mText->writeCentered(GAMECANVAS_CENTER_X, 18 * 8, mRoom->getName(), -1);
|
||||
|
||||
// Actualiza la pantalla
|
||||
mScreen->blit();
|
||||
}
|
||||
|
||||
// Comprueba la entrada
|
||||
void Game::checkInput()
|
||||
{
|
||||
if (mInput->checkInput(INPUT_UP, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomUp());
|
||||
|
||||
if (mInput->checkInput(INPUT_DOWN, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomDown());
|
||||
|
||||
if (mInput->checkInput(INPUT_LEFT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomLeft());
|
||||
|
||||
if (mInput->checkInput(INPUT_RIGHT, REPEAT_FALSE))
|
||||
changeRoom(mRoom->getRoomRight());
|
||||
}
|
||||
|
||||
// Cambia de habitación
|
||||
bool Game::changeRoom(std::string file)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
// En las habitaciones los limites tienen la cadena del fichero o un 0 en caso de no limitar con nada
|
||||
if (file != "0")
|
||||
// Verifica que exista el fichero que se va a cargar
|
||||
if (mAsset->get(file) != "")
|
||||
{
|
||||
// Elimina la habitación actual
|
||||
delete mRoom;
|
||||
mRoom = nullptr;
|
||||
|
||||
// Crea un objeto habitación nuevo a partir del fichero
|
||||
mRoom = new Room(mAsset->get(file), mRenderer, mAsset);
|
||||
|
||||
success = true;
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
Reference in New Issue
Block a user