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