Revamped the weather system.
git-svn-id: http://mc-server.googlecode.com/svn/trunk@599 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
223967b80d
commit
900c26dc30
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 06/12/12 23:23:39.
|
||||
** Generated automatically by tolua++-1.0.92 on Wed Jun 13 02:33:14 2012.
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
@ -11296,6 +11296,37 @@ static int tolua_AllToLua_cWorld_SetWeather00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: ChangeWeather of class cWorld */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_ChangeWeather00
|
||||
static int tolua_AllToLua_cWorld_ChangeWeather00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"cWorld",0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,2,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'ChangeWeather'", NULL);
|
||||
#endif
|
||||
{
|
||||
self->ChangeWeather();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'ChangeWeather'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: GetWeather of class cWorld */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_GetWeather00
|
||||
static int tolua_AllToLua_cWorld_GetWeather00(lua_State* tolua_S)
|
||||
@ -19801,6 +19832,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"GetStorageSaveQueueLength",tolua_AllToLua_cWorld_GetStorageSaveQueueLength00);
|
||||
tolua_function(tolua_S,"CastThunderbolt",tolua_AllToLua_cWorld_CastThunderbolt00);
|
||||
tolua_function(tolua_S,"SetWeather",tolua_AllToLua_cWorld_SetWeather00);
|
||||
tolua_function(tolua_S,"ChangeWeather",tolua_AllToLua_cWorld_ChangeWeather00);
|
||||
tolua_function(tolua_S,"GetWeather",tolua_AllToLua_cWorld_GetWeather00);
|
||||
tolua_function(tolua_S,"SetNextBlockTick",tolua_AllToLua_cWorld_SetNextBlockTick00);
|
||||
tolua_function(tolua_S,"GetMaxSugarcaneHeight",tolua_AllToLua_cWorld_GetMaxSugarcaneHeight00);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 06/12/12 23:23:39.
|
||||
** Generated automatically by tolua++-1.0.92 on Wed Jun 13 02:33:15 2012.
|
||||
*/
|
||||
|
||||
/* Exported function */
|
||||
|
@ -356,7 +356,7 @@ void cWorld::CastThunderbolt ( int a_X, int a_Y, int a_Z )
|
||||
ThunderboltPacket.m_xLBPos = a_X;
|
||||
ThunderboltPacket.m_yLBPos = a_Y;
|
||||
ThunderboltPacket.m_zLBPos = a_Z;
|
||||
Broadcast( ThunderboltPacket ); // FIXME: Broadcast to chunk instead of entire world
|
||||
BroadcastToChunkOfBlock(a_X, a_Y, a_Z, &ThunderboltPacket);
|
||||
}
|
||||
|
||||
|
||||
@ -619,42 +619,83 @@ void cWorld::Tick(float a_Dt)
|
||||
|
||||
|
||||
|
||||
void cWorld::TickWeather(float a_Dt)
|
||||
void cWorld::ChangeWeather()
|
||||
{
|
||||
if ( GetWeather() == 0 ) // if sunny
|
||||
unsigned randWeather = (m_TickRand.randInt() % 99);
|
||||
|
||||
if (GetWeather() == eWeather_Sunny)
|
||||
{
|
||||
if( CurrentTick % 19 == 0 ) //every 20 ticks random weather
|
||||
if (randWeather < 20)
|
||||
{
|
||||
unsigned randWeather = (m_TickRand.randInt() % 10000);
|
||||
if (randWeather == 0)
|
||||
{
|
||||
LOG("Starting Rainstorm!");
|
||||
SetWeather ( eWeather_Rain );
|
||||
}
|
||||
else if (randWeather == 1)
|
||||
{
|
||||
LOG("Starting Thunderstorm!");
|
||||
SetWeather ( eWeather_ThunderStorm );
|
||||
}
|
||||
LOG("Starting rainstorm!");
|
||||
SetWeather( eWeather_Rain );
|
||||
}
|
||||
}
|
||||
|
||||
if ( GetWeather() != 0 ) // if raining or thunderstorm
|
||||
else if (GetWeather() == eWeather_Rain)
|
||||
{
|
||||
if ( CurrentTick % 19 == 0 ) // every 20 ticks random weather
|
||||
if (randWeather < 5)
|
||||
{
|
||||
unsigned randWeather = (m_TickRand.randInt() % 4999);
|
||||
if (randWeather == 0) //2% chance per second
|
||||
{
|
||||
LOG("Back to sunny!");
|
||||
SetWeather ( eWeather_Sunny );
|
||||
LOG("Thunderstorm!");
|
||||
SetWeather( eWeather_ThunderStorm );
|
||||
}
|
||||
else if ( (randWeather > 4000) && (GetWeather() != 2) ) // random chance for rainstorm to turn into thunderstorm.
|
||||
|
||||
else if (randWeather < 60)
|
||||
{
|
||||
LOG("Starting Thunderstorm!");
|
||||
SetWeather ( eWeather_ThunderStorm );
|
||||
LOG("Back to sunshine");
|
||||
SetWeather( eWeather_Sunny );
|
||||
}
|
||||
}
|
||||
|
||||
else if (GetWeather() == eWeather_ThunderStorm)
|
||||
{
|
||||
if (randWeather < 70)
|
||||
{
|
||||
SetWeather(eWeather_Sunny);
|
||||
LOG("Thunder ended abruptly, returning to lovely sunshine");
|
||||
}
|
||||
else if (randWeather < 85)
|
||||
{
|
||||
SetWeather(eWeather_Rain);
|
||||
LOG("Thunder ended, but rain persists.");
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cWorld::TickWeather(float a_Dt)
|
||||
{
|
||||
if(m_WeatherInterval == 0)
|
||||
{
|
||||
ChangeWeather();
|
||||
|
||||
switch(GetWeather())
|
||||
{
|
||||
case eWeather_Sunny:
|
||||
m_WeatherInterval = 14400 + (m_TickRand.randInt() % 4800); // 12 - 16 minutes
|
||||
break;
|
||||
case eWeather_Rain:
|
||||
m_WeatherInterval = 9600 + (m_TickRand.randInt() % 7200); // 8 - 14 minutes
|
||||
break;
|
||||
case eWeather_ThunderStorm:
|
||||
m_WeatherInterval = 2400 + (m_TickRand.randInt() % 4800); // 2 - 6 minutes
|
||||
break;
|
||||
default:
|
||||
LOG("Unknown weather occurred");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
m_WeatherInterval--;
|
||||
}
|
||||
|
||||
if ( GetWeather() == 2 ) // if thunderstorm
|
||||
|
@ -302,6 +302,7 @@ public:
|
||||
|
||||
void CastThunderbolt (int a_X, int a_Y, int a_Z); //tolua_export
|
||||
void SetWeather ( eWeather a_Weather ); //tolua_export
|
||||
void ChangeWeather(); //tolua_export
|
||||
eWeather GetWeather() { return m_Weather; }; //tolua_export
|
||||
|
||||
cChunkGenerator & GetGenerator(void) { return m_Generator; }
|
||||
@ -363,6 +364,7 @@ private:
|
||||
float m_SpawnMonsterRate;
|
||||
|
||||
eWeather m_Weather;
|
||||
int m_WeatherInterval;
|
||||
|
||||
int m_MaxCactusHeight;
|
||||
int m_MaxSugarcaneHeight;
|
||||
|
Loading…
Reference in New Issue
Block a user