GrowingPlant.h 2.2 KB

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