FluidBlock.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #pragma once
  2. #include "Block.h"
  3. #include "TickQueue.h"
  4. class FluidBlockType;
  5. class FluidContainerItem;
  6. class FluidBlock : public Block
  7. {
  8. private:
  9. char flowOptions;
  10. char distanceToSource;
  11. int nextFlow;
  12. Framework::Vec3<float> lightWeights;
  13. bool neighborChanged;
  14. unsigned char maxFlowDistance;
  15. protected:
  16. virtual bool onTick(
  17. TickQueue* zQueue, int numTicks, bool& blocked) override;
  18. virtual void onPostTick() override;
  19. void doFlow();
  20. public:
  21. FluidBlock(int typeId,
  22. Framework::Vec3<int> pos,
  23. int dimensionId,
  24. Framework::Vec3<float> lightWeights);
  25. virtual ~FluidBlock();
  26. virtual void setNeighbourType(Direction dir, int type) override;
  27. virtual void sendModelInfo(NetworkMessage* zMessage) override;
  28. virtual bool isInteractable(const Item* zItem) const override;
  29. virtual void filterPassingLight(unsigned char rgb[3]) const override;
  30. char getDistanceToSource() const;
  31. char getFlowOptions() const;
  32. friend FluidBlockType;
  33. };
  34. class FluidBlockType : public BlockType
  35. {
  36. private:
  37. Framework::Vec3<float> lightWeights;
  38. int ticktsToFlow;
  39. unsigned char flowDistance;
  40. float hungerRecoveryPerL;
  41. float thirstRecoveryPerL;
  42. float heat;
  43. public:
  44. FluidBlockType(ModelInfo* model,
  45. Framework::Text name,
  46. int mapColor,
  47. Framework::Vec3<float> lightWeights,
  48. int ticktsToFlow,
  49. unsigned char flowDistance,
  50. float hungerRecoveryPerL,
  51. float thirstRecoveryPerL,
  52. float heat,
  53. Framework::RCArray<Framework::Text> groupNames);
  54. protected:
  55. virtual void loadSuperBlock(Block* zBlock,
  56. Framework::StreamReader* zReader,
  57. int dimensionId) const override;
  58. virtual void saveSuperBlock(
  59. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  60. virtual Item* createItem() const override;
  61. virtual Block* createBlock(
  62. Framework::Vec3<int> position, int dimesionId) const override;
  63. public:
  64. bool isFluid() const override;
  65. int getTicktsToFlow() const;
  66. unsigned char getFlowDistance() const override;
  67. Framework::Vec3<float> getLightWeights() const;
  68. float getHungerRecoveryPerL() const;
  69. float getThirstRecoveryPerL() const;
  70. virtual ItemType* createItemType() const override;
  71. float getHeat() const;
  72. };
  73. class FluidBlockTypeFactory : public SubTypeFactory<BlockType, FluidBlockType>
  74. {
  75. public:
  76. FluidBlockTypeFactory();
  77. FluidBlockType* fromJson(Framework::JSON::JSONObject* zJson) const override;
  78. Framework::JSON::JSONObject* toJson(FluidBlockType* zObject) const override;
  79. Framework::JSON::Validator::JSONValidator* getValidator(
  80. Framework::JSON::Validator::ObjectValidationBuilder<
  81. Framework::JSON::Validator::JSONValidator>* builder) const override;
  82. Framework::Text getTypeToken() const override;
  83. };