From d6953a7ea2b20574ade4e0590ce030966c163394 Mon Sep 17 00:00:00 2001 From: "lapayo94@gmail.com" Date: Sun, 25 Dec 2011 16:20:06 +0000 Subject: Refactored both simulators (water and lava) to make them more flexible and easier to modify git-svn-id: http://mc-server.googlecode.com/svn/trunk@108 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cFluidSimulator.h | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 source/cFluidSimulator.h (limited to 'source/cFluidSimulator.h') diff --git a/source/cFluidSimulator.h b/source/cFluidSimulator.h new file mode 100644 index 000000000..758bfc022 --- /dev/null +++ b/source/cFluidSimulator.h @@ -0,0 +1,49 @@ +#pragma once + + +//TODO This definitly needs a better naming :D but how? +enum Direction +{ + X_PLUS, + X_MINUS, + Y_PLUS, + Y_MINUS, + Z_PLUS, + Z_MINUS, + NONE +}; + +class Vector3i; +class cWorld; +class cFluidSimulator +{ +public: + cFluidSimulator( cWorld* a_World ); + ~cFluidSimulator(); + + virtual void Simulate( float a_Dt ); + void WakeUp( int a_X, int a_Y, int a_Z ); + + //Gets the flowing direction. if a_Over is true also the block over the current block affects the direction (standard) + Direction GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a_Over = true); + + virtual inline bool IsAllowedBlock( char a_BlockID ) = 0; + virtual inline bool IsPassableForFluid( char a_BlockID ) = 0; + +protected: + void AddBlock( int a_X, int a_Y, int a_Z); + char GetHighestLevelAround( int a_X, int a_Y, int a_Z ); + + + float m_Timer; + cWorld* m_World; + + class FluidData; + FluidData* m_Data; + + //Customize + char m_FluidBlock; + char m_MaxHeight; + char m_FlowReduction; + +}; \ No newline at end of file -- cgit v1.2.3