1 #pragma once 2 3 #include "util.h" 4 #include "position_map.h" 5 #include "unique_entity.h" 6 #include "entity_map.h" 7 8 class Creature; 9 class Level; 10 11 class VisibilityMap { 12 public: 13 void update(WConstCreature, const vector<Position>& visibleTiles); 14 void remove(WConstCreature); 15 void updateEyeball(Position); 16 void removeEyeball(Position); 17 void onVisibilityChanged(Position); 18 bool isVisible(Position) const; 19 20 template <class Archive> 21 void serialize(Archive& ar, const unsigned int version); 22 23 private: 24 EntityMap<Creature, vector<Position>> SERIAL(lastUpdates); 25 PositionMap<optional<vector<Position>>> SERIAL(eyeballs); 26 PositionMap<int> SERIAL(visibilityCount); 27 void addPositions(const vector<Position>&); 28 void removePositions(const vector<Position>&); 29 }; 30 31 32