#pragma once #include "Block.h" #include "TickQueue.h" class FluidBlockType; class FluidBlock : public Block { private: Directions flowDir; short fluidAmount; short lastBroadcastedAmount; int nextFlow; Framework::Vec3 lightWeights; protected: virtual bool onTick( TickQueue* zQueue, int numTicks, bool& blocked) override; virtual void onPostTick() override; void broadcastAmount(); public: FluidBlock(int typeId, Framework::Vec3 pos, int dimensionId, Framework::Vec3 lightWeights); virtual ~FluidBlock(); virtual void sendModelInfo(NetworkMessage* zMessage) override; static void sortByAmound(FluidBlock** array, int count); virtual void filterPassingLight(unsigned char rgb[3]) const override; short getFluidAmount() const; friend FluidBlockType; }; class FluidBlockType : public BlockType { private: Framework::Vec3 lightWeights; 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); bool isFluid() const override; };