#pragma once #include "Block.h" #include "TickQueue.h" class FluidBlockType; class FluidContainerItem; class FluidBlock : public Block { private: char flowOptions; char distanceToSource; int nextFlow; Framework::Vec3 lightWeights; bool neighborChanged; unsigned 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 bool isInteractable(const Item* zItem) const 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; unsigned char flowDistance; float hungerRecoveryPerL; float thirstRecoveryPerL; float heat; public: FluidBlockType(ModelInfo* model, Framework::Text name, int mapColor, Framework::Vec3 lightWeights, int ticktsToFlow, unsigned char flowDistance, float hungerRecoveryPerL, float thirstRecoveryPerL, float heat, Framework::RCArray groupNames); 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: bool isFluid() const override; int getTicktsToFlow() const; unsigned char getFlowDistance() const override; Framework::Vec3 getLightWeights() const; float getHungerRecoveryPerL() const; float getThirstRecoveryPerL() const; virtual ItemType* createItemType() const override; float getHeat() const; }; class FluidBlockTypeFactory : public SubTypeFactory { public: FluidBlockTypeFactory(); FluidBlockType* fromJson(Framework::JSON::JSONObject* zJson) const override; Framework::JSON::JSONObject* toJson(FluidBlockType* zObject) const override; Framework::JSON::Validator::JSONValidator* getValidator( Framework::JSON::Validator::ObjectValidationBuilder< Framework::JSON::Validator::JSONValidator>* builder) const override; Framework::Text getTypeToken() const override; };