GrowingPlant.h 3.1 KB

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