Recipie.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #pragma once
  2. #include <Array.h>
  3. #include <JSON.h>
  4. #include "ItemFilter.h"
  5. #include "ItemModifier.h"
  6. #include "TypeRegistry.h"
  7. class CraftingStorage;
  8. class ShapedCraftingStorage;
  9. struct ItemInfo
  10. {
  11. int type;
  12. int count;
  13. float hp;
  14. float maxHp;
  15. float durability;
  16. float maxDurability;
  17. };
  18. class RecipieInput : public Framework::ReferenceCounter
  19. {
  20. private:
  21. ItemFilter* filter;
  22. ItemModifier* modifier;
  23. int amount;
  24. public:
  25. RecipieInput(ItemFilter* filter, ItemModifier* modifier, int amount);
  26. ~RecipieInput();
  27. ItemFilter* zFilter() const;
  28. ItemModifier* zModifier() const;
  29. int getAmount() const;
  30. };
  31. class RecipieInputFactory : public TypeFactory<RecipieInput>
  32. {
  33. public:
  34. RecipieInputFactory();
  35. RecipieInput* fromJson(Framework::JSON::JSONValue* zJson) const override;
  36. Framework::JSON::JSONValue* toJson(RecipieInput* zObject) const override;
  37. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  38. };
  39. class RecipieOutput : public Framework::ReferenceCounter
  40. {
  41. private:
  42. int itemTypeId;
  43. int amount;
  44. ItemModifier* modifier;
  45. public:
  46. RecipieOutput(int itemTypeId, int amount, ItemModifier* modifier);
  47. ~RecipieOutput();
  48. int getItemTypeId() const;
  49. int getAmount() const;
  50. ItemModifier* zModifier() const;
  51. Item* createItem() const;
  52. };
  53. class RecipieOutputFactory : public TypeFactory<RecipieOutput>
  54. {
  55. public:
  56. RecipieOutputFactory();
  57. RecipieOutput* fromJson(Framework::JSON::JSONValue* zJson) const override;
  58. Framework::JSON::JSONValue* toJson(RecipieOutput* zObject) const override;
  59. Framework::JSON::Validator::JSONValidator* getValidator() const override;
  60. };
  61. class Recipie : public virtual Framework::ReferenceCounter
  62. {
  63. protected:
  64. Framework::Text groupName;
  65. Framework::RCArray<RecipieOutput> outputs;
  66. public:
  67. Recipie(
  68. Framework::RCArray<RecipieOutput> outputs, Framework::Text groupName);
  69. virtual bool testApplicability(CraftingStorage* zStorage) = 0;
  70. virtual void apply(CraftingStorage* zStorage) = 0;
  71. virtual Framework::Text getRecipieUIML() = 0;
  72. virtual Framework::Array<ItemInfo> getOutput() const;
  73. bool createsOutput(int itemTypeId);
  74. const Framework::RCArray<RecipieOutput>& getOutputs() const;
  75. Framework::Text getGroupName() const;
  76. };
  77. class UnshapedRecipie : public Recipie
  78. {
  79. private:
  80. Framework::RCArray<RecipieInput> inputs;
  81. public:
  82. UnshapedRecipie(Framework::RCArray<RecipieInput> inputs,
  83. Framework::RCArray<RecipieOutput> outputs,
  84. Framework::Text groupName);
  85. bool testApplicability(CraftingStorage* zStorage) override;
  86. void apply(CraftingStorage* zStorage) override;
  87. Framework::Text getRecipieUIML() override;
  88. const Framework::RCArray<RecipieInput>& getInputs() const;
  89. };
  90. class UnshapedRecipieFactory : public SubTypeFactory<Recipie, UnshapedRecipie>
  91. {
  92. public:
  93. UnshapedRecipieFactory();
  94. UnshapedRecipie* fromJson(
  95. Framework::JSON::JSONObject* zJson) const override;
  96. Framework::JSON::JSONObject* toJson(
  97. UnshapedRecipie* zObject) const override;
  98. Framework::JSON::Validator::JSONValidator* getValidator(
  99. Framework::JSON::Validator::ObjectValidationBuilder<
  100. Framework::JSON::Validator::JSONValidator>* builder) const override;
  101. Framework::Text getTypeToken() const override;
  102. };
  103. class ShapedRecipie : public Recipie
  104. {
  105. private:
  106. Framework::RCArray<RecipieInput> inputs;
  107. int width;
  108. int height;
  109. public:
  110. ShapedRecipie(int width,
  111. int height,
  112. Framework::RCArray<RecipieInput> inputs,
  113. Framework::RCArray<RecipieOutput> outputs,
  114. Framework::Text groupName);
  115. bool testApplicability(CraftingStorage* zStorage) override;
  116. void apply(CraftingStorage* zStorage) override;
  117. Framework::Text getRecipieUIML() override;
  118. int getWidth() const;
  119. int getHeight() const;
  120. const Framework::RCArray<RecipieInput>& getInputs() const;
  121. };
  122. class ShapedRecipieFactory : public SubTypeFactory<Recipie, ShapedRecipie>
  123. {
  124. public:
  125. ShapedRecipieFactory();
  126. ShapedRecipie* fromJson(
  127. Framework::JSON::JSONObject* zJson) const override;
  128. Framework::JSON::JSONObject* toJson(ShapedRecipie* zObject) const override;
  129. Framework::JSON::Validator::JSONValidator* getValidator(
  130. Framework::JSON::Validator::ObjectValidationBuilder<
  131. Framework::JSON::Validator::JSONValidator>* builder) const override;
  132. Framework::Text getTypeToken() const override;
  133. };