#pragma once class Entity; class Obstacle; class Human; class Room; class Creature; class GridCell { public: GridCell(); void ClearRoomData(Room* room); void TraverseHumanList(std::function func, int room_idx, bool& stop); void TraverseCreatures(std::function& func, int room_idx, bool& stop); void TraverseObstacles(std::function& func, int room_idx, bool& stop); void AddCreature(Creature* c); void RemoveCreature(Creature* c); bool CreatureExists(Creature* c); void AddRoomEntity(Room* room, Entity* entity); void RemoveRoomEntity(Room* room, Entity* entity); bool EntityExists(Room* room, Entity* Entity); void TraverseLayer0EntityList(std::function& func, bool& stop); void TraverseLayer1EntityList(std::function& func, int room_idx, bool& stop); void TraverseAllLayerEntityList(std::function& func, int room_idx, bool& stop); private: std::vector> entitys_; std::vector> obstacles_; std::vector> creatures_; };