#pragma once #include "json.hpp" #include "jsonable.h" #include namespace creature { class Creature; } namespace entry { class Entry; // Set up default text generation std::string genText(const Entry& e, const creature::Creature& c); class Entry : public Jsonable { public: static std::shared_ptr create(const nlohmann::json& data); virtual ~Entry() {} std::string getName(void) const {return name;} std::string getType(void) const {return type;} virtual std::string getText(void) const {return text;} virtual std::string getText(const creature::Creature& c) const { //return genText(*this, c); return genText(*this, c) + ": " + getText(); } virtual nlohmann::json toJson(void) const { return nlohmann::json({ {"name", name}, {"type", type}, {"text", text} }); } protected: Entry(const nlohmann::json& data) : name(data["name"]), type(data["type"]), text(data["text"]) {}; private: const std::string name; const std::string type; const std::string text; }; }