canvi de pc enmig de la enfangà

This commit is contained in:
2025-02-25 13:18:56 +01:00
parent 817140825a
commit c9da5135b2
29 changed files with 878 additions and 1042 deletions

View File

@@ -32,7 +32,8 @@ Game::Game()
asset_(Asset::get()),
input_(Input::get()),
resource_(Resource::get()),
debug_(Debug::get())
debug_(Debug::get()),
cheevos_(Cheevos::get())
{
// Inicia algunas variables
board_.iniClock = SDL_GetTicks();
@@ -50,19 +51,18 @@ Game::Game()
#endif
// Crea los objetos
cheevos_ = Cheevos::get();
scoreboard_ = new Scoreboard(&board_);
item_tracker_ = new ItemTracker();
room_tracker_ = new RoomTracker();
room_ = new Room(resource_->getRoom(current_room_), item_tracker_, &board_.items, false);
scoreboard_ = std::make_shared<Scoreboard>(&board_);
item_tracker_ = std::make_shared<ItemTracker>();
room_tracker_ = std::make_shared<RoomTracker>();
room_ = std::make_shared<Room>(resource_->getRoom(current_room_), item_tracker_, &board_.items, false);
const std::string playerPNG = options.cheats.alternate_skin == Cheat::CheatState::ENABLED ? "player2.png" : "player.png";
const std::string playerANI = options.cheats.alternate_skin == Cheat::CheatState::ENABLED ? "player2.ani" : "player.ani";
const player_t player = {spawn_point_, playerPNG, playerANI, room_};
player_ = new Player(player);
text_ = new Text(resource_->getOffset("smb2.txt"), resource_->getTexture("smb2.png"), renderer_);
music_ = JA_LoadMusic(asset_->get("game.ogg").c_str());
player_ = std::make_shared<Player>(player);
text_ = resource_->getText("smb2.txt");
music_ = resource_->getMusic("game.ogg");
death_sound_ = JA_LoadSound(asset_->get("death.wav").c_str());
stats_ = new Stats(asset_->get("stats.csv"), asset_->get("stats_buffer.csv"));
stats_ = std::make_shared<Stats>(asset_->get("stats.csv"), asset_->get("stats_buffer.csv"));
// Crea la textura para poner el nombre de la habitación
room_name_texture_ = SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, GAMECANVAS_WIDTH, text_->getCharacterSize() * 2);
@@ -111,18 +111,7 @@ Game::Game()
Game::~Game()
{
// Libera la memoria de los objetos
delete scoreboard_;
delete item_tracker_;
delete room_tracker_;
delete room_;
delete player_;
delete text_;
delete stats_;
SDL_DestroyTexture(room_name_texture_);
JA_DeleteMusic(music_);
JA_DeleteSound(death_sound_);
}
// Comprueba los eventos de la cola
@@ -146,7 +135,7 @@ void Game::checkEvents()
break;
case SDL_SCANCODE_R:
resource_->reLoad();
resource_->reload();
break;
case SDL_SCANCODE_W:
@@ -292,9 +281,9 @@ void Game::render()
// Pasa la información de debug
void Game::updateDebugInfo()
{
debug_->add("X = " + std::to_string(static_cast<int>(player_->x)) + ", Y = " + std::to_string(static_cast<int>(player_->y)));
debug_->add("VX = " + std::to_string(player_->vx).substr(0, 4) + ", VY = " + std::to_string(player_->vy).substr(0, 4));
debug_->add("STATE = " + std::to_string(player_->state));
debug_->add("X = " + std::to_string(static_cast<int>(player_->x_)) + ", Y = " + std::to_string(static_cast<int>(player_->y_)));
debug_->add("VX = " + std::to_string(player_->vx_).substr(0, 4) + ", VY = " + std::to_string(player_->vy_).substr(0, 4));
debug_->add("STATE = " + std::to_string(player_->state_));
}
// Pone la información de debug en pantalla
@@ -346,12 +335,8 @@ bool Game::changeRoom(std::string file)
// Verifica que exista el fichero que se va a cargar
if (asset_->get(file) != "")
{
// Elimina la habitación actual
delete room_;
room_ = nullptr;
// Crea un objeto habitación nuevo a partir del fichero
room_ = new Room(resource_->getRoom(file), item_tracker_, &board_.items, board_.jail_is_open);
room_ = std::make_shared<Room>(resource_->getRoom(file), item_tracker_, &board_.items, board_.jail_is_open);
// Pone el nombre de la habitación en la textura
fillRoomNameTexture();
@@ -448,10 +433,6 @@ void Game::killPlayer()
// Invalida el logro de pasarse el juego sin morir
cheevos_->invalidate(11);
// Destruye la habitacion y el jugador
delete room_;
delete this->player_;
// Sonido
JA_PlaySound(death_sound_);
@@ -459,11 +440,11 @@ void Game::killPlayer()
setBlackScreen();
// Crea la nueva habitación y el nuevo jugador
room_ = new Room(resource_->getRoom(current_room_), item_tracker_, &board_.items, board_.jail_is_open);
room_ = std::make_shared<Room>(resource_->getRoom(current_room_), item_tracker_, &board_.items, board_.jail_is_open);
const std::string playerPNG = options.cheats.alternate_skin == Cheat::CheatState::ENABLED ? "player2.png" : "player.png";
const std::string playerANI = options.cheats.alternate_skin == Cheat::CheatState::ENABLED ? "player2.ani" : "player.ani";
const player_t player = {spawn_point_, playerPNG, playerANI, room_};
player_ = new Player(player);
player_ = std::make_shared<Player>(player);
// Pone los objetos en pausa mientras esta la habitación en negro
room_->pause();
@@ -558,10 +539,9 @@ bool Game::checkEndGame()
int Game::getTotalItems()
{
int items = 0;
std::vector<res_room_t> *rooms = new std::vector<res_room_t>;
rooms = resource_->getAllRooms();
auto rooms = resource_->getRooms();
for (auto room : *rooms)
for (auto room : rooms)
{
items += room.room->items.size();
}
@@ -632,10 +612,9 @@ void Game::checkRestoringJail()
// Inicializa el diccionario de las estadísticas
void Game::initStats()
{
std::vector<res_room_t> *rooms = new std::vector<res_room_t>;
rooms = resource_->getAllRooms();
auto rooms = resource_->getRooms();
for (auto room : *rooms)
for (auto room : rooms)
{
stats_->addDictionary(room.room->number, room.room->name);
}
@@ -655,7 +634,7 @@ void Game::fillRoomNameTexture()
SDL_RenderClear(renderer_);
// Escribe el texto en la textura
text_->writeDX(TXT_CENTER | TXT_COLOR, GAMECANVAS_CENTER_X, text_->getCharacterSize() / 2, room_->getName(), 1, room_->getBGColor());
text_->writeDX(TEXT_CENTER | TEXT_COLOR, GAMECANVAS_CENTER_X, text_->getCharacterSize() / 2, room_->getName(), 1, room_->getBGColor());
// Deja el renderizador por defecto
SDL_SetRenderTarget(renderer_, nullptr);