RecipieIngredient.h 3.1 KB

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