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