#pragma once #include #include #include #include class Item; class ItemType; class ItemSlot; class ItemFilter : public virtual Framework::ReferenceCounter { public: ItemFilter(); virtual bool matchItem(const Item* zItem) const; virtual bool matchSourceSlot(ItemSlot* zSlot) const; virtual bool matchTargetSlot(ItemSlot* zSlot) const; virtual Framework::Text getLogicUIML() const = 0; }; class CombinedItemFilter : public ItemFilter { private: Framework::RCArray filters; std::function op; public: CombinedItemFilter(); CombinedItemFilter(Framework::RCArray filters, std::function op); bool matchItem(const Item* zItem) const override; bool matchSourceSlot(ItemSlot* zSlot) const override; bool matchTargetSlot(ItemSlot* zSlot) const override; Framework::Text getLogicUIML() const override; void addFilter(ItemFilter* filter); const Framework::RCArray& getFilters() const; void setOp(std::function op); std::function getOp() const; }; class CombinedItemFilterFactory : public SubTypeFactory { public: CombinedItemFilterFactory(); CombinedItemFilter* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(CombinedItemFilter* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(CombinedItemFilter* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class AnyItemFilter : public ItemFilter { public: AnyItemFilter(); bool matchItem(const Item* zItem) const override; Framework::Text getLogicUIML() const override; }; class AnyItemFilterFactory : public SubTypeFactory { public: AnyItemFilterFactory(); AnyItemFilter* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(AnyItemFilter* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(AnyItemFilter* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class TypeItemFilter : public ItemFilter { private: const ItemType* type; public: TypeItemFilter(); bool matchItem(const Item* zItem) const override; Framework::Text getLogicUIML() const override; void setType(const ItemType* type); const ItemType* zType() const; }; class TypeItemFilterFactory : public SubTypeFactory { public: TypeItemFilterFactory(); TypeItemFilter* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(TypeItemFilter* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(TypeItemFilter* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class SpecificSlotFilter : public ItemFilter { private: int sourceSlotId; int targetSlotId; public: SpecificSlotFilter(int sourceSlotId, int targetSlotId); bool matchSourceSlot(ItemSlot* zSlot) const override; bool matchTargetSlot(ItemSlot* zSlot) const override; Framework::Text getLogicUIML() const override; }; class SourceSlotBlacklistFilter : public ItemFilter { private: Framework::Array blackList; public: SourceSlotBlacklistFilter(); void addBlackListSlotId(int id); bool matchSourceSlot(ItemSlot* zSlot) const override; bool matchTargetSlot(ItemSlot* zSlot) const override; Framework::Text getLogicUIML() const override; }; class TargetSlotBlacklistFilter : public ItemFilter { private: Framework::Array blackList; public: TargetSlotBlacklistFilter(); void addBlackListSlotId(int id); bool matchSourceSlot(ItemSlot* zSlot) const override; bool matchTargetSlot(ItemSlot* zSlot) const override; Framework::Text getLogicUIML() const override; }; class GroupItemFilter : public ItemFilter { private: Framework::RCArray groups; public: GroupItemFilter(); bool matchItem(const Item* zItem) const override; Framework::Text getLogicUIML() const override; void addGroup(const Framework::Text group); const Framework::RCArray& getGroups() const; }; class GroupItemFilterFactory : public SubTypeFactory { public: GroupItemFilterFactory(); GroupItemFilter* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(GroupItemFilter* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(GroupItemFilter* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; };