#pragma once #include #include "DropCondition.h" #include "TypeRegistry.h" enum ConditionalOperator { AND, OR }; class DropConditionOperator : public DropCondition { private: Framework::Array conditions; ConditionalOperator op; public: DropConditionOperator(ConditionalOperator op); ~DropConditionOperator(); void addCondition(DropCondition* condition); ConditionalOperator getOperator() const; const Framework::Array& getConditions() const; bool evaluate(Entity* zActor, Item* zItem, ItemSkill* zUsedSkill, Framework::Either zDestroyedObject) override; }; class DropConditionNegation : public DropCondition { private: DropCondition* condition; public: DropConditionNegation(DropCondition* condition); ~DropConditionNegation(); const DropCondition* zCondition() const; bool evaluate(Entity* zActor, Item* zItem, ItemSkill* zUsedSkill, Framework::Either zDestroyedObject) override; }; class DropAllwaysCondition : public DropCondition { public: DropAllwaysCondition(); bool evaluate(Entity* zActor, Item* zItem, ItemSkill* zUsedSkill, Framework::Either zDestroyedObject) override; }; class DropConditionOperatorFactory : public SubTypeFactory { public: DropConditionOperatorFactory(); JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; protected: DropConditionOperator* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( DropConditionOperator* zObject) const override; }; class DropConditionNegationFactory : public SubTypeFactory { public: DropConditionNegationFactory(); JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; protected: DropConditionNegation* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( DropConditionNegation* zObject) const override; }; class DropAllwaysConditionFactory : public SubTypeFactory { public: DropAllwaysConditionFactory(); JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; const char* getTypeToken() const override; protected: DropAllwaysCondition* fromJson( Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJsonObject( DropAllwaysCondition* zObject) const override; };