Implementado el cambio de pantalla

This commit is contained in:
2022-08-20 15:41:23 +02:00
parent 7e93b3150f
commit 75c6acdd53
16 changed files with 364 additions and 62 deletions

View File

@@ -10,7 +10,7 @@ Game::Game(SDL_Renderer *renderer, Asset *asset, Screen *screen, Input *input)
this->input = input;
eventHandler = new SDL_Event();
map = new Map(asset->get("01.map"), renderer, asset);
map = new Map(asset->get("02.map"), renderer, asset);
player = new Player(renderer, asset, input, map);
debugText = new Text(asset->get("debug.png"), asset->get("debug.txt"), renderer);
}
@@ -75,6 +75,7 @@ void Game::update()
}
player->update();
checkScreenBorders();
checkInput();
}
}
@@ -105,6 +106,8 @@ void Game::checkInput()
if (input->checkInput(INPUT_BUTTON_3, REPEAT_FALSE))
{
delete map;
map = new Map(asset->get("01.map"),renderer, asset);
delete player;
player = new Player(renderer, asset, input, map);
}
@@ -156,4 +159,40 @@ void Game::renderDebugInfo()
text = "state " + std::to_string(player->state);
debugText->write(0, line += 6, text, -1);
text = map->getRoomFileName(b_top) + " " +map->getRoomFileName(b_right) + " " +map->getRoomFileName(b_bottom) + " " +map->getRoomFileName(b_left);
debugText->write(0, line += 6, text, -1);
}
// Cambia el mapa
bool Game::changeMap(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 (asset->get(file) != "")
{
// Elimina la habitación actual
delete map;
// Crea un objeto habitación nuevo a partir del fichero
map = new Map(asset->get(file), renderer, asset);
success = true;
}
return success;
}
// Comprueba si el jugador está en el borde y se ha de cambiar el mapa
void Game::checkScreenBorders()
{
if (player->isOnScreenBorder())
{
if (changeMap(map->getRoomFileName(player->getBorder())))
{
player->setMap(map);
player->switchBorders();
}
}
}