polimorfise d'enemics

moving platforms
This commit is contained in:
2026-04-08 14:09:28 +02:00
parent 5e02854e7a
commit 73a520bf3c
20 changed files with 632 additions and 106 deletions

View File

@@ -18,6 +18,7 @@
#include "core/system/event_buffer.hpp" // Para EventBuffer
#include "core/system/global_events.hpp" // Para check
#include "game/defaults.hpp" // Para Defaults::Game
#include "game/entities/moving_platform.hpp" // Para MovingPlatform
#include "game/game_control.hpp" // Para GameControl
#include "game/gameplay/item_tracker.hpp" // Para ItemTracker
#include "game/gameplay/room.hpp" // Para Room, RoomData
@@ -305,6 +306,10 @@ void Game::updatePlaying(float delta_time) {
updateAdjacentRooms(delta_time);
switch (mode_) {
case Mode::GAME:
// Plataformas: resetear flag y detectar antes de la física del player
player_->clearPlatformFlag();
checkPlayerAndPlatforms();
#ifdef _DEBUG
// Maneja el arrastre del jugador con el ratón (debug)
handleDebugMouseDrag(delta_time);
@@ -496,12 +501,14 @@ void Game::renderPlaying() {
// Renderizar habitación saliente con su offset
Screen::get()->setRenderOffset(old_ox, old_oy);
transition_old_room_->renderMap();
transition_old_room_->renderPlatforms();
transition_old_room_->renderEnemies();
transition_old_room_->renderItems();
// Renderizar habitación entrante + jugador con su offset
Screen::get()->setRenderOffset(new_ox, new_oy);
room_->renderMap();
room_->renderPlatforms();
room_->renderEnemies();
room_->renderItems();
if (mode_ == Mode::GAME) {
@@ -514,6 +521,7 @@ void Game::renderPlaying() {
} else {
// --- Renderizado normal ---
room_->renderMap();
room_->renderPlatforms();
room_->renderEnemies();
room_->renderItems();
if (mode_ == Mode::GAME) {
@@ -895,6 +903,14 @@ auto Game::checkPlayerAndEnemies() -> bool {
return DEATH;
}
// Comprueba si el jugador está sobre una plataforma móvil y lo transporta
void Game::checkPlayerAndPlatforms() {
auto* platform = room_->checkPlayerOnPlatform(player_->getCollider(), player_->getVY());
if (platform != nullptr) {
player_->applyPlatformDisplacement(platform->getLastDX(), platform->getCollider().y);
}
}
// Comprueba las colisiones del jugador con los objetos
void Game::checkPlayerAndItems() {
room_->itemCollision(player_->getCollider());