barrallantse en la colisió en les habitacions dels costats
fix: surface no clipejava be la copia de surfaces a surfaces que eixien per la dreta amb el flip activat
This commit is contained in:
@@ -310,6 +310,39 @@ void Game::updatePlaying(float delta_time) {
|
||||
player_->clearPlatformFlag();
|
||||
checkPlayerAndPlatforms();
|
||||
|
||||
// Cross-room collision: precargar rooms adyacentes para colisiones
|
||||
{
|
||||
player_->clearBorderRooms();
|
||||
auto loadBorder = [&](Room::Border b) -> std::shared_ptr<Room> {
|
||||
auto name = room_->getRoom(b);
|
||||
return (name != "0") ? getOrCreateRoom(name) : nullptr;
|
||||
};
|
||||
auto top = loadBorder(Room::Border::TOP);
|
||||
auto right = loadBorder(Room::Border::RIGHT);
|
||||
auto bottom = loadBorder(Room::Border::BOTTOM);
|
||||
auto left = loadBorder(Room::Border::LEFT);
|
||||
if (top) { player_->setBorderRoom(0, top); }
|
||||
if (right) { player_->setBorderRoom(1, right); }
|
||||
if (bottom) { player_->setBorderRoom(2, bottom); }
|
||||
if (left) { player_->setBorderRoom(3, left); }
|
||||
// Diagonales
|
||||
auto loadDiag = [&](const std::shared_ptr<Room>& a, Room::Border ab,
|
||||
const std::shared_ptr<Room>& b, Room::Border ba) -> std::shared_ptr<Room> {
|
||||
std::string name;
|
||||
if (a) { name = a->getRoom(ab); }
|
||||
if ((name.empty() || name == "0") && b) { name = b->getRoom(ba); }
|
||||
return (!name.empty() && name != "0") ? getOrCreateRoom(name) : nullptr;
|
||||
};
|
||||
auto tr = loadDiag(top, Room::Border::RIGHT, right, Room::Border::TOP);
|
||||
auto br = loadDiag(bottom, Room::Border::RIGHT, right, Room::Border::BOTTOM);
|
||||
auto bl = loadDiag(bottom, Room::Border::LEFT, left, Room::Border::BOTTOM);
|
||||
auto tl = loadDiag(top, Room::Border::LEFT, left, Room::Border::TOP);
|
||||
if (tr) { player_->setBorderRoom(4, tr); }
|
||||
if (br) { player_->setBorderRoom(5, br); }
|
||||
if (bl) { player_->setBorderRoom(6, bl); }
|
||||
if (tl) { player_->setBorderRoom(7, tl); }
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Maneja el arrastre del jugador con el ratón (debug)
|
||||
handleDebugMouseDrag(delta_time);
|
||||
|
||||
Reference in New Issue
Block a user