#pragma once #include #include #include #include #include #include class Actor; typedef enum { ITEM_VALUE_BOOL = 0, ITEM_VALUE_UINT, ITEM_VALUE_NO_VALUE } item_value_type_t; class ItemData { protected: QString name_; uint8_t value_; uint32_t itemId_; bool loaded_; bool hidden_; item_value_type_t type_; public: ItemData(uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "Item", uint8_t value = 0, bool loaded = false, bool hidden = false, item_value_type_t type = ITEM_VALUE_BOOL); inline bool operator==(const ItemData& in) const { return itemId_ == in.itemId_; } inline bool operator!=(const ItemData& in) const { return itemId_ != in.itemId_; } uint32_t id() const; bool hasChanged(const ItemData& other); void setName(QString name); uint8_t getValue() const; bool getLoaded() const; void setLoaded(bool loaded); bool isHidden(); void setHidden(bool hidden); item_value_type_t getValueType(); virtual QString getName() const; virtual void store(QJsonObject& json); virtual void load(const QJsonObject& json, const bool preserve = false); }; class Item: public QObject, public ItemData { Q_OBJECT private: std::vector< std::shared_ptr > actors_; bool override_ = false; signals: void valueChanged(uint8_t value); void updated(ItemData data); private slots: virtual void actorSetValue(uint8_t value); public slots: void setValue(uint8_t value); public: Item(uint32_t itemIdIn = QRandomGenerator::global()->generate(), QString name = "Item", uint8_t value = 0, QObject *parent = nullptr); Item(const ItemData& itemData, QObject *parent = nullptr); virtual ~Item(); std::vector< std::shared_ptr >& getActors(); bool hasActors(); void addActor(std::shared_ptr actor); bool removeActor(std::shared_ptr actor); void removeAllActors(); void setActorsActive(bool in); void setOverride(const bool in); bool getOverride(); void informValue(uint8_t value); void mergeLoaded(Item& item); virtual void store(QJsonObject& json); virtual void load(const QJsonObject& json, const bool preserve = false); static std::shared_ptr loadItem(const QJsonObject& json); protected: virtual void enactValue(uint8_t value); };