#pragma once #include "QuestEvent.h" #include "TypeRegistry.h" class QuestStorage; class UIMLContainerBuilder; class QuestRequirement : public virtual Framework::ReferenceCounter { protected: Framework::Text id; Framework::Text description; public: QuestRequirement(); virtual void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) = 0; virtual void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) = 0; virtual void api(Framework::StreamReader* message, Framework::XML::Element* zParent, QuestStorage* zStorage); void setRequirementId(Framework::Text id); const Framework::Text& getRequirementId() const; void setDescription(Framework::Text description); const Framework::Text& getDescription() const; }; template class QuestRequirementFactoryBase : public SubTypeFactory { public: QuestRequirementFactoryBase() : SubTypeFactory() {} S* fromJson(Framework::JSON::JSONObject* zJson) const override { S* result = createValue(zJson); QuestRequirement* zRequirement = dynamic_cast(result); zRequirement->setRequirementId( zJson->zValue("id")->asString()->getString()); zRequirement->setDescription( zJson->zValue("description")->asString()->getString()); return result; } Framework::JSON::JSONObject* toJsonObject(S* zObject) const override { Framework::JSON::JSONObject* result = new Framework::JSON::JSONObject(); QuestRequirement* zRequirement = dynamic_cast(zObject); result->addValue("id", new Framework::JSON::JSONString(zRequirement->getRequirementId())); result->addValue("description", new Framework::JSON::JSONString(zRequirement->getDescription())); return result; } JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override { return builder->withRequiredString("id") ->finishString() ->withRequiredString("description") ->finishString(); } protected: virtual S* createValue(Framework::JSON::JSONObject* zJson) const = 0; }; class QuestRequirementOpenDialogType; class QuestRequirementOpenDialog : public QuestRequirement { private: Framework::Text dialogId; public: QuestRequirementOpenDialog(); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override; void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) override; void setDialogId(Framework::Text dialogId); const Framework::Text& getDialogId() const; friend QuestRequirementOpenDialogType; }; class QuestRequirementOpenDialogType : public QuestRequirementFactoryBase { public: QuestRequirementOpenDialogType(); QuestRequirementOpenDialog* createValue( Framework::JSON::JSONObject* zJson) const override; QuestRequirementOpenDialog* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( QuestRequirementOpenDialog* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; }; class QuestRequirementBlockBreak : public QuestRequirement { private: int blockTypeId; int amount; int usedItemTypeId; public: QuestRequirementBlockBreak(); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override; void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) override; void setBlockTypeId(int blockTypeId); int getBlockTypeId() const; void setAmount(int amount); int getAmount() const; void setUsedItemTypeId(int usedItemTypeId); int getUsedItemTypeId() const; }; class QuestRequirementBlockBreakType : public QuestRequirementFactoryBase { public: QuestRequirementBlockBreakType(); QuestRequirementBlockBreak* createValue( Framework::JSON::JSONObject* zJson) const override; QuestRequirementBlockBreak* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( QuestRequirementBlockBreak* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; }; class QuestRequirementBlockPlace : public QuestRequirement { private: int blockTypeId; int amount; public: QuestRequirementBlockPlace(); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override; void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) override; void setBlockTypeId(int blockTypeId); int getBlockTypeId() const; void setAmount(int amount); int getAmount() const; }; class QuestRequirementBlockPlaceType : public QuestRequirementFactoryBase { public: QuestRequirementBlockPlaceType(); QuestRequirementBlockPlace* createValue( Framework::JSON::JSONObject* zJson) const override; QuestRequirementBlockPlace* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( QuestRequirementBlockPlace* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; }; class QuestRequirementBlockInteract : public QuestRequirement { int blockTypeId; int itemTypeId; public: QuestRequirementBlockInteract(); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override; void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) override; void setBlockTypeId(int blockTypeId); int getBlockTypeId() const; void setItemTypeId(int itemTypeId); int getItemTypeId() const; }; class QuestRequirementBlockInteractType : public QuestRequirementFactoryBase { public: QuestRequirementBlockInteractType(); QuestRequirementBlockInteract* createValue( Framework::JSON::JSONObject* zJson) const override; QuestRequirementBlockInteract* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( QuestRequirementBlockInteract* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; }; class QuestRequirementItemInInventory : public QuestRequirement { private: int itemTypeId; int amount; public: QuestRequirementItemInInventory(); void processEvent(QuestEvent* zEvent, QuestStorage* zStorage) override; void addRequirementUIML( QuestStorage* zStorage, UIMLContainerBuilder* zParent) override; void setItemTypeId(int itemTypeId); int getItemTypeId() const; void setAmount(int amount); int getAmount() const; }; class QuestRequirementItemInInventoryType : public QuestRequirementFactoryBase { public: QuestRequirementItemInInventoryType(); QuestRequirementItemInInventory* createValue( Framework::JSON::JSONObject* zJson) const override; QuestRequirementItemInInventory* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( QuestRequirementItemInInventory* zObject) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; };