ItemFilter.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. #pragma once
  2. #include <Array.h>
  3. #include <functional>
  4. #include <ReferenceCounter.h>
  5. #include <TypeRegistry.h>
  6. class Item;
  7. class ItemType;
  8. class ItemSlot;
  9. class ItemFilter : public virtual Framework::ReferenceCounter
  10. {
  11. public:
  12. ItemFilter();
  13. virtual bool matchItem(const Item* zItem) const;
  14. virtual bool matchSourceSlot(ItemSlot* zSlot) const;
  15. virtual bool matchTargetSlot(ItemSlot* zSlot) const;
  16. virtual Framework::Text getLogicUIML() const = 0;
  17. };
  18. class CombinedItemFilter : public ItemFilter
  19. {
  20. private:
  21. Framework::RCArray<ItemFilter> filters;
  22. std::function<bool(bool, bool)> op;
  23. public:
  24. CombinedItemFilter(Framework::RCArray<ItemFilter> filters,
  25. std::function<bool(bool, bool)> op);
  26. bool matchItem(const Item* zItem) const override;
  27. bool matchSourceSlot(ItemSlot* zSlot) const override;
  28. bool matchTargetSlot(ItemSlot* zSlot) const override;
  29. Framework::Text getLogicUIML() const override;
  30. const Framework::RCArray<ItemFilter>& getFilters() const;
  31. std::function<bool(bool, bool)> getOp() const;
  32. };
  33. class CombinedItemFilterFactory
  34. : public SubTypeFactory<ItemFilter, CombinedItemFilter>
  35. {
  36. public:
  37. CombinedItemFilterFactory();
  38. CombinedItemFilter* fromJson(
  39. Framework::JSON::JSONObject* zJson) const override;
  40. Framework::JSON::JSONObject* toJson(
  41. CombinedItemFilter* zObject) const override;
  42. Framework::JSON::Validator::JSONValidator* getValidator(
  43. Framework::JSON::Validator::ObjectValidationBuilder<
  44. Framework::JSON::Validator::JSONValidator>* builder) const override;
  45. Framework::Text getTypeToken() const override;
  46. };
  47. class AnyItemFilter : public ItemFilter
  48. {
  49. public:
  50. AnyItemFilter();
  51. bool matchItem(const Item* zItem) const override;
  52. Framework::Text getLogicUIML() const override;
  53. };
  54. class AnyItemFilterFactory : public SubTypeFactory<ItemFilter, AnyItemFilter>
  55. {
  56. public:
  57. AnyItemFilterFactory();
  58. AnyItemFilter* fromJson(Framework::JSON::JSONObject* zJson) const override;
  59. Framework::JSON::JSONObject* toJson(AnyItemFilter* zObject) const override;
  60. Framework::JSON::Validator::JSONValidator* getValidator(
  61. Framework::JSON::Validator::ObjectValidationBuilder<
  62. Framework::JSON::Validator::JSONValidator>* builder) const override;
  63. Framework::Text getTypeToken() const override;
  64. };
  65. class TypeItemFilter : public ItemFilter
  66. {
  67. private:
  68. const ItemType* type;
  69. public:
  70. TypeItemFilter(const ItemType* zType);
  71. bool matchItem(const Item* zItem) const override;
  72. Framework::Text getLogicUIML() const override;
  73. const ItemType* zType() const;
  74. };
  75. class TypeItemFilterFactory : public SubTypeFactory<ItemFilter, TypeItemFilter>
  76. {
  77. public:
  78. TypeItemFilterFactory();
  79. TypeItemFilter* fromJson(Framework::JSON::JSONObject* zJson) const override;
  80. Framework::JSON::JSONObject* toJson(TypeItemFilter* zObject) const override;
  81. Framework::JSON::Validator::JSONValidator* getValidator(
  82. Framework::JSON::Validator::ObjectValidationBuilder<
  83. Framework::JSON::Validator::JSONValidator>* builder) const override;
  84. Framework::Text getTypeToken() const override;
  85. };
  86. class SpecificSlotFilter : public ItemFilter
  87. {
  88. private:
  89. int sourceSlotId;
  90. int targetSlotId;
  91. public:
  92. SpecificSlotFilter(int sourceSlotId, int targetSlotId);
  93. bool matchSourceSlot(ItemSlot* zSlot) const override;
  94. bool matchTargetSlot(ItemSlot* zSlot) const override;
  95. Framework::Text getLogicUIML() const override;
  96. };
  97. class SourceSlotBlacklistFilter : public ItemFilter
  98. {
  99. private:
  100. Framework::Array<int> blackList;
  101. public:
  102. SourceSlotBlacklistFilter();
  103. void addBlackListSlotId(int id);
  104. bool matchSourceSlot(ItemSlot* zSlot) const override;
  105. bool matchTargetSlot(ItemSlot* zSlot) const override;
  106. Framework::Text getLogicUIML() const override;
  107. };
  108. class TargetSlotBlacklistFilter : public ItemFilter
  109. {
  110. private:
  111. Framework::Array<int> blackList;
  112. public:
  113. TargetSlotBlacklistFilter();
  114. void addBlackListSlotId(int id);
  115. bool matchSourceSlot(ItemSlot* zSlot) const override;
  116. bool matchTargetSlot(ItemSlot* zSlot) const override;
  117. Framework::Text getLogicUIML() const override;
  118. };
  119. class GroupItemFilter : public ItemFilter
  120. {
  121. private:
  122. Framework::RCArray<Framework::Text> groups;
  123. public:
  124. GroupItemFilter(Framework::RCArray<Framework::Text> groups);
  125. bool matchItem(const Item* zItem) const override;
  126. Framework::Text getLogicUIML() const override;
  127. const Framework::RCArray<Framework::Text>& getGroups() const;
  128. };
  129. class GroupItemFilterFactory
  130. : public SubTypeFactory<ItemFilter, GroupItemFilter>
  131. {
  132. public:
  133. GroupItemFilterFactory();
  134. GroupItemFilter* fromJson(
  135. Framework::JSON::JSONObject* zJson) const override;
  136. Framework::JSON::JSONObject* toJson(
  137. GroupItemFilter* zObject) const override;
  138. Framework::JSON::Validator::JSONValidator* getValidator(
  139. Framework::JSON::Validator::ObjectValidationBuilder<
  140. Framework::JSON::Validator::JSONValidator>* builder) const override;
  141. Framework::Text getTypeToken() const override;
  142. };