migrades portes i plataformes a solidActor
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "game/entities/door.hpp" // Para Door, Door::Data
|
||||
|
||||
class CollisionMap;
|
||||
class SolidActorManager;
|
||||
|
||||
/**
|
||||
* @brief Gestor de puertas de una habitación
|
||||
@@ -18,14 +18,14 @@ class CollisionMap;
|
||||
* - Actualizar y renderizar todas las puertas
|
||||
* - Detectar contacto del jugador con puertas cerradas y disparar la apertura
|
||||
* si tiene la llave correspondiente (consultando el Inventory global)
|
||||
* - Sincronizar el estado bloqueante con el CollisionMap: cuando una puerta
|
||||
* está CLOSED u OPENING, sus 4 tiles son WALL; cuando pasa a OPENED, se
|
||||
* ponen a EMPTY
|
||||
* - Registrar cada puerta en el SolidActorManager para que sus AABBs
|
||||
* participen en los sweeps de colisión del Player. El bit BLOCKS_PLAYER
|
||||
* del propio Door se encarga de activar/desactivar el bloqueo al abrir.
|
||||
* - Persistir el estado abierto en DoorTracker
|
||||
*/
|
||||
class DoorManager {
|
||||
public:
|
||||
DoorManager(std::string room_id, CollisionMap* collision_map);
|
||||
DoorManager(std::string room_id, SolidActorManager* solid_actors);
|
||||
~DoorManager() = default;
|
||||
|
||||
// Prohibir copia y movimiento para evitar duplicación accidental
|
||||
@@ -35,7 +35,7 @@ class DoorManager {
|
||||
auto operator=(DoorManager&&) -> DoorManager& = delete;
|
||||
|
||||
// Gestión de puertas
|
||||
void addDoor(std::shared_ptr<Door> door); // Añade una puerta y aplica WALLs si está cerrada
|
||||
void addDoor(std::shared_ptr<Door> door); // Añade una puerta y la registra en el SolidActorManager
|
||||
void clear(); // Elimina todas las puertas
|
||||
|
||||
// Actualización y renderizado
|
||||
@@ -66,24 +66,20 @@ class DoorManager {
|
||||
/**
|
||||
* @brief Mueve la puerta indicada a (x, y) en píxeles
|
||||
*
|
||||
* Limpia los WALLs viejos del CollisionMap y, si la puerta sigue siendo
|
||||
* bloqueante, escribe los nuevos. Encapsula el bookkeeping de tiles para
|
||||
* que el editor nunca toque el CollisionMap directamente.
|
||||
* Reposiciona el sprite y el AABB de la puerta. El registro en el
|
||||
* SolidActorManager no cambia: el manager siempre lee el AABB actual
|
||||
* del SolidActor durante los sweeps.
|
||||
*/
|
||||
void moveDoor(int index, float x, float y);
|
||||
|
||||
/**
|
||||
* @brief Elimina la puerta indicada del vector y limpia sus WALLs del CollisionMap
|
||||
* @brief Elimina la puerta indicada del vector y la desregistra del SolidActorManager
|
||||
*/
|
||||
void removeDoor(int index);
|
||||
#endif
|
||||
|
||||
private:
|
||||
static constexpr int DOOR_TILES_HEIGHT = 4; // Una puerta ocupa 4 tiles verticalmente
|
||||
|
||||
void writeDoorTiles(const Door& door, int tile_value); // Setea las 4 celdas en el CollisionMap
|
||||
|
||||
std::vector<std::shared_ptr<Door>> doors_; // Colección de puertas
|
||||
std::string room_id_; // Identificador de la habitación
|
||||
CollisionMap* collision_map_; // Referencia no propietaria al CollisionMap de la Room
|
||||
SolidActorManager* solid_actors_; // Referencia no propietaria al SolidActorManager de la Room
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user