DropConditionOperator.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #pragma once
  2. #include <Array.h>
  3. #include "DropCondition.h"
  4. #include "TypeRegistry.h"
  5. enum ConditionalOperator
  6. {
  7. AND,
  8. OR
  9. };
  10. class DropConditionOperator : public DropCondition
  11. {
  12. private:
  13. Framework::Array<DropCondition*> conditions;
  14. ConditionalOperator op;
  15. public:
  16. DropConditionOperator(ConditionalOperator op);
  17. ~DropConditionOperator();
  18. void addCondition(DropCondition* condition);
  19. ConditionalOperator getOperator() const;
  20. const Framework::Array<DropCondition*>& getConditions() const;
  21. bool evaluate(Entity* zActor,
  22. Item* zItem,
  23. ItemSkill* zUsedSkill,
  24. Framework::Either<Block*, Entity*> zDestroyedObject) override;
  25. };
  26. class DropConditionNegation : public DropCondition
  27. {
  28. private:
  29. DropCondition* condition;
  30. public:
  31. DropConditionNegation(DropCondition* condition);
  32. ~DropConditionNegation();
  33. const DropCondition* zCondition() const;
  34. bool evaluate(Entity* zActor,
  35. Item* zItem,
  36. ItemSkill* zUsedSkill,
  37. Framework::Either<Block*, Entity*> zDestroyedObject) override;
  38. };
  39. class DropAllwaysCondition : public DropCondition
  40. {
  41. public:
  42. DropAllwaysCondition();
  43. bool evaluate(Entity* zActor,
  44. Item* zItem,
  45. ItemSkill* zUsedSkill,
  46. Framework::Either<Block*, Entity*> zDestroyedObject) override;
  47. };
  48. class DropConditionOperatorFactory
  49. : public SubTypeFactory<DropCondition, DropConditionOperator>
  50. {
  51. public:
  52. DropConditionOperatorFactory();
  53. JSONObjectValidationBuilder* addToValidator(
  54. JSONObjectValidationBuilder* builder) const override;
  55. const char* getTypeToken() const override;
  56. protected:
  57. DropConditionOperator* fromJson(
  58. Framework::JSON::JSONObject* zJson) const override;
  59. Framework::JSON::JSONObject* toJsonObject(
  60. DropConditionOperator* zObject) const override;
  61. };
  62. class DropConditionNegationFactory
  63. : public SubTypeFactory<DropCondition, DropConditionNegation>
  64. {
  65. public:
  66. DropConditionNegationFactory();
  67. JSONObjectValidationBuilder* addToValidator(
  68. JSONObjectValidationBuilder* builder) const override;
  69. const char* getTypeToken() const override;
  70. protected:
  71. DropConditionNegation* fromJson(
  72. Framework::JSON::JSONObject* zJson) const override;
  73. Framework::JSON::JSONObject* toJsonObject(
  74. DropConditionNegation* zObject) const override;
  75. };
  76. class DropAllwaysConditionFactory
  77. : public SubTypeFactory<DropCondition, DropAllwaysCondition>
  78. {
  79. public:
  80. DropAllwaysConditionFactory();
  81. JSONObjectValidationBuilder* addToValidator(
  82. JSONObjectValidationBuilder* builder) const override;
  83. const char* getTypeToken() const override;
  84. protected:
  85. DropAllwaysCondition* fromJson(
  86. Framework::JSON::JSONObject* zJson) const override;
  87. Framework::JSON::JSONObject* toJsonObject(
  88. DropAllwaysCondition* zObject) const override;
  89. };