106 lines
2.3 KiB
C++
106 lines
2.3 KiB
C++
#pragma once
|
|
#include <QObject>
|
|
#include <vector>
|
|
#include <QRandomGenerator>
|
|
#include <QSettings>
|
|
#include <QJsonObject>
|
|
#include <memory>
|
|
|
|
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<Actor> > 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<Actor> >& getActors();
|
|
bool hasActors();
|
|
void addActor(std::shared_ptr<Actor> actor);
|
|
bool removeActor(std::shared_ptr<Actor> 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<Item> loadItem(const QJsonObject& json);
|
|
|
|
protected:
|
|
virtual void enactValue(uint8_t value);
|
|
|
|
};
|
|
|