RecipieIngredient.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #pragma once
  2. #include <Image.h>
  3. #include <TextField.h>
  4. #include <UIMLView.h>
  5. class LogicTree;
  6. class RecipieIngredientElement : public Framework::UIMLElement
  7. {
  8. private:
  9. LogicTree* parse(Framework::XML::Element* zElement);
  10. public:
  11. RecipieIngredientElement();
  12. //! prüft, ob dieses UIML Element für ein bestimmtes xml Element zuständig
  13. //! ist
  14. bool isApplicableFor(Framework::XML::Element& element) override;
  15. //! erstellt eine neue Drawable zu einem gegebenen xml Element
  16. Framework::Drawable* parseElement(Framework::XML::Element& element,
  17. Framework::UIMLContainer& generalFactory) override;
  18. bool updateElement(Framework::XML::Element& element,
  19. Framework::Drawable& z,
  20. Framework::UIMLContainer& generalFactory) override;
  21. //! wendet die layout parameter zu einer Drawable an
  22. void layout(Framework::XML::Element& element,
  23. Framework::Drawable& z,
  24. int pWidth,
  25. int pHeight,
  26. Framework::UIMLContainer& generalLayouter) override;
  27. };
  28. class RecipieIngredient : public Framework::DrawableBackground
  29. {
  30. private:
  31. Framework::RCArray<Framework::Image> icons;
  32. Framework::RCArray<Framework::Text> toolTips;
  33. Framework::Array<int> itemTypes;
  34. Framework::TextField* toolTip;
  35. int currentIconIndex;
  36. double timtUntilNextIcon;
  37. int amount;
  38. public:
  39. RecipieIngredient(int amount);
  40. void addPossibleItem(
  41. Framework::Image* icon, Framework::Text* toolTip, int itemType);
  42. bool tick(double tickVal) override;
  43. void render(Framework::Image& rObj) override;
  44. void doMouseEvent(Framework::MouseEvent& me, bool userRet) override;
  45. };
  46. enum class AttributeOperator
  47. {
  48. Equals,
  49. NotEquals,
  50. GreaterThan,
  51. GreaterThanOrEquals,
  52. LessThan,
  53. LessThanOrEquals
  54. };
  55. class Requirement : public Framework::ReferenceCounter
  56. {
  57. private:
  58. Framework::Text attribute;
  59. Framework::Text value;
  60. AttributeOperator op;
  61. public:
  62. Requirement(
  63. Framework::Text attribute, Framework::Text value, AttributeOperator op);
  64. void negate();
  65. Requirement* clone();
  66. bool contradicts(Requirement* zOther);
  67. bool merge(Requirement* zOther);
  68. int getItemType();
  69. Framework::Text getDescription();
  70. };
  71. class RequirementSet : public Framework::ReferenceCounter
  72. {
  73. private:
  74. Framework::RCArray<Requirement> requirements;
  75. public:
  76. RequirementSet();
  77. void addRequirement(Requirement* zReq);
  78. RequirementSet* clone();
  79. void addRequirements(RequirementSet* zOther);
  80. void negate(LogicTree* zNode);
  81. bool isNoneMatch() const;
  82. bool isAnyMatch() const;
  83. Framework::Text renderToTooltip() const;
  84. Framework::Image* getIcon() const;
  85. int getItemType() const;
  86. };
  87. enum class LogicalOperator
  88. {
  89. AND,
  90. OR
  91. };
  92. class LogicTree : public Framework::ReferenceCounter
  93. {
  94. private:
  95. LogicalOperator op;
  96. RequirementSet* requirementSet;
  97. Framework::RCArray<LogicTree> children;
  98. Framework::RCArray<RequirementSet>* multiply(
  99. Framework::RCArray<RequirementSet>* a,
  100. Framework::RCArray<RequirementSet>* b);
  101. public:
  102. LogicTree(LogicalOperator op, RequirementSet* set);
  103. ~LogicTree();
  104. void addChildren(LogicTree* tree);
  105. LogicTree* clone();
  106. void negate();
  107. Framework::RCArray<RequirementSet>* resolve();
  108. };