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
|
** 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
|
#ifndef __cplusplus
|
||||||
@ -13,8 +13,8 @@
|
|||||||
/* Exported function */
|
/* Exported function */
|
||||||
TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
|
TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
|
||||||
|
|
||||||
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
|
#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
|
||||||
#include "tolua_base.h"
|
#include "tolua_base.h"
|
||||||
#include "cTorch.h"
|
#include "cTorch.h"
|
||||||
#include "cStairs.h"
|
#include "cStairs.h"
|
||||||
#include "cStep.h"
|
#include "cStep.h"
|
||||||
@ -11296,6 +11296,37 @@ static int tolua_AllToLua_cWorld_SetWeather00(lua_State* tolua_S)
|
|||||||
}
|
}
|
||||||
#endif //#ifndef TOLUA_DISABLE
|
#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 */
|
/* method: GetWeather of class cWorld */
|
||||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_GetWeather00
|
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_GetWeather00
|
||||||
static int tolua_AllToLua_cWorld_GetWeather00(lua_State* tolua_S)
|
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,"GetStorageSaveQueueLength",tolua_AllToLua_cWorld_GetStorageSaveQueueLength00);
|
||||||
tolua_function(tolua_S,"CastThunderbolt",tolua_AllToLua_cWorld_CastThunderbolt00);
|
tolua_function(tolua_S,"CastThunderbolt",tolua_AllToLua_cWorld_CastThunderbolt00);
|
||||||
tolua_function(tolua_S,"SetWeather",tolua_AllToLua_cWorld_SetWeather00);
|
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,"GetWeather",tolua_AllToLua_cWorld_GetWeather00);
|
||||||
tolua_function(tolua_S,"SetNextBlockTick",tolua_AllToLua_cWorld_SetNextBlockTick00);
|
tolua_function(tolua_S,"SetNextBlockTick",tolua_AllToLua_cWorld_SetNextBlockTick00);
|
||||||
tolua_function(tolua_S,"GetMaxSugarcaneHeight",tolua_AllToLua_cWorld_GetMaxSugarcaneHeight00);
|
tolua_function(tolua_S,"GetMaxSugarcaneHeight",tolua_AllToLua_cWorld_GetMaxSugarcaneHeight00);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
** Lua binding: AllToLua
|
** 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 */
|
/* 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_xLBPos = a_X;
|
||||||
ThunderboltPacket.m_yLBPos = a_Y;
|
ThunderboltPacket.m_yLBPos = a_Y;
|
||||||
ThunderboltPacket.m_zLBPos = a_Z;
|
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);
|
LOG("Starting rainstorm!");
|
||||||
if (randWeather == 0)
|
SetWeather( eWeather_Rain );
|
||||||
{
|
|
||||||
LOG("Starting Rainstorm!");
|
|
||||||
SetWeather ( eWeather_Rain );
|
|
||||||
}
|
|
||||||
else if (randWeather == 1)
|
|
||||||
{
|
|
||||||
LOG("Starting Thunderstorm!");
|
|
||||||
SetWeather ( eWeather_ThunderStorm );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
LOG("Thunderstorm!");
|
||||||
if (randWeather == 0) //2% chance per second
|
SetWeather( eWeather_ThunderStorm );
|
||||||
{
|
|
||||||
LOG("Back to sunny!");
|
|
||||||
SetWeather ( eWeather_Sunny );
|
|
||||||
}
|
|
||||||
else if ( (randWeather > 4000) && (GetWeather() != 2) ) // random chance for rainstorm to turn into thunderstorm.
|
|
||||||
{
|
|
||||||
LOG("Starting Thunderstorm!");
|
|
||||||
SetWeather ( eWeather_ThunderStorm );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (randWeather < 60)
|
||||||
|
{
|
||||||
|
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
|
if ( GetWeather() == 2 ) // if thunderstorm
|
||||||
|
@ -302,6 +302,7 @@ public:
|
|||||||
|
|
||||||
void CastThunderbolt (int a_X, int a_Y, int a_Z); //tolua_export
|
void CastThunderbolt (int a_X, int a_Y, int a_Z); //tolua_export
|
||||||
void SetWeather ( eWeather a_Weather ); //tolua_export
|
void SetWeather ( eWeather a_Weather ); //tolua_export
|
||||||
|
void ChangeWeather(); //tolua_export
|
||||||
eWeather GetWeather() { return m_Weather; }; //tolua_export
|
eWeather GetWeather() { return m_Weather; }; //tolua_export
|
||||||
|
|
||||||
cChunkGenerator & GetGenerator(void) { return m_Generator; }
|
cChunkGenerator & GetGenerator(void) { return m_Generator; }
|
||||||
@ -363,6 +364,7 @@ private:
|
|||||||
float m_SpawnMonsterRate;
|
float m_SpawnMonsterRate;
|
||||||
|
|
||||||
eWeather m_Weather;
|
eWeather m_Weather;
|
||||||
|
int m_WeatherInterval;
|
||||||
|
|
||||||
int m_MaxCactusHeight;
|
int m_MaxCactusHeight;
|
||||||
int m_MaxSugarcaneHeight;
|
int m_MaxSugarcaneHeight;
|
||||||
|
Loading…
Reference in New Issue
Block a user