migrades portes i plataformes a solidActor
This commit is contained in:
@@ -750,16 +750,12 @@ auto MapEditor::commitEntityDrag() -> bool {
|
||||
break;
|
||||
case EntityType::DOOR:
|
||||
if (IDX >= 0 && IDX < static_cast<int>(room_data_.doors.size())) {
|
||||
// Truco crítico: durante el drag, moveEntityVisual movió el sprite
|
||||
// pero los WALLs del CollisionMap siguen en la posición antigua. Antes
|
||||
// de llamar a moveDoor (que limpia los tiles "actuales" y escribe los
|
||||
// nuevos), restauramos el sprite a su posición vieja para que coincida
|
||||
// con los tiles. moveDoor luego hace el ciclo limpio y completo.
|
||||
auto* door_mgr = room_->getDoorManager();
|
||||
door_mgr->getDoor(IDX)->setPosition(room_data_.doors[IDX].x, room_data_.doors[IDX].y);
|
||||
// Con el SolidActorManager, moveDoor solo reposiciona el AABB
|
||||
// del Door (no hay tiles que sincronizar). moveEntityVisual ya
|
||||
// movió el sprite durante el drag; moveDoor hace el ajuste final.
|
||||
room_data_.doors[IDX].x = drag_.snap_x;
|
||||
room_data_.doors[IDX].y = drag_.snap_y;
|
||||
door_mgr->moveDoor(IDX, drag_.snap_x, drag_.snap_y);
|
||||
room_->getDoorManager()->moveDoor(IDX, drag_.snap_x, drag_.snap_y);
|
||||
selection_ = {EntityType::DOOR, IDX};
|
||||
return true;
|
||||
}
|
||||
@@ -2503,11 +2499,12 @@ auto MapEditor::duplicateKey() -> std::string {
|
||||
// (id, animation) requiere recrear el Door y mantener los tiles sincronizados.
|
||||
void MapEditor::rebuildDoors() {
|
||||
auto* door_mgr = room_->getDoorManager();
|
||||
// Borrar una a una desde el principio: cada removeDoor limpia sus WALLs
|
||||
// Borrar una a una desde el principio: cada removeDoor desregistra el
|
||||
// Door del SolidActorManager.
|
||||
while (door_mgr->getCount() > 0) {
|
||||
door_mgr->removeDoor(0);
|
||||
}
|
||||
// Re-añadir desde room_data_; addDoor reescribe los WALLs si bloquean
|
||||
// Re-añadir desde room_data_; addDoor las registra como SolidActor.
|
||||
for (const auto& d : room_data_.doors) {
|
||||
door_mgr->addDoor(std::make_shared<Door>(d, /*start_opened=*/false));
|
||||
}
|
||||
@@ -2584,7 +2581,7 @@ auto MapEditor::deleteDoor() -> std::string {
|
||||
|
||||
const int IDX = selection_.index;
|
||||
|
||||
// Importante: usar removeDoor del manager (limpia los WALLs antes de borrar)
|
||||
// Importante: usar removeDoor del manager (desregistra del SolidActorManager)
|
||||
room_->getDoorManager()->removeDoor(IDX);
|
||||
room_data_.doors.erase(room_data_.doors.begin() + IDX);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user