Added support for SetNextBlockTick() function callable from Lua
git-svn-id: http://mc-server.googlecode.com/svn/trunk@527 0a769ca7-a7f5-676a-18bf-c427514a06d6
This commit is contained in:
parent
3d031490be
commit
7af3df03a0
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 05/30/12 20:19:21.
|
||||
** Generated automatically by tolua++-1.0.92 on 05/30/12 23:28:27.
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
@ -11072,6 +11072,43 @@ static int tolua_AllToLua_cWorld_GetWeather00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: SetNextBlockTick of class cWorld */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cWorld_SetNextBlockTick00
|
||||
static int tolua_AllToLua_cWorld_SetNextBlockTick00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertype(tolua_S,1,"cWorld",0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,2,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,5,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
cWorld* self = (cWorld*) tolua_tousertype(tolua_S,1,0);
|
||||
int a_BlockX = ((int) tolua_tonumber(tolua_S,2,0));
|
||||
int a_BlockY = ((int) tolua_tonumber(tolua_S,3,0));
|
||||
int a_BlockZ = ((int) tolua_tonumber(tolua_S,4,0));
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'SetNextBlockTick'", NULL);
|
||||
#endif
|
||||
{
|
||||
self->SetNextBlockTick(a_BlockX,a_BlockY,a_BlockZ);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'SetNextBlockTick'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: Clear of class cInventory */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cInventory_Clear00
|
||||
static int tolua_AllToLua_cInventory_Clear00(lua_State* tolua_S)
|
||||
@ -18387,6 +18424,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"CastThunderbolt",tolua_AllToLua_cWorld_CastThunderbolt00);
|
||||
tolua_function(tolua_S,"SetWeather",tolua_AllToLua_cWorld_SetWeather00);
|
||||
tolua_function(tolua_S,"GetWeather",tolua_AllToLua_cWorld_GetWeather00);
|
||||
tolua_function(tolua_S,"SetNextBlockTick",tolua_AllToLua_cWorld_SetNextBlockTick00);
|
||||
tolua_endmodule(tolua_S);
|
||||
tolua_cclass(tolua_S,"cInventory","cInventory","",NULL);
|
||||
tolua_beginmodule(tolua_S,"cInventory");
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 05/30/12 20:19:22.
|
||||
** Generated automatically by tolua++-1.0.92 on 05/30/12 23:28:28.
|
||||
*/
|
||||
|
||||
/* Exported function */
|
||||
|
@ -519,16 +519,6 @@ void cChunk::Tick(float a_Dt, MTRand & a_TickRandom)
|
||||
void cChunk::TickBlocks(MTRand & a_TickRandom)
|
||||
{
|
||||
// Tick dem blocks
|
||||
/*
|
||||
// DEBUG:
|
||||
int RandomX = 0;
|
||||
int RandomY = 1;
|
||||
int RandomZ = 0;
|
||||
m_BlockTickX = 0;
|
||||
m_BlockTickY = 40;
|
||||
m_BlockTickZ = 0;
|
||||
*/
|
||||
|
||||
int RandomX = a_TickRandom.randInt();
|
||||
int RandomY = a_TickRandom.randInt();
|
||||
int RandomZ = a_TickRandom.randInt();
|
||||
@ -536,17 +526,21 @@ void cChunk::TickBlocks(MTRand & a_TickRandom)
|
||||
int TickY = m_BlockTickY;
|
||||
int TickZ = m_BlockTickZ;
|
||||
|
||||
for (int i = 0; i < 50; i++)
|
||||
{
|
||||
// This for loop looks disgusting, but it actually does a simple thing - first processes m_BlockTick, then adds random to it
|
||||
// This is so that SetNextBlockTick() works
|
||||
for (int i = 0; i < 50; i++,
|
||||
|
||||
// This weird construct (*2, then /2) is needed,
|
||||
// otherwise the blocktick distribution is too biased towards even coords!
|
||||
|
||||
TickX = (TickX + RandomX) % (Width * 2);
|
||||
TickY = (TickY + RandomY) % (Height * 2);
|
||||
TickZ = (TickZ + RandomZ) % (Width * 2);
|
||||
m_BlockTickX = TickX / 2;
|
||||
m_BlockTickY = TickY / 2;
|
||||
m_BlockTickZ = TickZ / 2;
|
||||
TickX = (TickX + RandomX) % (Width * 2),
|
||||
TickY = (TickY + RandomY) % (Height * 2),
|
||||
TickZ = (TickZ + RandomZ) % (Width * 2),
|
||||
m_BlockTickX = TickX / 2,
|
||||
m_BlockTickY = TickY / 2,
|
||||
m_BlockTickZ = TickZ / 2
|
||||
)
|
||||
{
|
||||
|
||||
if (m_BlockTickY > cChunkDef::GetHeight(m_HeightMap, m_BlockTickX, m_BlockTickZ))
|
||||
{
|
||||
|
@ -161,6 +161,14 @@ public:
|
||||
m_IsSaving = false;
|
||||
}
|
||||
|
||||
/// Sets the blockticking to start at the specified block. Only one blocktick may be set, second call overwrites the first call
|
||||
inline void SetNextBlockTick(int a_RelX, int a_RelY, int a_RelZ)
|
||||
{
|
||||
m_BlockTickX = a_RelX;
|
||||
m_BlockTickY = a_RelY;
|
||||
m_BlockTickZ = a_RelZ;
|
||||
}
|
||||
|
||||
inline NIBBLETYPE GetMeta(int a_RelX, int a_RelY, int a_RelZ) {return cChunkDef::GetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ); }
|
||||
inline NIBBLETYPE GetMeta(int a_BlockIdx) {return cChunkDef::GetNibble(m_BlockMeta, a_BlockIdx); }
|
||||
inline void SetMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE a_Meta) { cChunkDef::SetNibble(m_BlockMeta, a_RelX, a_RelY, a_RelZ, a_Meta); }
|
||||
|
@ -1083,6 +1083,23 @@ void cChunkMap::GetChunkStats(int & a_NumChunksValid, int & a_NumChunksDirty)
|
||||
|
||||
|
||||
|
||||
void cChunkMap::SetNextBlockTick(int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||
{
|
||||
int ChunkX, ChunkZ;
|
||||
cChunkDef::AbsoluteToRelative(a_BlockX, a_BlockY, a_BlockZ, ChunkX, ChunkZ);
|
||||
|
||||
cCSLock Lock(m_CSLayers);
|
||||
cChunkPtr Chunk = GetChunkNoLoad(ChunkX, ZERO_CHUNK_Y, ChunkZ);
|
||||
if (Chunk != NULL)
|
||||
{
|
||||
Chunk->SetNextBlockTick(a_BlockX, a_BlockY, a_BlockZ);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cChunkMap::Tick( float a_Dt, MTRand & a_TickRandom )
|
||||
{
|
||||
cCSLock Lock(m_CSLayers);
|
||||
|
@ -149,6 +149,9 @@ public:
|
||||
|
||||
/// Returns the number of valid chunks and the number of dirty chunks
|
||||
void GetChunkStats(int & a_NumChunksValid, int & a_NumChunksDirty);
|
||||
|
||||
/// Sets the blockticking to start at the specified block. Only one blocktick per chunk may be set, second call overwrites the first call
|
||||
void SetNextBlockTick(int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||
|
||||
void Tick( float a_Dt, MTRand & a_TickRand );
|
||||
|
||||
|
@ -435,6 +435,15 @@ bool cWorld::IsPlacingItemLegal(Int16 a_ItemType, int a_BlockX, int a_BlockY, in
|
||||
|
||||
|
||||
|
||||
void cWorld::SetNextBlockTick(int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||
{
|
||||
return m_ChunkMap->SetNextBlockTick(a_BlockX, a_BlockY, a_BlockZ);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cWorld::InitializeSpawn(void)
|
||||
{
|
||||
int ChunkX = 0, ChunkY = 0, ChunkZ = 0;
|
||||
|
@ -295,6 +295,9 @@ public:
|
||||
|
||||
bool IsPlacingItemLegal(Int16 a_ItemType, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||
|
||||
/// Sets the blockticking to start at the specified block. Only one blocktick per chunk may be set, second call overwrites the first call
|
||||
void SetNextBlockTick(int a_BlockX, int a_BlockY, int a_BlockZ); // tolua_export
|
||||
|
||||
private:
|
||||
|
||||
friend class cRoot;
|
||||
|
Loading…
Reference in New Issue
Block a user