GrowingPlant.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #pragma once
  2. #include "Block.h"
  3. #include "BlockType.h"
  4. class GrowingPlantBlockType;
  5. struct GrowthState : public Framework::ReferenceCounter
  6. {
  7. private:
  8. float percentage;
  9. ModelInfo* model;
  10. public:
  11. GrowthState(float percentage, ModelInfo* model);
  12. ~GrowthState();
  13. float getPercentage() const;
  14. ModelInfo* zModel() const;
  15. };
  16. class GrowingPlantBlock : public Block
  17. {
  18. private:
  19. float seblingTicks;
  20. int seblingTicksMax;
  21. Framework::Text name;
  22. Framework::RCArray<GrowthState> states;
  23. int blockTypeAfterGrowth;
  24. bool plantSpawned;
  25. int lastSendState;
  26. public:
  27. GrowingPlantBlock(int typeId,
  28. Framework::Vec3<int> pos,
  29. int dimensionId,
  30. int maxTicks,
  31. Framework::Text name,
  32. int blockTypeAfterGrowth);
  33. virtual bool onTick(
  34. TickQueue* zQueue, int numTicks, bool& blocked) override;
  35. virtual void onPostTick() override;
  36. virtual void sendModelInfo(NetworkMessage* zMessage) override;
  37. virtual TickSourceType isTickSource() const override;
  38. virtual Framework::XML::Element* getTargetUIML() const override;
  39. GrowingPlantBlock* addGrowthState(GrowthState* state);
  40. friend GrowingPlantBlockType;
  41. };
  42. class GrowingPlantBlockType : public BlockType
  43. {
  44. private:
  45. bool transparent;
  46. bool passable;
  47. float speedModifier;
  48. bool interactable;
  49. Framework::RCArray<GrowthState> states;
  50. int blockTypeIdAfterGrowth;
  51. Framework::Text blockTypeNameAfterGrowth;
  52. Framework::Text readableName;
  53. int ticksNeeded;
  54. public:
  55. GrowingPlantBlockType();
  56. protected:
  57. virtual void loadSuperBlock(Block* zBlock,
  58. Framework::StreamReader* zReader,
  59. int dimensionId) const override;
  60. void createSuperBlock(Block* zBlock, Item* zItem) const override;
  61. virtual void saveSuperBlock(
  62. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  63. virtual Item* createItem() const override;
  64. virtual Block* createBlock(
  65. Framework::Vec3<int> position, int dimensionId) const override;
  66. public:
  67. virtual bool initialize(Game* zGame) override;
  68. virtual ItemType* createItemType() const override;
  69. GrowingPlantBlockType* addGrowthState(
  70. float growthPercentage, ModelInfo* model);
  71. const Framework::RCArray<GrowthState>& getStates() const;
  72. void setBlockTypeNameAfterGrowth(Framework::Text blockTypeIdAfterGrowth);
  73. Framework::Text getBlockTypeNameAfterGrowth() const;
  74. void setReadableName(Framework::Text readableName);
  75. Framework::Text getReadableName() const;
  76. void setTicksNeeded(int ticksNeeded);
  77. int getTicksNeeded() const;
  78. void setTransparent(bool transparent);
  79. bool isTransparent() const;
  80. void setPassable(bool passable);
  81. bool isPassable() const;
  82. void setSpeedModifier(float speedModifier);
  83. float getSpeedModifier() const;
  84. void setInteractable(bool interactable);
  85. bool isInteractable() const;
  86. };
  87. class GrowingPlantBlockTypeFactory
  88. : public BlockTypeFactoryBase<GrowingPlantBlockType>
  89. {
  90. public:
  91. GrowingPlantBlockTypeFactory();
  92. GrowingPlantBlockType* createValue(
  93. Framework::JSON::JSONObject* zJson) const override;
  94. GrowingPlantBlockType* fromJson(
  95. Framework::JSON::JSONObject* zJson) const override;
  96. Framework::JSON::JSONObject* toJsonObject(
  97. GrowingPlantBlockType* zObject) const override;
  98. JSONObjectValidationBuilder* addToValidator(
  99. JSONObjectValidationBuilder* builder) const override;
  100. const char* getTypeToken() const override;
  101. };