migrades portes i plataformes a solidActor
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -75,7 +75,6 @@ class Game {
|
||||
void handleInput(); // Comprueba el teclado
|
||||
void checkPlayerIsOnBorder(); // Comprueba si el jugador esta en el borde de la pantalla y actua
|
||||
auto checkPlayerAndEnemies() -> bool; // Comprueba las colisiones del jugador con los enemigos
|
||||
void checkPlayerAndPlatforms(); // Comprueba si el jugador está sobre una plataforma móvil
|
||||
void checkPlayerAndItems(); // Comprueba las colisiones del jugador con los objetos
|
||||
void checkPlayerAndKeys(); // Comprueba las colisiones del jugador con las llaves
|
||||
void checkIfPlayerIsAlive(); // Comprueba si el jugador esta vivo
|
||||
|
||||
Reference in New Issue
Block a user