1 #pragma once
2 
3 #include "util.h"
4 #include "unique_entity.h"
5 #include "position.h"
6 
7 class View;
8 
9 enum class MessagePriority { NORMAL, HIGH, CRITICAL };
10 
11 class PlayerMessage : public UniqueEntity<PlayerMessage> {
12   public:
13   PlayerMessage(const string&, MessagePriority = MessagePriority::NORMAL);
14   PlayerMessage(const char*, MessagePriority = MessagePriority::NORMAL);
15 
16   static void presentMessages(View*, const vector<PlayerMessage>&);
17   static PlayerMessage announcement(const string& title, const string& text);
18 
19   PlayerMessage& setPosition(Position);
20   optional<Position> getPosition() const;
21   optional<string> getAnnouncementTitle() const;
22 
23   PlayerMessage& setCreature(UniqueEntity<Creature>::Id);
24   optional<UniqueEntity<Creature>::Id> getCreature() const;
25 
26   bool isClickable() const;
27 
28   string getText() const;
29   MessagePriority getPriority() const;
30   double getFreshness() const;
31   void setFreshness(double);
32 
33   int getHash() const;
34 
35   SERIALIZATION_DECL(PlayerMessage);
36 
37   private:
38   PlayerMessage(const string& title, const string& text);
39   string SERIAL(text);
40   MessagePriority SERIAL(priority);
41   double SERIAL(freshness);
42   optional<string> SERIAL(announcementTitle);
43   optional<Position> SERIAL(position);
44   optional<UniqueEntity<Creature>::Id> SERIAL(creature);
45 };
46 
47