#pragma once #include "Block.h" #include "TickQueue.h" class FluidBlockType; class FluidBlock : public Block { private: char flowOptions; char distanceToSource; int nextFlow; Framework::Vec3 lightWeights; bool neighborChanged; char maxFlowDistance; protected: virtual bool onTick( TickQueue* zQueue, int numTicks, bool& blocked) override; virtual void onPostTick() override; void doFlow(); public: FluidBlock(int typeId, Framework::Vec3 pos, int dimensionId, Framework::Vec3 lightWeights); virtual ~FluidBlock(); virtual void setNeighbourType(Direction dir, int type) override; virtual void sendModelInfo(NetworkMessage* zMessage) override; virtual void filterPassingLight(unsigned char rgb[3]) const override; char getDistanceToSource() const; char getFlowOptions() const; friend FluidBlockType; }; class FluidBlockType : public BlockType { private: Framework::Vec3 lightWeights; int ticktsToFlow; char flowDistance; protected: virtual void loadSuperBlock(Block* zBlock, Framework::StreamReader* zReader, int dimensionId) const override; virtual void saveSuperBlock( Block* zBlock, Framework::StreamWriter* zWriter) const override; virtual Item* createItem() const override; virtual Block* createBlock( Framework::Vec3 position, int dimesionId) const override; public: FluidBlockType(int id, ModelInfo model, const char* name, int mapColor, Framework::Vec3 lightWeights, int ticktsToFlow, char flowDistance); bool isFluid() const override; int getTicktsToFlow() const; char getFlowDistance() const override; };