ItemModifier.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. #pragma once
  2. #include <ReferenceCounter.h>
  3. #include <Text.h>
  4. #include "Item.h"
  5. class ItemModifier : public virtual Framework::ReferenceCounter
  6. {
  7. public:
  8. ItemModifier();
  9. virtual void applyOn(Item* zItem) = 0;
  10. };
  11. class ConsumeItemModifier : public ItemModifier
  12. {
  13. public:
  14. ConsumeItemModifier();
  15. void applyOn(Item* zItem) override;
  16. };
  17. class ConsumeItemModifierFactory
  18. : public SubTypeFactory<ItemModifier, ConsumeItemModifier>
  19. {
  20. public:
  21. ConsumeItemModifierFactory();
  22. ConsumeItemModifier* fromJson(
  23. Framework::JSON::JSONObject* zJson) const override;
  24. Framework::JSON::JSONObject* toJson(
  25. ConsumeItemModifier* zObject) const override;
  26. Framework::JSON::Validator::JSONValidator* getValidator(
  27. Framework::JSON::Validator::ObjectValidationBuilder<
  28. Framework::JSON::Validator::JSONValidator>* builder) const override;
  29. Framework::Text getTypeToken() const override;
  30. };
  31. class DoNothingModifier : public ItemModifier
  32. {
  33. public:
  34. DoNothingModifier();
  35. void applyOn(Item* zItem) override;
  36. };
  37. class DoNothingModifierFactory
  38. : public SubTypeFactory<ItemModifier, DoNothingModifier>
  39. {
  40. public:
  41. DoNothingModifierFactory();
  42. DoNothingModifier* fromJson(
  43. Framework::JSON::JSONObject* zJson) const override;
  44. Framework::JSON::JSONObject* toJson(
  45. DoNothingModifier* zObject) const override;
  46. Framework::JSON::Validator::JSONValidator* getValidator(
  47. Framework::JSON::Validator::ObjectValidationBuilder<
  48. Framework::JSON::Validator::JSONValidator>* builder) const override;
  49. Framework::Text getTypeToken() const override;
  50. };
  51. class AttributeItemModifier : public ItemModifier
  52. {
  53. private:
  54. Framework::RCArray<Framework::Text> attributes;
  55. Framework::RCArray<Framework::JSON::JSONValue> values;
  56. public:
  57. AttributeItemModifier(Framework::RCArray<Framework::Text> attribute,
  58. Framework::RCArray<Framework::JSON::JSONValue> value);
  59. void applyOn(Item* zItem) override;
  60. const Framework::RCArray<Framework::Text>& getAttributes() const;
  61. const Framework::RCArray<Framework::JSON::JSONValue>& getValues() const;
  62. };
  63. class AttributeItemModifierFactory
  64. : public SubTypeFactory<ItemModifier, AttributeItemModifier>
  65. {
  66. public:
  67. AttributeItemModifierFactory();
  68. AttributeItemModifier* fromJson(
  69. Framework::JSON::JSONObject* zJson) const override;
  70. Framework::JSON::JSONObject* toJson(
  71. AttributeItemModifier* zObject) const override;
  72. Framework::JSON::Validator::JSONValidator* getValidator(
  73. Framework::JSON::Validator::ObjectValidationBuilder<
  74. Framework::JSON::Validator::JSONValidator>* builder) const override;
  75. Framework::Text getTypeToken() const override;
  76. };
  77. class CombinedItemModifier : public ItemModifier
  78. {
  79. Framework::RCArray<ItemModifier> modifiers;
  80. public:
  81. CombinedItemModifier(Framework::RCArray<ItemModifier> modifiers);
  82. void applyOn(Item* zItem) override;
  83. const Framework::RCArray<ItemModifier>& getModifiers() const;
  84. };
  85. class CombinedItemModifierFactory
  86. : public SubTypeFactory<ItemModifier, CombinedItemModifier>
  87. {
  88. public:
  89. CombinedItemModifierFactory();
  90. CombinedItemModifier* fromJson(
  91. Framework::JSON::JSONObject* zJson) const override;
  92. Framework::JSON::JSONObject* toJson(
  93. CombinedItemModifier* zObject) const override;
  94. Framework::JSON::Validator::JSONValidator* getValidator(
  95. Framework::JSON::Validator::ObjectValidationBuilder<
  96. Framework::JSON::Validator::JSONValidator>* builder) const override;
  97. Framework::Text getTypeToken() const override;
  98. };