#pragma once #include #include #include "Item.h" class ItemModifier : public virtual Framework::ReferenceCounter { public: ItemModifier(); virtual void applyOn(Item* zItem) = 0; }; class ConsumeItemModifier : public ItemModifier { public: ConsumeItemModifier(); void applyOn(Item* zItem) override; }; class ConsumeItemModifierFactory : public SubTypeFactory { public: ConsumeItemModifierFactory(); ConsumeItemModifier* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( ConsumeItemModifier* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class DoNothingModifier : public ItemModifier { public: DoNothingModifier(); void applyOn(Item* zItem) override; }; class DoNothingModifierFactory : public SubTypeFactory { public: DoNothingModifierFactory(); DoNothingModifier* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( DoNothingModifier* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class AttributeItemModifier : public ItemModifier { private: Framework::RCArray attributes; Framework::RCArray values; public: AttributeItemModifier(Framework::RCArray attribute, Framework::RCArray value); void applyOn(Item* zItem) override; const Framework::RCArray& getAttributes() const; const Framework::RCArray& getValues() const; }; class AttributeItemModifierFactory : public SubTypeFactory { public: AttributeItemModifierFactory(); AttributeItemModifier* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( AttributeItemModifier* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; }; class CombinedItemModifier : public ItemModifier { Framework::RCArray modifiers; public: CombinedItemModifier(Framework::RCArray modifiers); void applyOn(Item* zItem) override; const Framework::RCArray& getModifiers() const; }; class CombinedItemModifierFactory : public SubTypeFactory { public: CombinedItemModifierFactory(); CombinedItemModifier* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson( CombinedItemModifier* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; };