1
0
Fork 0

Cauldrons check the heightmap

This commit is contained in:
Tiger Wang 2014-06-14 10:14:04 +01:00
parent 7188a1f670
commit a70b8298b6
3 changed files with 12 additions and 8 deletions

View File

@ -61,8 +61,12 @@ public:
virtual void OnUpdate(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override
{
if (IsBiomeNoDownfall(a_Chunk.GetBiomeAt(a_RelX, a_RelZ)) || !a_WorldInterface.IsWeatherWet())
int BlockX = a_RelX + a_Chunk.GetPosX() * cChunkDef::Width;
int BlockZ = a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width;
if (!a_WorldInterface.IsWeatherWetAt(BlockX, BlockZ) || (a_RelY != a_WorldInterface.GetHeight(BlockX, BlockZ)))
{
// It's not raining at our current location or we do not have a direct view of the sky
// We cannot eat the rain :(
return;
}

View File

@ -37,9 +37,9 @@ public:
virtual void SetTimeOfDay(Int64 a_TimeOfDay) = 0;
/** Returns true if the current weather has any precipitation - rain or storm
Does not check if biome has no downfall, use cChunk::GetBiomeAt(RelX, RelZ) for that
*/
virtual bool IsWeatherWet(void) const = 0;
/** Returns true if it is raining, stormy or snowing at the specified location. This takes into account biomes. */
virtual bool IsWeatherWetAt(int a_BlockX, int a_BlockZ) = 0;
/** Returns the world height at the specified coords; waits for the chunk to get loaded / generated */
virtual int GetHeight(int a_BlockX, int a_BlockZ) = 0;
};

View File

@ -180,7 +180,7 @@ public:
virtual eDimension GetDimension(void) const { return m_Dimension; }
/** Returns the world height at the specified coords; waits for the chunk to get loaded / generated */
int GetHeight(int a_BlockX, int a_BlockZ);
virtual int GetHeight(int a_BlockX, int a_BlockZ);
// tolua_end
@ -749,10 +749,10 @@ public:
}
/** Returns true if the current weather has any precipitation - rain, storm or snow */
virtual bool IsWeatherWet(void) const { return !IsWeatherSunny(); }
bool IsWeatherWet(void) const { return !IsWeatherSunny(); }
/** Returns true if it is raining, stormy or snowing at the specified location. This takes into account biomes. */
bool IsWeatherWetAt(int a_BlockX, int a_BlockZ)
virtual bool IsWeatherWetAt(int a_BlockX, int a_BlockZ)
{
return (IsWeatherWet() && !IsBiomeNoDownfall(GetBiomeAt(a_BlockX, a_BlockZ)));
}