GrowingPlant.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #pragma once
  2. #include "Block.h"
  3. class GrowingPlantBlockType;
  4. struct GrowthState
  5. {
  6. GrowthState(float percentage, ModelInfo model);
  7. GrowthState();
  8. GrowthState& operator=(const GrowthState& right);
  9. float percentage;
  10. ModelInfo model;
  11. };
  12. class GrowingPlantBlock : public Block
  13. {
  14. private:
  15. float seblingTicks;
  16. int seblingTicksMax;
  17. const char* name;
  18. Framework::Array<GrowthState> states;
  19. int blockTypeAfterGrowth;
  20. bool plantSpawned;
  21. bool modelUpdated;
  22. public:
  23. GrowingPlantBlock(
  24. int typeId,
  25. const ItemType* zTool,
  26. Framework::Vec3<int> pos,
  27. int maxTicks,
  28. const char* name,
  29. int blockTypeAfterGrowth);
  30. virtual bool onTick(
  31. TickQueue* zQueue, int numTicks, bool& blocked) override;
  32. virtual void onPostTick() override;
  33. virtual Framework::Text getTargetUIML();
  34. GrowingPlantBlock* addGrowthState(GrowthState state);
  35. friend GrowingPlantBlockType;
  36. };
  37. class GrowingPlantBlockType : public BlockType
  38. {
  39. private:
  40. bool transparent;
  41. bool passable;
  42. float hardness;
  43. const ItemType* zTool;
  44. float speedModifier;
  45. bool interactable;
  46. Framework::Array<GrowthState> states;
  47. int blockTypeAfterGrowth;
  48. const char* readableName;
  49. int ticksNeeded;
  50. protected:
  51. virtual void loadSuperBlock(Block* zBlock,
  52. Framework::StreamReader* zReader,
  53. int dimensionId) const override;
  54. void createSuperBlock(
  55. Block* zBlock, Item* zItem) const override;
  56. virtual void saveSuperBlock(
  57. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  58. virtual Item* createItem() const override;
  59. virtual Block* createBlock(Framework::Vec3<int> position) const override;
  60. public:
  61. GrowingPlantBlockType(int typeId,
  62. ModelInfo model,
  63. const char* name,
  64. int blockTypeAfterGrowth,
  65. const char* readableName,
  66. int ticksNeeded);
  67. GrowingPlantBlockType* setHardness(float hardness);
  68. GrowingPlantBlockType* addGrowthState(
  69. float growthPercentage, ModelInfo model);
  70. };