FluidContainer.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #pragma once
  2. #include <Vec3.h>
  3. #include "BlockFilter.h"
  4. #include "Item.h"
  5. #include "ItemSkill.h"
  6. #include "ItemType.h"
  7. class FluidContainerItemType;
  8. class FluidContainerItem : public Item
  9. {
  10. private:
  11. int fluidTypeId;
  12. int fluidAmount;
  13. public:
  14. FluidContainerItem(int itemTypeId, Framework::Text name);
  15. virtual const BlockType* zPlacedBlockType() const override;
  16. virtual bool canBeStackedWith(const Item* zItem) const override;
  17. virtual bool canBePlacedAt(
  18. int dimensionId, Framework::Vec3<int> worldPos) const override;
  19. virtual void onPlaced();
  20. virtual UIMLTooltipBuilder* getTooltipUIML() const override;
  21. virtual bool applyFoodEffects(Entity* zTarget) override;
  22. virtual bool canApplyFoodEffectsFully(Entity* zTarget) const override;
  23. int getAmount() const;
  24. void setAmount(int amount);
  25. int getFluidTypeId() const;
  26. void setFluidTypeId(int fluidTypeId);
  27. friend FluidContainerItemType;
  28. };
  29. class FluidContainerItemSkillConfig : public Framework::ReferenceCounter
  30. {
  31. private:
  32. BlockFilter* targetFilter;
  33. float staminaCost;
  34. float staminaCostDevider;
  35. float staminaCostDeviderPerLevel;
  36. int cooldownTicks;
  37. float xpGain;
  38. public:
  39. FluidContainerItemSkillConfig();
  40. ~FluidContainerItemSkillConfig();
  41. void setTargetFilter(BlockFilter* targetFilter);
  42. BlockFilter* zTargetFilter() const;
  43. void setStaminaCost(float staminaCost);
  44. float getStaminaCost() const;
  45. void setStaminaCostDevider(float staminaCostDevider);
  46. float getStaminaCostDevider() const;
  47. void setStaminaCostDeviderPerLevel(float staminaCostDeviderPerLevel);
  48. float getStaminaCostDeviderPerLevel() const;
  49. void setCooldownTicks(int cooldownTicks);
  50. int getCooldownTicks() const;
  51. void setXpGain(float xpGain);
  52. float getXpGain() const;
  53. };
  54. class FluidContainerItemSkillConfigFactory
  55. : public ObjectTypeFactory<FluidContainerItemSkillConfig>
  56. {
  57. public:
  58. FluidContainerItemSkillConfigFactory();
  59. FluidContainerItemSkillConfig* fromJson(
  60. Framework::JSON::JSONObject* zJson) const override;
  61. Framework::JSON::JSONObject* toJsonObject(
  62. FluidContainerItemSkillConfig* zObject) const override;
  63. JSONObjectValidationBuilder* addToValidator(
  64. JSONObjectValidationBuilder* builder) const override;
  65. };
  66. class FluidContainerItemSkill : public ItemSkill
  67. {
  68. private:
  69. int cooldownTicks;
  70. FluidContainerItemSkillConfig* invalidUseConfig;
  71. Framework::RCArray<FluidContainerItemSkillConfig> configs;
  72. public:
  73. FluidContainerItemSkill();
  74. ~FluidContainerItemSkill();
  75. virtual bool use(Entity* zActor, Item* zUsedItem, Block* zTarget) override;
  76. virtual bool use(Entity* zActor, Item* zUsedItem, Entity* zTarget) override;
  77. void setInvalidUseConfig(FluidContainerItemSkillConfig* invalidUseConfig);
  78. FluidContainerItemSkillConfig* zInvalidUseConfig() const;
  79. void addConfig(FluidContainerItemSkillConfig* config);
  80. const Framework::RCArray<FluidContainerItemSkillConfig>& zConfigs() const;
  81. };
  82. class FluidContainerItemSkillFactory
  83. : public ItemSkillFactoryBase<FluidContainerItemSkill>
  84. {
  85. public:
  86. FluidContainerItemSkillFactory();
  87. FluidContainerItemSkill* createValue(
  88. Framework::JSON::JSONObject* zJson) const override;
  89. FluidContainerItemSkill* fromJson(
  90. Framework::JSON::JSONObject* zJson) const override;
  91. Framework::JSON::JSONObject* toJsonObject(
  92. FluidContainerItemSkill* zObject) const override;
  93. JSONObjectValidationBuilder* addToValidator(
  94. JSONObjectValidationBuilder* builder) const override;
  95. const char* getTypeToken() const override;
  96. };
  97. class FluidContainerItemType : public ItemType
  98. {
  99. private:
  100. int maxFluidAmount;
  101. Framework::JSON::JSONObject* itemSkillConfig;
  102. ItemSkillLevelUpRule* levelUpRule;
  103. public:
  104. FluidContainerItemType();
  105. ~FluidContainerItemType();
  106. protected:
  107. virtual void loadSuperItem(
  108. Item* zItem, Framework::StreamReader* zReader) const override;
  109. virtual void saveSuperItem(
  110. const Item* zItem, Framework::StreamWriter* zWriter) const override;
  111. public:
  112. virtual Item* createItem() const override;
  113. virtual ItemSkill* createDefaultItemSkill() const override;
  114. virtual void levelUpItemSkill(ItemSkill* zSkill) const override;
  115. virtual void setItemAttribute(Item* zItem,
  116. Framework::Text name,
  117. Framework::JSON::JSONValue* zValue) const override;
  118. virtual void addItemAttributes(
  119. Item* zItem, Framework::JSON::JSONObject* zItemObjet) const override;
  120. void setItemSkillConfig(Framework::JSON::JSONObject* itemSkillConfig);
  121. Framework::JSON::JSONObject* zItemSkillConfig() const;
  122. void setLevelUpRule(ItemSkillLevelUpRule* levelUpRule);
  123. ItemSkillLevelUpRule* zLevelUpRule() const;
  124. void setMaxFluidAmount(int maxFluidAmount);
  125. int getMaxFluidAmount() const;
  126. };
  127. class FluidContainerItemTypeFactory
  128. : public ItemTypeFactoryBase<FluidContainerItemType>
  129. {
  130. public:
  131. FluidContainerItemTypeFactory();
  132. FluidContainerItemType* createValue(
  133. Framework::JSON::JSONObject* zJson) const override;
  134. FluidContainerItemType* fromJson(
  135. Framework::JSON::JSONObject* zJson) const override;
  136. Framework::JSON::JSONObject* toJsonObject(
  137. FluidContainerItemType* zObject) const override;
  138. JSONObjectValidationBuilder* addToValidator(
  139. JSONObjectValidationBuilder* builder) const override;
  140. const char* getTypeToken() const override;
  141. };