FluidBlock.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #pragma once
  2. #include "Block.h"
  3. #include "TickQueue.h"
  4. class FluidBlockType;
  5. class FluidBlock : public Block
  6. {
  7. private:
  8. char flowOptions;
  9. char distanceToSource;
  10. int nextFlow;
  11. Framework::Vec3<float> lightWeights;
  12. bool neighborChanged;
  13. char maxFlowDistance;
  14. protected:
  15. virtual bool onTick(
  16. TickQueue* zQueue, int numTicks, bool& blocked) override;
  17. virtual void onPostTick() override;
  18. void doFlow();
  19. public:
  20. FluidBlock(int typeId,
  21. Framework::Vec3<int> pos,
  22. int dimensionId,
  23. Framework::Vec3<float> lightWeights);
  24. virtual ~FluidBlock();
  25. virtual void setNeighbourType(Direction dir, int type) override;
  26. virtual void sendModelInfo(NetworkMessage* zMessage) override;
  27. virtual void filterPassingLight(unsigned char rgb[3]) const override;
  28. char getDistanceToSource() const;
  29. char getFlowOptions() const;
  30. friend FluidBlockType;
  31. };
  32. class FluidBlockType : public BlockType
  33. {
  34. private:
  35. Framework::Vec3<float> lightWeights;
  36. int ticktsToFlow;
  37. char flowDistance;
  38. protected:
  39. virtual void loadSuperBlock(Block* zBlock,
  40. Framework::StreamReader* zReader,
  41. int dimensionId) const override;
  42. virtual void saveSuperBlock(
  43. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  44. virtual Item* createItem() const override;
  45. virtual Block* createBlock(
  46. Framework::Vec3<int> position, int dimesionId) const override;
  47. public:
  48. FluidBlockType(int id,
  49. ModelInfo model,
  50. const char* name,
  51. int mapColor,
  52. Framework::Vec3<float> lightWeights,
  53. int ticktsToFlow,
  54. char flowDistance);
  55. bool isFluid() const override;
  56. int getTicktsToFlow() const;
  57. char getFlowDistance() const override;
  58. };