FluidContainer.h 5.3 KB

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