FluidBlock.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. 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. char flowDistance;
  40. std::function<bool(FluidContainerItem*, Entity*)> foodEffect;
  41. protected:
  42. virtual void loadSuperBlock(Block* zBlock,
  43. Framework::StreamReader* zReader,
  44. int dimensionId) const override;
  45. virtual void saveSuperBlock(
  46. Block* zBlock, Framework::StreamWriter* zWriter) const override;
  47. virtual Item* createItem() const override;
  48. virtual Block* createBlock(
  49. Framework::Vec3<int> position, int dimesionId) const override;
  50. public:
  51. FluidBlockType(int id,
  52. ModelInfo model,
  53. const char* name,
  54. int mapColor,
  55. Framework::Vec3<float> lightWeights,
  56. int ticktsToFlow,
  57. char flowDistance);
  58. bool isFluid() const override;
  59. int getTicktsToFlow() const;
  60. char getFlowDistance() const override;
  61. std::function<bool(FluidContainerItem*, Entity*)> getFoodEffect() const;
  62. FluidBlockType* setFoodEffect(
  63. std::function<bool(FluidContainerItem*, Entity*)> foodEffect);
  64. };