- afegides claus i portes al editor
- fix: crear una nova habitació no modificava la memoria, soles els fitxers
This commit is contained in:
@@ -78,6 +78,40 @@ void DoorManager::tryUnlock(const SDL_FRect& player_rect) {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
// Mueve una puerta del editor: limpia los WALLs viejos, reposiciona el sprite,
|
||||
// y reescribe los WALLs nuevos si la puerta sigue siendo bloqueante.
|
||||
void DoorManager::moveDoor(int index, float x, float y) {
|
||||
if (index < 0 || index >= static_cast<int>(doors_.size())) { return; }
|
||||
auto& door = doors_[index];
|
||||
|
||||
// Limpiar los WALLs viejos antes de mover
|
||||
if (door->isBlocking()) {
|
||||
writeDoorTiles(*door, static_cast<int>(TileCollider::Tile::EMPTY));
|
||||
}
|
||||
|
||||
// Reposicionar el sprite y el collider del Door
|
||||
door->setPosition(x, y);
|
||||
|
||||
// Re-escribir los WALLs nuevos en la nueva posición si sigue siendo bloqueante
|
||||
if (door->isBlocking()) {
|
||||
writeDoorTiles(*door, static_cast<int>(TileCollider::Tile::WALL));
|
||||
}
|
||||
}
|
||||
|
||||
// Elimina una puerta del editor, limpiando los WALLs antes de borrarla del vector
|
||||
void DoorManager::removeDoor(int index) {
|
||||
if (index < 0 || index >= static_cast<int>(doors_.size())) { return; }
|
||||
auto& door = doors_[index];
|
||||
|
||||
if (door->isBlocking()) {
|
||||
writeDoorTiles(*door, static_cast<int>(TileCollider::Tile::EMPTY));
|
||||
}
|
||||
|
||||
doors_.erase(doors_.begin() + index);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Setea las 4 celdas que ocupa la puerta (1 col × 4 filas) al valor indicado
|
||||
void DoorManager::writeDoorTiles(const Door& door, int tile_value) {
|
||||
// Convertir posición en píxeles a coordenadas de tile
|
||||
|
||||
@@ -58,6 +58,26 @@ class DoorManager {
|
||||
*/
|
||||
void tryUnlock(const SDL_FRect& player_rect);
|
||||
|
||||
#ifdef _DEBUG
|
||||
// --- API para el editor (debug) ---
|
||||
[[nodiscard]] auto getCount() const -> int { return static_cast<int>(doors_.size()); }
|
||||
auto getDoor(int index) -> std::shared_ptr<Door>& { return doors_.at(index); }
|
||||
|
||||
/**
|
||||
* @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.
|
||||
*/
|
||||
void moveDoor(int index, float x, float y);
|
||||
|
||||
/**
|
||||
* @brief Elimina la puerta indicada del vector y limpia sus WALLs del CollisionMap
|
||||
*/
|
||||
void removeDoor(int index);
|
||||
#endif
|
||||
|
||||
private:
|
||||
static constexpr int DOOR_TILES_HEIGHT = 4; // Una puerta ocupa 4 tiles verticalmente
|
||||
|
||||
|
||||
@@ -53,6 +53,12 @@ class KeyManager {
|
||||
*/
|
||||
auto checkCollision(SDL_FRect& rect) -> bool;
|
||||
|
||||
#ifdef _DEBUG
|
||||
// --- API para el editor (debug) ---
|
||||
[[nodiscard]] auto getCount() const -> int { return static_cast<int>(keys_.size()); }
|
||||
auto getKey(int index) -> std::shared_ptr<Key>& { return keys_.at(index); }
|
||||
#endif
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr<Key>> keys_; // Colección de llaves
|
||||
std::string room_id_; // Identificador de la habitación
|
||||
|
||||
Reference in New Issue
Block a user