#pragma once #include "core/Common.hpp" #include "combat/Enemy.hpp" #include #include namespace dnr { struct DoorData { int x; int y; int securityLevel; // 1 to 3: controls number of pins and skill check speed bool unlocked; }; struct LootData { int x; int y; std::vector ammoRewards; int picksReward; bool looted; }; struct MapEnemy { int x; int y; Enemy enemy; bool alive = true; }; class Dungeon { public: Dungeon(int width = 21, int height = 21); void clear(); void resize(int width, int height); int getWidth() const { return m_width; } int getHeight() const { return m_height; } int getFloor() const { return m_floor; } void setFloor(int floor) { m_floor = floor; } TileType getTile(int x, int y) const; void setTile(int x, int y, TileType type); bool isWalkable(int x, int y) const; bool isDoor(int x, int y) const; bool isDoorLocked(int x, int y) const; DoorData* getDoorAt(int x, int y); LootData* getLootAt(int x, int y); MapEnemy* getEnemyAt(int x, int y); void addDoor(int x, int y, int secLevel); void addLoot(int x, int y, const std::vector& ammo, int picks); void addEnemy(int x, int y, EnemyType type, int level); void removeEnemyAt(int x, int y); void unlockDoorAt(int x, int y); bool isExplored(int x, int y) const; void reveal(int centerX, int centerY, int radius = 3); const std::vector& getDoors() const { return m_doors; } const std::vector& getLoots() const { return m_loots; } std::vector& getEnemies() { return m_enemies; } private: int m_width; int m_height; int m_floor = 1; std::vector m_tiles; std::vector m_explored; std::vector m_doors; std::vector m_loots; std::vector m_enemies; }; } // namespace dnr