migrades portes i plataformes a solidActor

This commit is contained in:
2026-04-11 12:54:54 +02:00
parent 49f6ed41e6
commit 5b2f986d32
22 changed files with 686 additions and 286 deletions

View File

@@ -319,9 +319,6 @@ 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)
@@ -858,6 +855,24 @@ void Game::buildCollisionBorders() {
adj.bottom_right = getDiagCollision(Room::Border::BOTTOM, Room::Border::RIGHT);
room_->updateCollisionBorders(adj);
// Además del tilemap extendido, propagar también los punteros a los
// SolidActorManager de las rooms cardinales adyacentes. Esto permite
// que los sweeps del Player vean AABBs dinámicos (puertas, plataformas)
// de la room vecina cuando está cerca del borde, sin tener que esperar
// a una transición completa de room.
auto getAdjacentSolidActors = [&](Room::Border b) -> SolidActorManager* {
auto name = room_->getRoom(b);
if (name == "0") { return nullptr; }
return &getOrCreateRoom(name)->getSolidActors();
};
SolidActorManager::AdjacentActors sadj;
sadj.upper = getAdjacentSolidActors(Room::Border::TOP);
sadj.lower = getAdjacentSolidActors(Room::Border::BOTTOM);
sadj.left = getAdjacentSolidActors(Room::Border::LEFT);
sadj.right = getAdjacentSolidActors(Room::Border::RIGHT);
room_->updateSolidActorBorders(sadj);
}
// Actualiza los enemigos de las habitaciones adyacentes a la actual
@@ -950,14 +965,6 @@ 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::checkPlayerAndKeys() {
room_->keyCollision(player_->getCollider());