#pragma once #include #include #include #include "json.hpp" using json = nlohmann::json; enum class ObjectType { ITEM, SCENERY, NONE }; class Object { protected: int id; std::string name; std::string description; std::vector keywords; ObjectType type; bool canTake; int roomIdItBelongsTo; public: Object() = default; Object(const int i, std::string n, std::string desc, std::vector k, const ObjectType o, const bool ct, const int rID) { id = i; name = std::move(n); description = std::move(desc); keywords = std::move(k); type = o; canTake = ct; roomIdItBelongsTo = rID; } virtual void Interact() = 0; std::string GetName() const { return name; } std::string GetDescription() const { return description; } ObjectType GetObjectType() const { return type; } std::vector GetKeywords() const { return keywords; } int GetId() const { return id; } int GetRoomId() const { return roomIdItBelongsTo; } bool CanTake() const { return canTake; } virtual ~Object() = default; }; // Global/Namespace scope serialization functions inline void to_json(json &j, Object &obj) { j = json{{"id", obj.GetId()}, {"name", obj.GetName()}, {"description", obj.GetDescription()}, {"keywords", obj.GetKeywords()}, {"type", obj.GetObjectType()}, {"canTake", obj.CanTake()}, {"roomIdItBelongsTo", obj.GetRoomId()}}; }