- water slacks fire now
- Bug which caused lava to disappear is fixed git-svn-id: http://mc-server.googlecode.com/svn/trunk@152 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
c5fab7e7c8
commit
f5466a4cb3
|
@ -30,13 +30,15 @@ void cFireSimulator::Simulate( float a_Dt )
|
||||||
{
|
{
|
||||||
Vector3i *Pos = *itr;
|
Vector3i *Pos = *itr;
|
||||||
|
|
||||||
if(!IsAllowedBlock(m_World->GetBlock(Pos->x, Pos->y, Pos->z))) //Check wheather the block is still burning
|
char BlockID = m_World->GetBlock(Pos->x, Pos->y, Pos->z);
|
||||||
|
|
||||||
|
if(!IsAllowedBlock(BlockID)) //Check wheather the block is still burning
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if(BurnBlockAround(Pos->x, Pos->y, Pos->z)) //Burn single block and if there was one -> next time again
|
if(BurnBlockAround(Pos->x, Pos->y, Pos->z)) //Burn single block and if there was one -> next time again
|
||||||
_AddBlock(Pos->x, Pos->y, Pos->z);
|
_AddBlock(Pos->x, Pos->y, Pos->z);
|
||||||
else
|
else
|
||||||
if(!IsForeverBurnable(m_World->GetBlock(Pos->x, Pos->y - 1, Pos->z)))
|
if(!IsForeverBurnable(m_World->GetBlock(Pos->x, Pos->y - 1, Pos->z)) && !FiresForever(BlockID))
|
||||||
m_World->SetBlock(Pos->x, Pos->y, Pos->z, E_BLOCK_AIR, 0);
|
m_World->SetBlock(Pos->x, Pos->y, Pos->z, E_BLOCK_AIR, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -91,6 +93,11 @@ bool cFireSimulator::IsBurnable( char a_BlockID )
|
||||||
|| a_BlockID == E_BLOCK_TNT;
|
|| a_BlockID == E_BLOCK_TNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cFireSimulator::FiresForever( char a_BlockID )
|
||||||
|
{
|
||||||
|
return a_BlockID != E_BLOCK_FIRE;
|
||||||
|
}
|
||||||
|
|
||||||
bool cFireSimulator::BurnBlockAround(int a_X, int a_Y, int a_Z)
|
bool cFireSimulator::BurnBlockAround(int a_X, int a_Y, int a_Z)
|
||||||
{
|
{
|
||||||
return BurnBlock(a_X + 1, a_Y, a_Z)
|
return BurnBlock(a_X + 1, a_Y, a_Z)
|
||||||
|
|
|
@ -14,9 +14,10 @@ public:
|
||||||
virtual void Simulate( float a_Dt );
|
virtual void Simulate( float a_Dt );
|
||||||
|
|
||||||
virtual inline bool IsAllowedBlock( char a_BlockID );
|
virtual inline bool IsAllowedBlock( char a_BlockID );
|
||||||
virtual inline bool IsBurnable( char a_BlockID );
|
|
||||||
|
|
||||||
|
virtual inline bool IsBurnable( char a_BlockID );
|
||||||
virtual inline bool IsForeverBurnable( char a_BlockID );
|
virtual inline bool IsForeverBurnable( char a_BlockID );
|
||||||
|
virtual inline bool FiresForever( char a_BlockID );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void AddBlock(int a_X, int a_Y, int a_Z);
|
virtual void AddBlock(int a_X, int a_Y, int a_Z);
|
||||||
|
|
|
@ -218,6 +218,14 @@ void cFluidSimulator::Simulate( float a_Dt )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool cFluidSimulator::IsPassableForFluid(char a_BlockID)
|
||||||
|
{
|
||||||
|
return a_BlockID == E_BLOCK_AIR
|
||||||
|
|| a_BlockID == E_BLOCK_FIRE
|
||||||
|
|| IsAllowedBlock(a_BlockID);
|
||||||
|
}
|
||||||
|
|
||||||
//TODO Not working very well yet :s
|
//TODO Not working very well yet :s
|
||||||
Direction cFluidSimulator::GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a_Over)
|
Direction cFluidSimulator::GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a_Over)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,7 +29,7 @@ public:
|
||||||
Direction GetFlowingDirection(int a_X, int a_Y, int a_Z, bool a_Over = true);
|
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 IsAllowedBlock( char a_BlockID ) = 0;
|
||||||
virtual inline bool IsPassableForFluid( char a_BlockID ) = 0;
|
virtual inline bool IsPassableForFluid( char a_BlockID );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void AddBlock( int a_X, int a_Y, int a_Z);
|
virtual void AddBlock( int a_X, int a_Y, int a_Z);
|
||||||
|
|
|
@ -14,10 +14,4 @@ cLavaSimulator::cLavaSimulator(cWorld *a_World)
|
||||||
bool cLavaSimulator::IsAllowedBlock(char a_BlockID)
|
bool cLavaSimulator::IsAllowedBlock(char a_BlockID)
|
||||||
{
|
{
|
||||||
return IsBlockLava(a_BlockID);
|
return IsBlockLava(a_BlockID);
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool cLavaSimulator::IsPassableForFluid(char a_BlockID)
|
|
||||||
{
|
|
||||||
return ( a_BlockID == E_BLOCK_AIR || IsAllowedBlock(a_BlockID) );
|
|
||||||
}
|
}
|
|
@ -7,6 +7,5 @@ public:
|
||||||
cLavaSimulator( cWorld* a_World );
|
cLavaSimulator( cWorld* a_World );
|
||||||
|
|
||||||
virtual inline bool IsAllowedBlock( char a_BlockID );
|
virtual inline bool IsAllowedBlock( char a_BlockID );
|
||||||
virtual inline bool IsPassableForFluid( char a_BlockID );
|
|
||||||
|
|
||||||
};
|
};
|
|
@ -16,8 +16,3 @@ bool cWaterSimulator::IsAllowedBlock(char a_BlockID)
|
||||||
return IsBlockWater(a_BlockID);
|
return IsBlockWater(a_BlockID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool cWaterSimulator::IsPassableForFluid(char a_BlockID)
|
|
||||||
{
|
|
||||||
return ( a_BlockID == E_BLOCK_AIR || IsAllowedBlock(a_BlockID) );
|
|
||||||
}
|
|
|
@ -7,6 +7,5 @@ public:
|
||||||
cWaterSimulator( cWorld* a_World );
|
cWaterSimulator( cWorld* a_World );
|
||||||
|
|
||||||
virtual inline bool IsAllowedBlock( char a_BlockID );
|
virtual inline bool IsAllowedBlock( char a_BlockID );
|
||||||
virtual inline bool IsPassableForFluid( char a_BlockID );
|
|
||||||
|
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user