From e2f1cf51c759f0c70bc1dc9f1db3a8575e1db10f Mon Sep 17 00:00:00 2001
From: faketruth
Date: Mon, 31 Oct 2011 00:52:20 +0000
Subject: Prepared some parts of the code for multi world support, I created
lots of TODO's
git-svn-id: http://mc-server.googlecode.com/svn/trunk@29 0a769ca7-a7f5-676a-18bf-c427514a06d6
---
VC2010/Converter.vcxproj | 4 +
VC2010/Converter.vcxproj.filters | 12 +++
source/Bindings.cpp | 228 ++++++++++++++++++++++++++++++++++-----
source/Bindings.h | 2 +-
source/cBlockEntity.h | 12 ++-
source/cCavespider.cpp | 6 +-
source/cChestEntity.cpp | 7 +-
source/cChestEntity.h | 2 +-
source/cChicken.cpp | 4 +-
source/cChunk.cpp | 65 ++++++-----
source/cChunk.h | 11 +-
source/cChunkMap.cpp | 7 +-
source/cChunkMap.h | 4 +-
source/cClientHandle.cpp | 31 +++---
source/cCow.cpp | 4 +-
source/cCraftingWindow.cpp | 2 +-
source/cCreeper.cpp | 4 +-
source/cEnderman.cpp | 6 +-
source/cEntity.cpp | 26 +++--
source/cEntity.h | 6 +-
source/cFurnaceEntity.cpp | 18 ++--
source/cFurnaceEntity.h | 3 +-
source/cGhast.cpp | 4 +-
source/cMonster.cpp | 26 ++---
source/cPawn.cpp | 4 +-
source/cPickup.cpp | 6 +-
source/cPig.cpp | 4 +-
source/cPlayer.cpp | 43 ++++----
source/cServer.cpp | 8 +-
source/cSheep.cpp | 4 +-
source/cSignEntity.cpp | 8 +-
source/cSignEntity.h | 3 +-
source/cSilverfish.cpp | 4 +-
source/cSkeleton.cpp | 6 +-
source/cSlime.cpp | 4 +-
source/cSpider.cpp | 6 +-
source/cSquid.cpp | 4 +-
source/cWebAdmin.cpp | 2 +-
source/cWolf.cpp | 4 +-
source/cWorld.cpp | 8 +-
source/cZombie.cpp | 6 +-
source/cZombiepigman.cpp | 6 +-
42 files changed, 418 insertions(+), 206 deletions(-)
diff --git a/VC2010/Converter.vcxproj b/VC2010/Converter.vcxproj
index a9a40457f..5991f7827 100644
--- a/VC2010/Converter.vcxproj
+++ b/VC2010/Converter.vcxproj
@@ -13,9 +13,13 @@
+
+
+
+
{9AB1FB82-2148-40E4-919F-3B184B4593C8}
diff --git a/VC2010/Converter.vcxproj.filters b/VC2010/Converter.vcxproj.filters
index dbe3b1c28..2ad6c6919 100644
--- a/VC2010/Converter.vcxproj.filters
+++ b/VC2010/Converter.vcxproj.filters
@@ -21,10 +21,22 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
Header Files
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/source/Bindings.cpp b/source/Bindings.cpp
index 3104dc702..690d7af7f 100644
--- a/source/Bindings.cpp
+++ b/source/Bindings.cpp
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 07/15/11 01:36:28.
+** Generated automatically by tolua++-1.0.92 on 10/31/11 01:51:08.
*/
#ifndef __cplusplus
@@ -2700,6 +2700,15 @@ static int tolua_get_cChatColor_Color(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
+/* get function: Delimiter of class cChatColor */
+#ifndef TOLUA_DISABLE_tolua_get_cChatColor_Delimiter
+static int tolua_get_cChatColor_Delimiter(lua_State* tolua_S)
+{
+ tolua_pushcppstring(tolua_S,(const char*)cChatColor::Delimiter);
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
/* get function: Black of class cChatColor */
#ifndef TOLUA_DISABLE_tolua_get_cChatColor_Black
static int tolua_get_cChatColor_Black(lua_State* tolua_S)
@@ -2976,18 +2985,20 @@ static int tolua_AllToLua_cEntity_Initialize00(lua_State* tolua_S)
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"cEntity",0,&tolua_err) ||
- !tolua_isnoobj(tolua_S,2,&tolua_err)
+ !tolua_isusertype(tolua_S,2,"cWorld",0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
cEntity* self = (cEntity*) tolua_tousertype(tolua_S,1,0);
+ cWorld* a_World = ((cWorld*) tolua_tousertype(tolua_S,2,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'Initialize'", NULL);
#endif
{
- self->Initialize();
+ self->Initialize(a_World);
}
}
return 0;
@@ -3097,6 +3108,38 @@ static int tolua_AllToLua_cEntity_GetClass00(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
+/* method: GetWorld of class cEntity */
+#ifndef TOLUA_DISABLE_tolua_AllToLua_cEntity_GetWorld00
+static int tolua_AllToLua_cEntity_GetWorld00(lua_State* tolua_S)
+{
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (
+ !tolua_isusertype(tolua_S,1,"cEntity",0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,2,&tolua_err)
+ )
+ goto tolua_lerror;
+ else
+#endif
+ {
+ cEntity* self = (cEntity*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in function 'GetWorld'", NULL);
+#endif
+ {
+ cWorld* tolua_ret = (cWorld*) self->GetWorld();
+ tolua_pushusertype(tolua_S,(void*)tolua_ret,"cWorld");
+ }
+ }
+ return 1;
+#ifndef TOLUA_RELEASE
+ tolua_lerror:
+ tolua_error(tolua_S,"#ferror in function 'GetWorld'.",&tolua_err);
+ return 0;
+#endif
+}
+#endif //#ifndef TOLUA_DISABLE
+
/* method: GetPosition of class cEntity */
#ifndef TOLUA_DISABLE_tolua_AllToLua_cEntity_GetPosition00
static int tolua_AllToLua_cEntity_GetPosition00(lua_State* tolua_S)
@@ -3860,11 +3903,12 @@ static int tolua_AllToLua_cEntity_SpawnOn00(lua_State* tolua_S)
class Lua__cEntity : public cEntity, public ToluaBase {
public:
- void Initialize( void ) {
+ void Initialize( cWorld* a_World) {
if (push_method("Initialize", tolua_AllToLua_cEntity_Initialize00)) {
- ToluaBase::dbcall(lua_state, 1, 0);
+ tolua_pushusertype(lua_state, (void*)a_World, "cWorld");
+ ToluaBase::dbcall(lua_state, 2, 0);
} else {
- return ( void ) cEntity:: Initialize();
+ return ( void ) cEntity:: Initialize(a_World);
};
};
unsigned int GetEntityType( void ) {
@@ -3927,8 +3971,8 @@ public:
};
};
- void cEntity__Initialize( void ) {
- return ( void )cEntity::Initialize();
+ void cEntity__Initialize( cWorld* a_World) {
+ return ( void )cEntity::Initialize(a_World);
};
unsigned int cEntity__GetEntityType( void ) {
return (unsigned int )cEntity::GetEntityType();
@@ -3983,18 +4027,20 @@ static int tolua_AllToLua_Lua__cEntity_cEntity__Initialize00(lua_State* tolua_S)
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"Lua__cEntity",0,&tolua_err) ||
- !tolua_isnoobj(tolua_S,2,&tolua_err)
+ !tolua_isusertype(tolua_S,2,"cWorld",0,&tolua_err) ||
+ !tolua_isnoobj(tolua_S,3,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
Lua__cEntity* self = (Lua__cEntity*) tolua_tousertype(tolua_S,1,0);
+ cWorld* a_World = ((cWorld*) tolua_tousertype(tolua_S,2,0));
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'cEntity__Initialize'", NULL);
#endif
{
- self->cEntity__Initialize();
+ self->cEntity__Initialize(a_World);
}
}
return 0;
@@ -4518,11 +4564,12 @@ public:
return ( void ) cPawn:: KilledBy(a_Killer);
};
};
- void Initialize( void ) {
+ void Initialize( cWorld* a_World) {
if (push_method("Initialize", tolua_AllToLua_cEntity_Initialize00)) {
- ToluaBase::dbcall(lua_state, 1, 0);
+ tolua_pushusertype(lua_state, (void*)a_World, "cWorld");
+ ToluaBase::dbcall(lua_state, 2, 0);
} else {
- return ( void ) cPawn:: Initialize();
+ return ( void ) cPawn:: Initialize(a_World);
};
};
unsigned int GetEntityType( void ) {
@@ -4597,8 +4644,8 @@ public:
void cPawn__KilledBy( cEntity* a_Killer) {
return ( void )cPawn::KilledBy(a_Killer);
};
- void cPawn__Initialize( void ) {
- return ( void )cPawn::Initialize();
+ void cPawn__Initialize( cWorld* a_World) {
+ return ( void )cPawn::Initialize(a_World);
};
unsigned int cPawn__GetEntityType( void ) {
return (unsigned int )cPawn::GetEntityType();
@@ -5625,11 +5672,12 @@ public:
return ( void ) cPlayer:: KilledBy(a_Killer);
};
};
- void Initialize( void ) {
+ void Initialize( cWorld* a_World) {
if (push_method("Initialize", tolua_AllToLua_cEntity_Initialize00)) {
- ToluaBase::dbcall(lua_state, 1, 0);
+ tolua_pushusertype(lua_state, (void*)a_World, "cWorld");
+ ToluaBase::dbcall(lua_state, 2, 0);
} else {
- return ( void ) cPlayer:: Initialize();
+ return ( void ) cPlayer:: Initialize(a_World);
};
};
unsigned int GetEntityType( void ) {
@@ -5707,8 +5755,8 @@ public:
void cPlayer__KilledBy( cEntity* a_Killer) {
return ( void )cPlayer::KilledBy(a_Killer);
};
- void cPlayer__Initialize( void ) {
- return ( void )cPlayer::Initialize();
+ void cPlayer__Initialize( cWorld* a_World) {
+ return ( void )cPlayer::Initialize(a_World);
};
unsigned int cPlayer__GetEntityType( void ) {
return (unsigned int )cPlayer::GetEntityType();
@@ -9748,11 +9796,12 @@ public:
return ( bool ) cPickup:: CollectedBy(a_Dest);
};
};
- void Initialize( void ) {
+ void Initialize( cWorld* a_World) {
if (push_method("Initialize", tolua_AllToLua_cEntity_Initialize00)) {
- ToluaBase::dbcall(lua_state, 1, 0);
+ tolua_pushusertype(lua_state, (void*)a_World, "cWorld");
+ ToluaBase::dbcall(lua_state, 2, 0);
} else {
- return ( void ) cPickup:: Initialize();
+ return ( void ) cPickup:: Initialize(a_World);
};
};
unsigned int GetEntityType( void ) {
@@ -9818,8 +9867,8 @@ public:
bool cPickup__CollectedBy( cPlayer* a_Dest) {
return ( bool )cPickup::CollectedBy(a_Dest);
};
- void cPickup__Initialize( void ) {
- return ( void )cPickup::Initialize();
+ void cPickup__Initialize( cWorld* a_World) {
+ return ( void )cPickup::Initialize(a_World);
};
unsigned int cPickup__GetEntityType( void ) {
return (unsigned int )cPickup::GetEntityType();
@@ -13964,6 +14013,36 @@ static int tolua_set_cPacket_Login_m_MapSeed(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
+/* get function: m_ServerMode of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_get_cPacket_Login_m_ServerMode
+static int tolua_get_cPacket_Login_m_ServerMode(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_ServerMode'",NULL);
+#endif
+ tolua_pushnumber(tolua_S,(lua_Number)self->m_ServerMode);
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* set function: m_ServerMode of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_set_cPacket_Login_m_ServerMode
+static int tolua_set_cPacket_Login_m_ServerMode(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_ServerMode'",NULL);
+ if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
+ tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);
+#endif
+ self->m_ServerMode = ((int) tolua_tonumber(tolua_S,2,0))
+;
+ return 0;
+}
+#endif //#ifndef TOLUA_DISABLE
+
/* get function: m_Dimension of class cPacket_Login */
#ifndef TOLUA_DISABLE_tolua_get_cPacket_Login_m_Dimension
static int tolua_get_cPacket_Login_m_Dimension(lua_State* tolua_S)
@@ -13994,6 +14073,96 @@ static int tolua_set_cPacket_Login_m_Dimension(lua_State* tolua_S)
}
#endif //#ifndef TOLUA_DISABLE
+/* get function: m_Difficulty of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_get_cPacket_Login_m_Difficulty
+static int tolua_get_cPacket_Login_m_Difficulty(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_Difficulty'",NULL);
+#endif
+ tolua_pushnumber(tolua_S,(lua_Number)self->m_Difficulty);
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* set function: m_Difficulty of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_set_cPacket_Login_m_Difficulty
+static int tolua_set_cPacket_Login_m_Difficulty(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_Difficulty'",NULL);
+ if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
+ tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);
+#endif
+ self->m_Difficulty = ((char) tolua_tonumber(tolua_S,2,0))
+;
+ return 0;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* get function: m_WorldHeight of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_get_cPacket_Login_unsigned_m_WorldHeight
+static int tolua_get_cPacket_Login_unsigned_m_WorldHeight(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_WorldHeight'",NULL);
+#endif
+ tolua_pushnumber(tolua_S,(lua_Number)self->m_WorldHeight);
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* set function: m_WorldHeight of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_set_cPacket_Login_unsigned_m_WorldHeight
+static int tolua_set_cPacket_Login_unsigned_m_WorldHeight(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_WorldHeight'",NULL);
+ if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
+ tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);
+#endif
+ self->m_WorldHeight = ((unsigned char) tolua_tonumber(tolua_S,2,0))
+;
+ return 0;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* get function: m_MaxPlayers of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_get_cPacket_Login_unsigned_m_MaxPlayers
+static int tolua_get_cPacket_Login_unsigned_m_MaxPlayers(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_MaxPlayers'",NULL);
+#endif
+ tolua_pushnumber(tolua_S,(lua_Number)self->m_MaxPlayers);
+ return 1;
+}
+#endif //#ifndef TOLUA_DISABLE
+
+/* set function: m_MaxPlayers of class cPacket_Login */
+#ifndef TOLUA_DISABLE_tolua_set_cPacket_Login_unsigned_m_MaxPlayers
+static int tolua_set_cPacket_Login_unsigned_m_MaxPlayers(lua_State* tolua_S)
+{
+ cPacket_Login* self = (cPacket_Login*) tolua_tousertype(tolua_S,1,0);
+#ifndef TOLUA_RELEASE
+ tolua_Error tolua_err;
+ if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_MaxPlayers'",NULL);
+ if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
+ tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);
+#endif
+ self->m_MaxPlayers = ((unsigned char) tolua_tonumber(tolua_S,2,0))
+;
+ return 0;
+}
+#endif //#ifndef TOLUA_DISABLE
+
/* method: new of class cPacket_BlockDig */
#ifndef TOLUA_DISABLE_tolua_AllToLua_cPacket_BlockDig_new00
static int tolua_AllToLua_cPacket_BlockDig_new00(lua_State* tolua_S)
@@ -14816,7 +14985,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_constant(tolua_S,"E_CHAT",E_CHAT);
tolua_constant(tolua_S,"E_UPDATE_TIME",E_UPDATE_TIME);
tolua_constant(tolua_S,"E_ENTITY_EQUIPMENT",E_ENTITY_EQUIPMENT);
- tolua_constant(tolua_S,"E_CREATE_INVENTORY_ACTION",E_CREATE_INVENTORY_ACTION);
tolua_constant(tolua_S,"E_USE_ENTITY",E_USE_ENTITY);
tolua_constant(tolua_S,"E_UPDATE_HEALTH",E_UPDATE_HEALTH);
tolua_constant(tolua_S,"E_RESPAWN",E_RESPAWN);
@@ -14853,7 +15021,9 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_constant(tolua_S,"E_INVENTORY_SLOT",E_INVENTORY_SLOT);
tolua_constant(tolua_S,"E_INVENTORY_WHOLE",E_INVENTORY_WHOLE);
tolua_constant(tolua_S,"E_INVENTORY_PROGRESS",E_INVENTORY_PROGRESS);
+ tolua_constant(tolua_S,"E_CREATE_INVENTORY_ACTION",E_CREATE_INVENTORY_ACTION);
tolua_constant(tolua_S,"E_UPDATE_SIGN",E_UPDATE_SIGN);
+ tolua_constant(tolua_S,"E_PING",E_PING);
tolua_constant(tolua_S,"E_DISCONNECT",E_DISCONNECT);
tolua_array(tolua_S,"g_BlockLightValue",tolua_get_AllToLua_g_BlockLightValue,tolua_set_AllToLua_g_BlockLightValue);
tolua_array(tolua_S,"g_BlockSpreadLightFalloff",tolua_get_AllToLua_g_BlockSpreadLightFalloff,tolua_set_AllToLua_g_BlockSpreadLightFalloff);
@@ -14873,6 +15043,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_cclass(tolua_S,"cChatColor","cChatColor","",NULL);
tolua_beginmodule(tolua_S,"cChatColor");
tolua_variable(tolua_S,"Color",tolua_get_cChatColor_Color,NULL);
+ tolua_variable(tolua_S,"Delimiter",tolua_get_cChatColor_Delimiter,NULL);
tolua_variable(tolua_S,"Black",tolua_get_cChatColor_Black,NULL);
tolua_variable(tolua_S,"Navy",tolua_get_cChatColor_Navy,NULL);
tolua_variable(tolua_S,"Green",tolua_get_cChatColor_Green,NULL);
@@ -14910,6 +15081,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_function(tolua_S,"GetEntityType",tolua_AllToLua_cEntity_GetEntityType00);
tolua_function(tolua_S,"IsA",tolua_AllToLua_cEntity_IsA00);
tolua_function(tolua_S,"GetClass",tolua_AllToLua_cEntity_GetClass00);
+ tolua_function(tolua_S,"GetWorld",tolua_AllToLua_cEntity_GetWorld00);
tolua_function(tolua_S,"GetPosition",tolua_AllToLua_cEntity_GetPosition00);
tolua_function(tolua_S,"GetPosX",tolua_AllToLua_cEntity_GetPosX00);
tolua_function(tolua_S,"GetPosY",tolua_AllToLua_cEntity_GetPosY00);
@@ -15416,7 +15588,11 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
tolua_variable(tolua_S,"m_ProtocolVersion",tolua_get_cPacket_Login_m_ProtocolVersion,tolua_set_cPacket_Login_m_ProtocolVersion);
tolua_variable(tolua_S,"m_Username",tolua_get_cPacket_Login_m_Username,tolua_set_cPacket_Login_m_Username);
tolua_variable(tolua_S,"m_MapSeed",tolua_get_cPacket_Login_m_MapSeed,tolua_set_cPacket_Login_m_MapSeed);
+ tolua_variable(tolua_S,"m_ServerMode",tolua_get_cPacket_Login_m_ServerMode,tolua_set_cPacket_Login_m_ServerMode);
tolua_variable(tolua_S,"m_Dimension",tolua_get_cPacket_Login_m_Dimension,tolua_set_cPacket_Login_m_Dimension);
+ tolua_variable(tolua_S,"m_Difficulty",tolua_get_cPacket_Login_m_Difficulty,tolua_set_cPacket_Login_m_Difficulty);
+ tolua_variable(tolua_S,"m_WorldHeight",tolua_get_cPacket_Login_unsigned_m_WorldHeight,tolua_set_cPacket_Login_unsigned_m_WorldHeight);
+ tolua_variable(tolua_S,"m_MaxPlayers",tolua_get_cPacket_Login_unsigned_m_MaxPlayers,tolua_set_cPacket_Login_unsigned_m_MaxPlayers);
tolua_endmodule(tolua_S);
#ifdef __cplusplus
tolua_cclass(tolua_S,"cPacket_BlockDig","cPacket_BlockDig","cPacket",tolua_collect_cPacket_BlockDig);
diff --git a/source/Bindings.h b/source/Bindings.h
index 4fb3dfa9e..d779e1f5b 100644
--- a/source/Bindings.h
+++ b/source/Bindings.h
@@ -1,6 +1,6 @@
/*
** Lua binding: AllToLua
-** Generated automatically by tolua++-1.0.92 on 07/15/11 01:36:28.
+** Generated automatically by tolua++-1.0.92 on 10/31/11 01:51:08.
*/
/* Exported function */
diff --git a/source/cBlockEntity.h b/source/cBlockEntity.h
index 75c864cec..cbb6e7681 100644
--- a/source/cBlockEntity.h
+++ b/source/cBlockEntity.h
@@ -6,12 +6,19 @@
enum ENUM_BLOCK_ID;
#endif
+class cChunk;
class cClientHandle;
class cPlayer;
class cBlockEntity
{
protected:
- cBlockEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z) : m_PosX( a_X ), m_PosY( a_Y ), m_PosZ( a_Z ), m_BlockType( a_BlockType ) {}
+ cBlockEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z, cChunk* a_Chunk)
+ : m_PosX( a_X )
+ , m_PosY( a_Y )
+ , m_PosZ( a_Z )
+ , m_BlockType( a_BlockType )
+ , m_Chunk( a_Chunk )
+ {}
public:
virtual ~cBlockEntity() {};
virtual void Destroy() {};
@@ -19,6 +26,7 @@ public:
int GetPosX() { return m_PosX; }
int GetPosY() { return m_PosY; }
int GetPosZ() { return m_PosZ; }
+ cChunk* GetChunk() { return m_Chunk; }
ENUM_BLOCK_ID GetBlockType() { return m_BlockType; }
@@ -30,5 +38,7 @@ protected:
int m_PosY;
int m_PosZ;
+ cChunk* m_Chunk;
+
ENUM_BLOCK_ID m_BlockType;
};
diff --git a/source/cCavespider.cpp b/source/cCavespider.cpp
index 75673d5ec..a34f72465 100644
--- a/source/cCavespider.cpp
+++ b/source/cCavespider.cpp
@@ -41,7 +41,7 @@ bool cCavespider::IsA( const char* a_EntityType )
void cCavespider::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- m_EMPersonality = (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) )? PASSIVE:AGGRESSIVE;
+ m_EMPersonality = (GetWorld()->GetWorldTime() < (12000 + 1000) )? PASSIVE:AGGRESSIVE;
}
void cCavespider::KilledBy( cEntity* a_Killer )
@@ -49,12 +49,12 @@ void cCavespider::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cChestEntity.cpp b/source/cChestEntity.cpp
index f76848879..54a06fcb9 100644
--- a/source/cChestEntity.cpp
+++ b/source/cChestEntity.cpp
@@ -7,11 +7,12 @@
#include "cWindow.h"
#include "cPickup.h"
#include "cMCLogger.h"
+#include "cChunk.h"
#include
-cChestEntity::cChestEntity(int a_X, int a_Y, int a_Z)
- : cBlockEntity( E_BLOCK_CHEST, a_X, a_Y, a_Z )
+cChestEntity::cChestEntity(int a_X, int a_Y, int a_Z, cChunk* a_Chunk)
+ : cBlockEntity( E_BLOCK_CHEST, a_X, a_Y, a_Z, a_Chunk )
{
m_Content = new cItem[ c_ChestHeight*c_ChestWidth ];
}
@@ -37,7 +38,7 @@ void cChestEntity::Destroy()
if( !m_Content[i].IsEmpty() )
{
cPickup* Pickup = new cPickup( m_PosX*32 + 16, m_PosY*32 + 16, m_PosZ*32 + 16, m_Content[i], 0, 1.f, 0 );
- Pickup->Initialize();
+ Pickup->Initialize( GetChunk()->GetWorld() );
m_Content[i].Empty();
}
}
diff --git a/source/cChestEntity.h b/source/cChestEntity.h
index 5170b168d..785f57553 100644
--- a/source/cChestEntity.h
+++ b/source/cChestEntity.h
@@ -16,7 +16,7 @@ class cNBTData;
class cChestEntity : public cBlockEntity, public cWindowOwner
{
public:
- cChestEntity(int a_X, int a_Y, int a_Z);
+ cChestEntity(int a_X, int a_Y, int a_Z, cChunk* a_Chunk);
virtual ~cChestEntity();
virtual void Destroy();
diff --git a/source/cChicken.cpp b/source/cChicken.cpp
index ed420f256..ba534cc61 100644
--- a/source/cChicken.cpp
+++ b/source/cChicken.cpp
@@ -52,12 +52,12 @@ void cChicken::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cChunk.cpp b/source/cChunk.cpp
index 8e03ff6c7..c509e23b7 100644
--- a/source/cChunk.cpp
+++ b/source/cChunk.cpp
@@ -74,7 +74,7 @@ cChunk::~cChunk()
{
if( (*itr)->GetEntityType() != cEntity::E_PLAYER )
{
- cRoot::Get()->GetWorld()->AddToRemoveEntityQueue( **itr ); // World also destroys the entity
+ m_World->AddToRemoveEntityQueue( **itr ); // World also destroys the entity
}
}
m_pState->m_Entities.clear();
@@ -88,7 +88,7 @@ cChunk::~cChunk()
delete m_pState;
}
-cChunk::cChunk(int a_X, int a_Y, int a_Z)
+cChunk::cChunk(int a_X, int a_Y, int a_Z, cWorld* a_World)
: m_pState( new sChunkState )
, m_bCalculateLighting( false )
, m_bCalculateHeightmap( false )
@@ -104,6 +104,7 @@ cChunk::cChunk(int a_X, int a_Y, int a_Z)
, m_BlockTickY( 0 )
, m_BlockTickZ( 0 )
, m_EntitiesCriticalSection( 0 )
+ , m_World( a_World )
{
//LOG("cChunk::cChunk(%i, %i, %i)", a_X, a_Y, a_Z);
m_EntitiesCriticalSection = new cCriticalSection();
@@ -237,7 +238,7 @@ void cChunk::Tick(float a_Dt)
{
SetBlock( X, Y, Z, 0, 0 );
cPickup* Pickup = new cPickup( (X+m_PosX*16) * 32 + 16, (Y+m_PosY*128) * 32 + 16, (Z+m_PosZ*16) * 32 + 16, cItem( (ENUM_ITEM_ID)BlockID, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( m_World );
}
}
break;
@@ -251,12 +252,11 @@ void cChunk::Tick(float a_Dt)
char YY = (char)Y;
int ZZ = Z + m_PosZ*16;
AddDirection( XX, YY, ZZ, Dir, true );
- cWorld* World = cRoot::Get()->GetWorld();
- if( World->GetBlock( XX, YY, ZZ ) == E_BLOCK_AIR )
+ if( m_World->GetBlock( XX, YY, ZZ ) == E_BLOCK_AIR )
{
SetBlock( X, Y, Z, 0, 0 );
cPickup* Pickup = new cPickup( (X+m_PosX*16) * 32 + 16, (Y+m_PosY*128) * 32 + 16, (Z+m_PosZ*16) * 32 + 16, cItem( (ENUM_ITEM_ID)BlockID, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( m_World );
}
}
break;
@@ -267,12 +267,11 @@ void cChunk::Tick(float a_Dt)
char YY = (char)Y;
int ZZ = Z + m_PosZ*16;
AddDirection( XX, YY, ZZ, Dir, true );
- cWorld* World = cRoot::Get()->GetWorld();
- if( World->GetBlock( XX, YY, ZZ ) == E_BLOCK_AIR )
+ if( m_World->GetBlock( XX, YY, ZZ ) == E_BLOCK_AIR )
{
SetBlock( X, Y, Z, 0, 0 );
cPickup* Pickup = new cPickup( (X+m_PosX*16) * 32 + 16, (Y+m_PosY*128) * 32 + 16, (Z+m_PosZ*16) * 32 + 16, cItem( (ENUM_ITEM_ID)BlockID, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( m_World );
}
}
break;
@@ -337,7 +336,7 @@ void cChunk::Tick(float a_Dt)
case E_BLOCK_SAPLING:
{
FastSetBlock( m_BlockTickX, m_BlockTickY, m_BlockTickZ, E_BLOCK_AIR, GetLight( m_BlockMeta, Index ) );
- cRoot::Get()->GetWorld()->GrowTree( m_BlockTickX + m_PosX*16, m_BlockTickY, m_BlockTickZ + m_PosZ*16 );
+ m_World->GrowTree( m_BlockTickX + m_PosX*16, m_BlockTickY, m_BlockTickZ + m_PosZ*16 );
}
default:
break;
@@ -375,18 +374,18 @@ void cChunk::CreateBlockEntities()
{
case E_BLOCK_CHEST:
{
- m_pState->m_BlockEntities.push_back( new cChestEntity( x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16 ) );
+ m_pState->m_BlockEntities.push_back( new cChestEntity( x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16, this ) );
}
break;
case E_BLOCK_FURNACE:
{
- m_pState->m_BlockEntities.push_back( new cFurnaceEntity( x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16 ) );
+ m_pState->m_BlockEntities.push_back( new cFurnaceEntity( x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16, this ) );
}
break;
case E_BLOCK_SIGN_POST:
case E_BLOCK_WALLSIGN:
{
- m_pState->m_BlockEntities.push_back( new cSignEntity( BlockType, x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16 ) );
+ m_pState->m_BlockEntities.push_back( new cSignEntity( BlockType, x + m_PosX*16, y + m_PosY*128, z + m_PosZ*16, this ) );
}
break;
default:
@@ -595,8 +594,8 @@ void cChunk::SpreadLight(char* a_LightBuffer)
bool bCalcLeft, bCalcRight, bCalcFront, bCalcBack;
bCalcLeft = bCalcRight = bCalcFront = bCalcBack = false;
// Spread to neighbour chunks X-axis
- cChunk* LeftChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_PosX-1, m_PosY, m_PosZ );
- cChunk* RightChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_PosX+1, m_PosY, m_PosZ );
+ cChunk* LeftChunk = m_World->GetChunkUnreliable( m_PosX-1, m_PosY, m_PosZ );
+ cChunk* RightChunk = m_World->GetChunkUnreliable( m_PosX+1, m_PosY, m_PosZ );
char* LeftSky = 0, *RightSky = 0;
if(LeftChunk) LeftSky = (a_LightBuffer==m_BlockSkyLight)?LeftChunk->pGetSkyLight():LeftChunk->pGetLight();
if(RightChunk) RightSky = (a_LightBuffer==m_BlockSkyLight)?RightChunk->pGetSkyLight():RightChunk->pGetLight();
@@ -633,8 +632,8 @@ void cChunk::SpreadLight(char* a_LightBuffer)
}
// Spread to neighbour chunks Z-axis
- cChunk* FrontChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_PosX, m_PosY, m_PosZ-1 );
- cChunk* BackChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_PosX, m_PosY, m_PosZ+1 );
+ cChunk* FrontChunk = m_World->GetChunkUnreliable( m_PosX, m_PosY, m_PosZ-1 );
+ cChunk* BackChunk = m_World->GetChunkUnreliable( m_PosX, m_PosY, m_PosZ+1 );
char* FrontSky = 0, *BackSky = 0;
if(FrontChunk) FrontSky = (a_LightBuffer==m_BlockSkyLight)?FrontChunk->pGetSkyLight():FrontChunk->pGetLight();
if(BackChunk) BackSky = (a_LightBuffer==m_BlockSkyLight)?BackChunk->pGetSkyLight():BackChunk->pGetLight();
@@ -670,10 +669,10 @@ void cChunk::SpreadLight(char* a_LightBuffer)
}
}
- if( bCalcLeft ) cRoot::Get()->GetWorld()->ReSpreadLighting( LeftChunk );
- if( bCalcRight ) cRoot::Get()->GetWorld()->ReSpreadLighting( RightChunk );
- if( bCalcFront ) cRoot::Get()->GetWorld()->ReSpreadLighting( FrontChunk );
- if( bCalcBack ) cRoot::Get()->GetWorld()->ReSpreadLighting( BackChunk );
+ if( bCalcLeft ) m_World->ReSpreadLighting( LeftChunk );
+ if( bCalcRight ) m_World->ReSpreadLighting( RightChunk );
+ if( bCalcFront ) m_World->ReSpreadLighting( FrontChunk );
+ if( bCalcBack ) m_World->ReSpreadLighting( BackChunk );
}
float GetNoise( float x, float y, cNoise & a_Noise )
@@ -745,7 +744,7 @@ void cChunk::GenerateTerrain()
const ENUM_BLOCK_ID RedID = E_BLOCK_REDSTONE_ORE;
*/
- cNoise m_Noise( cRoot::Get()->GetWorld()->GetWorldSeed() );
+ cNoise m_Noise( m_World->GetWorldSeed() );
for(int z = 0; z < 16; z++)
{
const float zz = (float)(m_PosZ*16 + z);
@@ -855,7 +854,7 @@ void cChunk::GenerateTerrain()
float val3 = m_Noise.SSE_CubicNoise2D( xx*0.01f+10, zz*0.01f+10 );
float val4 = m_Noise.SSE_CubicNoise2D( xx*0.05f+20, zz*0.05f+20 );
if( val1 + val2 > 0.2f && (rand()%128) > 124 )
- cRoot::Get()->GetWorld()->GrowTree( xx, TopY, zz );
+ m_World->GrowTree( xx, TopY, zz );
else if( val3 > 0.2f && (rand()%128) > 124 )
m_BlockType[ MakeIndex(x, TopY+1, z) ] = E_BLOCK_YELLOW_FLOWER;
else if( val4 > 0.2f && (rand()%128) > 124 )
@@ -931,14 +930,14 @@ void cChunk::SetBlock( int a_X, int a_Y, int a_Z, char a_BlockType, char a_Block
switch( a_BlockType )
{
case E_BLOCK_CHEST:
- AddBlockEntity( new cChestEntity( a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16 ) );
+ AddBlockEntity( new cChestEntity( a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16, this ) );
break;
case E_BLOCK_FURNACE:
- AddBlockEntity( new cFurnaceEntity( a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16 ) );
+ AddBlockEntity( new cFurnaceEntity( a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16, this ) );
break;
case E_BLOCK_SIGN_POST:
case E_BLOCK_WALLSIGN:
- AddBlockEntity( new cSignEntity( (ENUM_BLOCK_ID)a_BlockType, a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16 ) );
+ AddBlockEntity( new cSignEntity( (ENUM_BLOCK_ID)a_BlockType, a_X + m_PosX*16, a_Y + m_PosY*128, a_Z + m_PosZ*16, this ) );
break;
default:
break;
@@ -1056,7 +1055,7 @@ bool cChunk::RemoveEntity( cEntity & a_Entity, cChunk* a_CalledFrom /* = 0 */ )
if( !a_CalledFrom )
{
UnlockEntities();
- return cRoot::Get()->GetWorld()->RemoveEntityFromChunk( a_Entity, this );
+ return m_World->RemoveEntityFromChunk( a_Entity, this );
}
UnlockEntities();
return false;
@@ -1125,7 +1124,7 @@ bool cChunk::LoadFromDisk()
{
case E_BLOCK_CHEST:
{
- cChestEntity* ChestEntity = new cChestEntity( 0, 0, 0 );
+ cChestEntity* ChestEntity = new cChestEntity( 0, 0, 0, this );
if( !ChestEntity->LoadFromFile( f ) )
{
LOGERROR("ERROR READING CHEST FROM FILE %s", SourceFile );
@@ -1138,7 +1137,7 @@ bool cChunk::LoadFromDisk()
break;
case E_BLOCK_FURNACE:
{
- cFurnaceEntity* FurnaceEntity = new cFurnaceEntity( 0, 0, 0 );
+ cFurnaceEntity* FurnaceEntity = new cFurnaceEntity( 0, 0, 0, this );
if( !FurnaceEntity->LoadFromFile( f ) )
{
LOGERROR("ERROR READING FURNACE FROM FILE %s", SourceFile );
@@ -1153,7 +1152,7 @@ bool cChunk::LoadFromDisk()
case E_BLOCK_SIGN_POST:
case E_BLOCK_WALLSIGN:
{
- cSignEntity* SignEntity = new cSignEntity(BlockType, 0, 0, 0 );
+ cSignEntity* SignEntity = new cSignEntity(BlockType, 0, 0, 0, this );
if( !SignEntity->LoadFromFile( f ) )
{
LOGERROR("ERROR READING SIGN FROM FILE %s", SourceFile );
@@ -1275,7 +1274,7 @@ void cChunk::LoadFromJson( const Json::Value & a_Value )
for( Json::Value::iterator itr = AllChests.begin(); itr != AllChests.end(); ++itr )
{
Json::Value & Chest = *itr;
- cChestEntity* ChestEntity = new cChestEntity(0,0,0);
+ cChestEntity* ChestEntity = new cChestEntity(0,0,0, this);
if( !ChestEntity->LoadFromJson( Chest ) )
{
LOGERROR("ERROR READING CHEST FROM JSON!" );
@@ -1292,7 +1291,7 @@ void cChunk::LoadFromJson( const Json::Value & a_Value )
for( Json::Value::iterator itr = AllFurnaces.begin(); itr != AllFurnaces.end(); ++itr )
{
Json::Value & Furnace = *itr;
- cFurnaceEntity* FurnaceEntity = new cFurnaceEntity(0,0,0);
+ cFurnaceEntity* FurnaceEntity = new cFurnaceEntity(0,0,0, this);
if( !FurnaceEntity->LoadFromJson( Furnace ) )
{
LOGERROR("ERROR READING FURNACE FROM JSON!" );
@@ -1309,7 +1308,7 @@ void cChunk::LoadFromJson( const Json::Value & a_Value )
for( Json::Value::iterator itr = AllSigns.begin(); itr != AllSigns.end(); ++itr )
{
Json::Value & Sign = *itr;
- cSignEntity* SignEntity = new cSignEntity( E_BLOCK_SIGN_POST, 0,0,0);
+ cSignEntity* SignEntity = new cSignEntity( E_BLOCK_SIGN_POST, 0,0,0, this);
if( !SignEntity->LoadFromJson( Sign ) )
{
LOGERROR("ERROR READING SIGN FROM JSON!" );
diff --git a/source/cChunk.h b/source/cChunk.h
index d90e817cf..c8db5f69c 100644
--- a/source/cChunk.h
+++ b/source/cChunk.h
@@ -7,6 +7,7 @@ namespace Json
class Value;
};
+class cWorld;
class cCriticalSection;
class cFurnaceEntity;
class cPacket;
@@ -17,16 +18,17 @@ class cServer;
class cChunk
{
public:
- cChunk(int a_X, int a_Y, int a_Z);
+ cChunk(int a_X, int a_Y, int a_Z, cWorld* a_World);
~cChunk();
void Initialize();
void Tick(float a_Dt);
- inline int GetPosX() { return m_PosX; }
- inline int GetPosY() { return m_PosY; }
- inline int GetPosZ() { return m_PosZ; }
+ int GetPosX() { return m_PosX; }
+ int GetPosY() { return m_PosY; }
+ int GetPosZ() { return m_PosZ; }
+ cWorld* GetWorld() { return m_World; }
void Send( cClientHandle* a_Client );
void AsyncUnload( cClientHandle* a_Client );
@@ -112,6 +114,7 @@ private:
bool m_bCalculateHeightmap;
int m_PosX, m_PosY, m_PosZ;
+ cWorld* m_World;
char m_BlockData[c_BlockDataSize]; // Chunk data ready to be compressed and sent
char *m_BlockType; // Pointers to an element in m_BlockData
diff --git a/source/cChunkMap.cpp b/source/cChunkMap.cpp
index 32bdf576a..44dfe3a29 100644
--- a/source/cChunkMap.cpp
+++ b/source/cChunkMap.cpp
@@ -19,12 +19,13 @@
#define LAYER_SIZE (32)
-cChunkMap::cChunkMap( int a_Width, int a_Height )
+cChunkMap::cChunkMap( int a_Width, int a_Height, cWorld* a_World )
: m_Nodes( new cChunkNode[ a_Width * a_Height ] )
, m_Width( a_Width )
, m_Height( a_Height )
, m_Layers( 0 )
, m_NumLayers( 0 )
+ , m_World( a_World )
{
}
@@ -362,7 +363,7 @@ cChunk* cChunkMap::GetChunk( int a_X, int a_Y, int a_Z )
}
else
{
- cChunk* Chunk = new cChunk(a_X, a_Y, a_Z);
+ cChunk* Chunk = new cChunk(a_X, a_Y, a_Z, m_World);
memcpy( Chunk->m_BlockData, BlockData, cChunk::c_BlockDataSize );
Chunk->CalculateHeightmap();
Data->m_LiveChunk = Chunk;
@@ -426,7 +427,7 @@ void cChunkMap::Tick( float a_Dt )
void cChunkMap::UnloadUnusedChunks()
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = m_World;
/* // OLD
for( int i = 0; i < m_Width*m_Height; ++i )
{
diff --git a/source/cChunkMap.h b/source/cChunkMap.h
index 19619f0c5..d1a289a7d 100644
--- a/source/cChunkMap.h
+++ b/source/cChunkMap.h
@@ -1,11 +1,12 @@
#pragma once
+class cWorld;
class cEntity;
class cChunk;
class cChunkMap
{
public:
- cChunkMap( int a_Width, int a_Height );
+ cChunkMap( int a_Width, int a_Height, cWorld* a_World );
~cChunkMap();
void AddChunk( cChunk* a_Chunk );
@@ -88,4 +89,5 @@ private:
cChunkNode* m_Nodes;
int m_Width, m_Height;
+ cWorld* m_World;
};
diff --git a/source/cClientHandle.cpp b/source/cClientHandle.cpp
index 32920b028..ab7e66786 100644
--- a/source/cClientHandle.cpp
+++ b/source/cClientHandle.cpp
@@ -432,7 +432,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
}
// Now initialize player (adds to entity list etc.)
- m_Player->Initialize();
+ m_Player->Initialize( cRoot::Get()->GetWorld() ); // TODO - Get correct world for player
// Broadcasts to all but this ( this is actually handled in cChunk.cpp, after entity is added to the chunk )
//m_Player->SpawnOn( 0 );
@@ -479,13 +479,13 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
}
else
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = m_Player->GetWorld();
char OldBlock = World->GetBlock(PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ);
char MetaData = World->GetBlockMeta(PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ);
- bool bBroken = (PacketData->m_Status == 0x02) || g_BlockOneHitDig[(int)OldBlock] || ( (PacketData->m_Status == 0x00) && (cRoot::Get()->GetWorld()->GetGameMode() == 1) ); //need to change to check for client's gamemode.
+ bool bBroken = (PacketData->m_Status == 0x02) || g_BlockOneHitDig[(int)OldBlock] || ( (PacketData->m_Status == 0x00) && (World->GetGameMode() == 1) ); //need to change to check for client's gamemode.
cItem PickupItem;
- if( bBroken && !(cRoot::Get()->GetWorld()->GetGameMode() == 1) ) // broken
+ if( bBroken && !(World->GetGameMode() == 1) ) // broken
{
ENUM_ITEM_ID PickupID = cBlockToPickup::ToPickup( (ENUM_BLOCK_ID)OldBlock, m_Player->GetInventory().GetEquippedItem().m_ItemID );
PickupItem.m_ItemID = PickupID;
@@ -496,7 +496,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
{
if( bBroken ) // Block broken
{
- if( cRoot::Get()->GetWorld()->DigBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, PickupItem ) )
+ if( World->DigBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, PickupItem ) )
{
int helditem = m_Player->GetInventory().GetEquippedItem().m_ItemID;
bool itemhasdur = false;
@@ -572,7 +572,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
}
else
{
- cRoot::Get()->GetWorld()->SendBlockTo( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, m_Player );
+ World->SendBlockTo( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, m_Player );
}
}
}
@@ -592,7 +592,8 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
if( PacketData->m_Direction > -1 )
{
AddDirection( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, PacketData->m_Direction );
- cRoot::Get()->GetWorld()->SendBlockTo( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, m_Player );
+
+ m_Player->GetWorld()->SendBlockTo( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ, m_Player );
}
break;
}
@@ -604,7 +605,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
bool bPlaceBlock = true;
if( PacketData->m_Direction >= 0 )
{
- ENUM_BLOCK_ID BlockID = (ENUM_BLOCK_ID)cRoot::Get()->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
+ ENUM_BLOCK_ID BlockID = (ENUM_BLOCK_ID)m_Player->GetWorld()->GetBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
switch( BlockID )
{
case E_BLOCK_WORKBENCH:
@@ -618,7 +619,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
case E_BLOCK_CHEST:
{
bPlaceBlock = false;
- cBlockEntity* BlockEntity = cRoot::Get()->GetWorld()->GetBlockEntity( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
+ cBlockEntity* BlockEntity = m_Player->GetWorld()->GetBlockEntity( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
if( BlockEntity )
{
BlockEntity->UsedBy( *m_Player );
@@ -727,7 +728,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
int Z = PacketData->m_PosZ;
AddDirection( X, Y, Z, PacketData->m_Direction );
- cRoot::Get()->GetWorld()->SetBlock( X, Y, Z, (char)PacketData->m_ItemType, MetaData );
+ m_Player->GetWorld()->SetBlock( X, Y, Z, (char)PacketData->m_ItemType, MetaData );
}
}
}
@@ -755,7 +756,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
if( m_Player->GetInventory().RemoveItem( DroppedItem ) )
{
cPickup* Pickup = new cPickup( PacketData );
- Pickup->Initialize();
+ Pickup->Initialize( m_Player->GetWorld() );
}
}
break;
@@ -836,7 +837,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
case E_UPDATE_SIGN:
{
cPacket_UpdateSign* PacketData = reinterpret_cast(a_Packet);
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = m_Player->GetWorld();
cChunk* Chunk = World->GetChunkOfBlock( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
cBlockEntity* BlockEntity = Chunk->GetBlockEntity( PacketData->m_PosX, PacketData->m_PosY, PacketData->m_PosZ );
if( BlockEntity && (BlockEntity->GetBlockType() == E_BLOCK_SIGN_POST || BlockEntity->GetBlockType() == E_BLOCK_WALLSIGN ) )
@@ -852,7 +853,7 @@ void cClientHandle::HandlePacket( cPacket* a_Packet )
cPacket_UseEntity* PacketData = reinterpret_cast(a_Packet);
if( PacketData->m_bLeftClick )
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = m_Player->GetWorld();
cEntity* Entity = World->GetEntity( PacketData->m_TargetID );
if( Entity && Entity->IsA("cPawn") )
{
@@ -902,12 +903,12 @@ void cClientHandle::AuthenticateThread( void* a_Param )
void cClientHandle::SendLoginResponse()
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = cRoot::Get()->GetWorld(); // TODO - Get the correct world or better yet, move this to the main thread so we don't have to lock anything
World->LockEntities();
// Spawn player (only serversided, so data is loaded)
m_Player = new cPlayer( this, GetUsername() ); // !!DO NOT INITIALIZE!! <- is done after receiving MoveLook Packet
- cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_PLAYER_SPAWN, 1, m_Player );
+ cRoot::Get()->GetPluginManager()->CallHook( cPluginManager::E_PLUGIN_PLAYER_SPAWN, 1, m_Player ); // TODO - this function is called from a seperate thread, which might be dangerous
// Return a server login packet
cPacket_Login LoginResponse;
diff --git a/source/cCow.cpp b/source/cCow.cpp
index 3f6286dec..517fa84d8 100644
--- a/source/cCow.cpp
+++ b/source/cCow.cpp
@@ -52,12 +52,12 @@ void cCow::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cCraftingWindow.cpp b/source/cCraftingWindow.cpp
index be3de600b..c8ddaa5d7 100644
--- a/source/cCraftingWindow.cpp
+++ b/source/cCraftingWindow.cpp
@@ -95,7 +95,7 @@ void cCraftingWindow::Close( cPlayer & a_Player )
EulerToVector( -a_Player.GetRotation(), a_Player.GetPitch(), vZ, vX, vY );
vY = -vY*2 + 1.f;
cPickup* Pickup = new cPickup( (int)(a_Player.GetPosX()*32), (int)(a_Player.GetPosY()*32) + (int)(1.6f*32), (int)(a_Player.GetPosZ()*32), *Item, vX*2, vY*2, vZ*2 );
- Pickup->Initialize();
+ Pickup->Initialize( a_Player.GetWorld() );
}
Item->Empty();
}
diff --git a/source/cCreeper.cpp b/source/cCreeper.cpp
index ffebc2c58..18f9a6730 100644
--- a/source/cCreeper.cpp
+++ b/source/cCreeper.cpp
@@ -48,12 +48,12 @@ void cCreeper::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cEnderman.cpp b/source/cEnderman.cpp
index 42a57a613..166d05b20 100644
--- a/source/cEnderman.cpp
+++ b/source/cEnderman.cpp
@@ -41,7 +41,7 @@ bool cEnderman::IsA( const char* a_EntityType )
void cEnderman::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- if (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
+ if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
}
}
@@ -51,12 +51,12 @@ void cEnderman::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cEntity.cpp b/source/cEntity.cpp
index 3b62bec9c..b8cc26199 100644
--- a/source/cEntity.cpp
+++ b/source/cEntity.cpp
@@ -27,6 +27,7 @@ cEntity::cEntity(const double & a_X, const double & a_Y, const double & a_Z)
, m_bDirtyOrientation( true )
, m_bDestroyed( false )
, m_EntityType( E_ENTITY )
+ , m_World( 0 )
{
m_EntityCount++;
m_UniqueID = m_EntityCount;
@@ -36,23 +37,27 @@ cEntity::~cEntity()
{
delete m_Referencers;
delete m_References;
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
- if( Chunk )
+ if( m_World )
{
- cPacket_DestroyEntity DestroyEntity( this );
- Chunk->Broadcast( DestroyEntity );
- Chunk->RemoveEntity( *this );
+ cChunk* Chunk = m_World->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ if( Chunk )
+ {
+ cPacket_DestroyEntity DestroyEntity( this );
+ Chunk->Broadcast( DestroyEntity );
+ Chunk->RemoveEntity( *this );
+ }
}
delete m_Pos;
delete m_Rot;
}
-void cEntity::Initialize()
+void cEntity::Initialize( cWorld* a_World )
{
- cRoot::Get()->GetWorld()->AddEntity( this );
+ m_World = a_World;
+ m_World->AddEntity( this );
cWorld::BlockToChunk( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z, m_ChunkX, m_ChunkY, m_ChunkZ );
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = m_World->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
if( Chunk )
{
//LOG("Adding entity %i to chunk %i %i %i", m_UniqueID, Chunk->GetPosX(), Chunk->GetPosY(), Chunk->GetPosZ() );
@@ -74,9 +79,8 @@ void cEntity::MoveToCorrectChunk()
cWorld::BlockToChunk( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z, ChunkX, ChunkY, ChunkZ );
if( m_ChunkX != ChunkX || m_ChunkY != ChunkY || m_ChunkZ != ChunkZ )
{
- cWorld* World = cRoot::Get()->GetWorld();
LOG("From %i %i To %i %i", m_ChunkX, m_ChunkZ, ChunkX, ChunkZ );
- cChunk* Chunk = World->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = m_World->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
typedef std::list< cClientHandle* > ClientList;
ClientList BeforeClients;
@@ -86,7 +90,7 @@ void cEntity::MoveToCorrectChunk()
BeforeClients = Chunk->GetClients();
}
m_ChunkX = ChunkX; m_ChunkY = ChunkY; m_ChunkZ = ChunkZ;
- cChunk* NewChunk = World->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* NewChunk = m_World->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
ClientList AfterClients;
if( NewChunk )
{
diff --git a/source/cEntity.h b/source/cEntity.h
index 602abeeaf..509a5c1d5 100644
--- a/source/cEntity.h
+++ b/source/cEntity.h
@@ -27,6 +27,7 @@
CLASS_DEF_ISA( classname, superclass ) \
CLASS_DEF_GETCLASS( classname )
+class cWorld;
class cReferenceManager;
class Vector3d;
class Vector3f;
@@ -37,7 +38,7 @@ public: //tolua_export
cEntity(const double & a_X, const double & a_Y, const double & a_Z); //tolua_export
virtual ~cEntity(); //tolua_export
- virtual void Initialize(); //tolua_export
+ virtual void Initialize( cWorld* a_World ); //tolua_export
enum ENUM_ENTITY_TYPE //tolua_export
{ //tolua_export
@@ -50,6 +51,7 @@ public: //tolua_export
virtual bool IsA( const char* a_EntityType ); //tolua_export
virtual const char* GetClass(); //tolua_export
+ cWorld* GetWorld() { return m_World; } //tolua_export
const Vector3d & GetPosition(); //tolua_export
const double & GetPosX(); //tolua_export
@@ -105,4 +107,6 @@ protected:
bool m_bDestroyed;
ENUM_ENTITY_TYPE m_EntityType;
+private:
+ cWorld* m_World;
}; //tolua_export
diff --git a/source/cFurnaceEntity.cpp b/source/cFurnaceEntity.cpp
index 1bca35aca..95f5f566c 100644
--- a/source/cFurnaceEntity.cpp
+++ b/source/cFurnaceEntity.cpp
@@ -17,8 +17,8 @@
#include
-cFurnaceEntity::cFurnaceEntity(int a_X, int a_Y, int a_Z)
- : cBlockEntity( E_BLOCK_FURNACE, a_X, a_Y, a_Z )
+cFurnaceEntity::cFurnaceEntity(int a_X, int a_Y, int a_Z, cChunk* a_Chunk)
+ : cBlockEntity( E_BLOCK_FURNACE, a_X, a_Y, a_Z, a_Chunk )
, m_Items( new cItem[3] )
, m_CookingItem( 0 )
, m_CookTime( 0 )
@@ -51,15 +51,13 @@ void cFurnaceEntity::Destroy()
if( !m_Items[i].IsEmpty() )
{
cPickup* Pickup = new cPickup( m_PosX*32 + 16, m_PosY*32 + 16, m_PosZ*32 + 16, m_Items[i], 0, 1.f, 0 );
- Pickup->Initialize();
+ Pickup->Initialize( m_Chunk->GetWorld() );
m_Items[i].Empty();
}
}
// Remove from tick list
- cWorld* World = cRoot::Get()->GetWorld();
- cChunk* Chunk = World->GetChunkOfBlock( m_PosX, m_PosY, m_PosZ );
- Chunk->RemoveTickBlockEntity( this );
+ GetChunk()->RemoveTickBlockEntity( this );
}
void cFurnaceEntity::UsedBy( cPlayer & a_Player )
@@ -200,9 +198,7 @@ bool cFurnaceEntity::StartCooking()
m_TimeCooked = 0.f;
m_CookTime = R->CookTime;
}
- cWorld* World = cRoot::Get()->GetWorld();
- cChunk* Chunk = World->GetChunkOfBlock( m_PosX, m_PosY, m_PosZ );
- Chunk->AddTickBlockEntity( this );
+ GetChunk()->AddTickBlockEntity( this );
return true;
}
}
@@ -317,9 +313,7 @@ bool cFurnaceEntity::LoadFromJson( const Json::Value& a_Value )
if( !Item.IsEmpty() )
{
m_CookingItem = new cItem( Item );
-
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkOfBlock( m_PosX, m_PosY, m_PosZ );
- Chunk->AddTickBlockEntity( this );
+ GetChunk()->AddTickBlockEntity( this );
}
}
diff --git a/source/cFurnaceEntity.h b/source/cFurnaceEntity.h
index a1ab051ba..86052d363 100644
--- a/source/cFurnaceEntity.h
+++ b/source/cFurnaceEntity.h
@@ -9,6 +9,7 @@ namespace Json
class Value;
}
+class cChunk;
class cClientHandle;
class cServer;
class cItem;
@@ -16,7 +17,7 @@ class cNBTData;
class cFurnaceEntity : public cBlockEntity, public cWindowOwner
{
public:
- cFurnaceEntity(int a_X, int a_Y, int a_Z);
+ cFurnaceEntity(int a_X, int a_Y, int a_Z, cChunk* a_Chunk);
virtual ~cFurnaceEntity();
virtual void Destroy();
diff --git a/source/cGhast.cpp b/source/cGhast.cpp
index 54c89a279..3189e5d63 100644
--- a/source/cGhast.cpp
+++ b/source/cGhast.cpp
@@ -48,12 +48,12 @@ void cGhast::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cMonster.cpp b/source/cMonster.cpp
index 63ef1d862..99a74a86f 100644
--- a/source/cMonster.cpp
+++ b/source/cMonster.cpp
@@ -103,7 +103,7 @@ void cMonster::SpawnOn( cClientHandle* a_Target )
//Spawn.m_MetaData[1] = 0x7f; // terminator
if( a_Target == 0 )
{
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
Chunk->Broadcast( Spawn );
}
else
@@ -166,7 +166,7 @@ void cMonster::Tick(float a_Dt)
{
Vector3f NormSpeed = m_Speed->NormalizeCopy();
Vector3f NextBlock = Vector3f( *m_Pos ) + NormSpeed;
- double NextHeight = (double)cRoot::Get()->GetWorld()->GetHeight( (int)NextBlock.x, (int)NextBlock.z );
+ double NextHeight = (double)GetWorld()->GetHeight( (int)NextBlock.x, (int)NextBlock.z );
if( NextHeight > m_Pos->y - 1.2 && NextHeight - m_Pos->y < 2.5 )
{
m_bOnGround = false;
@@ -230,7 +230,7 @@ void cMonster::Tick(float a_Dt)
void cMonster::ReplicateMovement()
{
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if( !InChunk ) return;
if(m_bDirtyOrientation && !m_bDirtyPosition)
@@ -288,7 +288,7 @@ void cMonster::HandlePhysics(float a_Dt)
{
if( m_bOnGround ) // check if it's still on the ground
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = GetWorld();
if( World->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z ) == E_BLOCK_AIR )
{
m_bOnGround = false;
@@ -313,7 +313,7 @@ void cMonster::HandlePhysics(float a_Dt)
if( m_Speed->SqrLength() > 0.f )
{
- cTracer Tracer( cRoot::Get()->GetWorld() );
+ cTracer Tracer( GetWorld() );
int Ret = Tracer.Trace( *m_Pos, *m_Speed, 2 );
if( Ret ) // Oh noez! we hit something
{
@@ -414,7 +414,7 @@ void cMonster::CheckEventSeePlayer() {
void cMonster::CheckEventLostPlayer() {
Vector3f pos;
- cTracer LineOfSight(cRoot::Get()->GetWorld() );
+ cTracer LineOfSight(GetWorld() );
//LOG("Checking if I lost my enemy");
if(m_Target != 0) {
@@ -464,7 +464,7 @@ void cMonster::InStateIdle(float a_Dt) {
{
m_Destination->x = (float)(m_Pos->x + Dist.x);
m_Destination->z = (float)(m_Pos->z + Dist.z);
- m_Destination->y = (float)cRoot::Get()->GetWorld()->GetHeight( (int)m_Destination->x, (int)m_Destination->z ) + 1.2f;
+ m_Destination->y = (float)GetWorld()->GetHeight( (int)m_Destination->x, (int)m_Destination->z ) + 1.2f;
MoveToPosition( *m_Destination );
}
}
@@ -473,8 +473,8 @@ void cMonster::InStateIdle(float a_Dt) {
//What to do if On fire
void cMonster::InStateBurning(float a_Dt) {
m_FireDamageInterval += a_Dt;
- char block = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
- char bblock = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
+ char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
+ char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
if(m_FireDamageInterval > 1) {
m_FireDamageInterval = 0;
@@ -490,7 +490,7 @@ void cMonster::InStateBurning(float a_Dt) {
if(m_BurnPeriod > 5) {
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
m_EMMetaState = NORMAL;
cPacket_Metadata md(NORMAL, GetUniqueID());
//md.m_UniqueID = GetUniqueID();
@@ -534,11 +534,11 @@ void cMonster::Attack(float a_Dt) {
}
//----Change Entity MetaData
void cMonster::CheckMetaDataBurn() {
- char block = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
- char bblock = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
+ char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
+ char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
if(m_bBurnable && m_EMMetaState != BURNING && (block == E_BLOCK_LAVA || block == E_BLOCK_STATIONARY_LAVA || block == E_BLOCK_FIRE
|| bblock == E_BLOCK_LAVA || bblock == E_BLOCK_STATIONARY_LAVA || bblock == E_BLOCK_FIRE)) {
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if(!InChunk)
return;
//printf("I should burn");
diff --git a/source/cPawn.cpp b/source/cPawn.cpp
index d9f2ec8b5..2c1471156 100644
--- a/source/cPawn.cpp
+++ b/source/cPawn.cpp
@@ -50,7 +50,7 @@ void cPawn::TakeDamage( int a_Damage, cEntity* a_Instigator )
cPacket_EntityStatus Status;
Status.m_UniqueID = GetUniqueID();
Status.m_Status = cPacket_EntityStatus::STATUS_TAKEDAMAGE;
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if( Chunk )
Chunk->Broadcast( Status );
@@ -70,7 +70,7 @@ void cPawn::KilledBy( cEntity* a_Killer )
cPacket_EntityStatus Status;
Status.m_UniqueID = GetUniqueID();
Status.m_Status = cPacket_EntityStatus::STATUS_DIE;
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if( Chunk )
Chunk->Broadcast( Status ); // Die
}
diff --git a/source/cPickup.cpp b/source/cPickup.cpp
index 585c1e32b..ba36077e0 100644
--- a/source/cPickup.cpp
+++ b/source/cPickup.cpp
@@ -130,7 +130,7 @@ void cPickup::Tick(float a_Dt)
MoveToCorrectChunk();
m_bReplicated = true;
m_bDirtyPosition = false;
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if( Chunk )
{
cPacket_TeleportEntity TeleportEntity( this );
@@ -145,7 +145,7 @@ void cPickup::HandlePhysics(float a_Dt)
{
if( m_bOnGround ) // check if it's still on the ground
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = GetWorld();
int BlockX = (int)m_Pos->x;
if( m_Pos->x < 0 ) BlockX--;
int BlockZ = (int)m_Pos->z;
@@ -172,7 +172,7 @@ void cPickup::HandlePhysics(float a_Dt)
float Gravity = -9.81f*a_Dt;
m_Speed->y += Gravity;
- cTracer Tracer( cRoot::Get()->GetWorld() );
+ cTracer Tracer( GetWorld() );
int Ret = Tracer.Trace( *m_Pos, *m_Speed, 2 );
if( Ret ) // Oh noez! we hit something
{
diff --git a/source/cPig.cpp b/source/cPig.cpp
index fa86949ab..424b2c53b 100644
--- a/source/cPig.cpp
+++ b/source/cPig.cpp
@@ -52,12 +52,12 @@ void cPig::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cPlayer.cpp b/source/cPlayer.cpp
index 2f7e27988..898bac54f 100644
--- a/source/cPlayer.cpp
+++ b/source/cPlayer.cpp
@@ -83,13 +83,13 @@ cPlayer::cPlayer(cClientHandle* a_Client, const char* a_PlayerName)
if( !LoadFromDisk() )
{
m_Inventory->Clear();
- SetPosX( cRoot::Get()->GetWorld()->GetSpawnX() );
+ SetPosX( cRoot::Get()->GetWorld()->GetSpawnX() ); // TODO - Get from the correct world?
SetPosY( cRoot::Get()->GetWorld()->GetSpawnY() );
SetPosZ( cRoot::Get()->GetWorld()->GetSpawnZ() );
}
- MoveToCorrectChunk();
- cRoot::Get()->GetWorld()->AddPlayer( this );
+ //MoveToCorrectChunk();
+ cRoot::Get()->GetWorld()->AddPlayer( this ); // TODO - Add to correct world? Or get rid of this?
}
cPlayer::~cPlayer(void)
@@ -103,7 +103,7 @@ cPlayer::~cPlayer(void)
m_Inventory = 0;
}
delete m_pState;
- cRoot::Get()->GetWorld()->RemovePlayer( this );
+ cRoot::Get()->GetWorld()->RemovePlayer( this ); // TODO - Remove from correct world? Or get rid of this?
}
void cPlayer::SpawnOn( cClientHandle* a_Target )
@@ -121,7 +121,7 @@ void cPlayer::SpawnOn( cClientHandle* a_Target )
SpawnPacket.m_CurrentItem = (short)m_Inventory->GetEquippedItem().m_ItemID;
if( a_Target == 0 )
{
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
Chunk->Broadcast( SpawnPacket, m_ClientHandle );
}
else
@@ -132,7 +132,7 @@ void cPlayer::SpawnOn( cClientHandle* a_Target )
void cPlayer::Tick(float a_Dt)
{
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
if(m_bDirtyOrientation && !m_bDirtyPosition)
{
cPacket_EntityLook EntityLook( this );
@@ -192,7 +192,7 @@ void cPlayer::Tick(float a_Dt)
m_TimeLastPickupCheck = cWorld::GetTime();
// and also check if near a pickup
// TODO: Don't only check in current chunks, but also close chunks (chunks within range)
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunk( m_ChunkX, m_ChunkY, m_ChunkZ );
Chunk->LockEntities();
cWorld::EntityList Entities = Chunk->GetEntities();
for( cWorld::EntityList::iterator itr = Entities.begin(); itr != Entities.end();++itr)
@@ -219,8 +219,8 @@ void cPlayer::Tick(float a_Dt)
void cPlayer::InStateBurning(float a_Dt) {
m_FireDamageInterval += a_Dt;
- char block = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
- char bblock = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
+ char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
+ char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
if(m_FireDamageInterval > 1000) {
m_FireDamageInterval = 0;
@@ -236,7 +236,7 @@ void cPlayer::InStateBurning(float a_Dt) {
if(m_BurnPeriod > 5) {
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
e_EPMetaState = NORMAL;
cPacket_Metadata md(NORMAL, GetUniqueID());
//md.m_UniqueID = GetUniqueID();
@@ -251,11 +251,11 @@ void cPlayer::InStateBurning(float a_Dt) {
//----Change Entity MetaData
void cPlayer::CheckMetaDataBurn() {
- char block = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
- char bblock = cRoot::Get()->GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
+ char block = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
+ char bblock = GetWorld()->GetBlock( (int)m_Pos->x, (int)m_Pos->y -1, (int)m_Pos->z );
if(m_bBurnable && e_EPMetaState != BURNING && (block == E_BLOCK_LAVA || block == E_BLOCK_STATIONARY_LAVA || block == E_BLOCK_FIRE
|| bblock == E_BLOCK_LAVA || bblock == E_BLOCK_STATIONARY_LAVA || bblock == E_BLOCK_FIRE)) {
- cChunk* InChunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* InChunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if(!InChunk)
return;
printf("I should burn");
@@ -271,7 +271,7 @@ void cPlayer::SetTouchGround( bool a_bTouchGround )
if( !m_bTouchGround )
{
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = GetWorld();
char BlockID = World->GetBlock( (int)m_Pos->x, (int)m_Pos->y, (int)m_Pos->z );
if( BlockID != E_BLOCK_AIR )
{
@@ -317,7 +317,7 @@ void cPlayer::Heal( int a_Health )
void cPlayer::TakeDamage( int a_Damage, cEntity* a_Instigator )
{
- if ( !(cRoot::Get()->GetWorld()->GetGameMode() == 1) ) {
+ if ( !(GetWorld()->GetGameMode() == 1) ) {
cPawn::TakeDamage( a_Damage, a_Instigator );
cPacket_UpdateHealth Health;
@@ -344,7 +344,7 @@ void cPlayer::KilledBy( cEntity* a_Killer )
float SpeedY = ((rand()%1000)) /100.f;
float SpeedZ = ((rand()%1000)-500) /100.f;
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), Items[i], SpeedX, SpeedY, SpeedZ );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
Items[i].Empty();
}
@@ -355,14 +355,13 @@ void cPlayer::Respawn()
{
m_Health = 20;
- cWorld* World = cRoot::Get()->GetWorld();
// Create Respawn player packet
cPacket_Respawn Packet;
//Set Gamemode for packet by looking at world's gamemode (Need to check players gamemode.)
- Packet.m_CreativeMode = cRoot::Get()->GetWorld()->GetGameMode();
+ Packet.m_CreativeMode = (char)GetWorld()->GetGameMode();
//Send Packet
m_ClientHandle->Send( Packet );
- TeleportTo( World->GetSpawnX(), World->GetSpawnY(), World->GetSpawnZ() );
+ TeleportTo( GetWorld()->GetSpawnX(), GetWorld()->GetSpawnY(), GetWorld()->GetSpawnZ() );
SetVisible( true );
}
@@ -428,7 +427,7 @@ void cPlayer::SetVisible( bool a_bVisible )
{
m_bVisible = false;
cPacket_DestroyEntity DestroyEntity( this );
- cChunk* Chunk = cRoot::Get()->GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
+ cChunk* Chunk = GetWorld()->GetChunkUnreliable( m_ChunkX, m_ChunkY, m_ChunkZ );
if( Chunk )
{
Chunk->Broadcast( DestroyEntity ); // Destroy on all clients
@@ -576,7 +575,7 @@ void cPlayer::TossItem( bool a_bDraggingItem, int a_Amount /* = 1 */ )
EulerToVector( -GetRotation(), GetPitch(), vZ, vX, vY );
vY = -vY*2 + 1.f;
cPickup* Pickup = new cPickup( (int)(GetPosX()*32), (int)(GetPosY()*32) + (int)(1.6f*32), (int)(GetPosZ()*32), cItem( Item->m_ItemID, (char)a_Amount, Item->m_ItemHealth), vX*2, vY*2, vZ*2 );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
if( Item->m_ItemCount > a_Amount )
Item->m_ItemCount -= (char)a_Amount;
else
@@ -597,7 +596,7 @@ void cPlayer::TossItem( bool a_bDraggingItem, int a_Amount /* = 1 */ )
EulerToVector( -GetRotation(), GetPitch(), vZ, vX, vY );
vY = -vY*2 + 1.f;
cPickup* Pickup = new cPickup( (int)(GetPosX()*32), (int)(GetPosY()*32) + (int)(1.6f*32), (int)(GetPosZ()*32), DroppedItem, vX*2, vY*2, vZ*2 );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
}
}
diff --git a/source/cServer.cpp b/source/cServer.cpp
index 511678939..8ea00a523 100644
--- a/source/cServer.cpp
+++ b/source/cServer.cpp
@@ -227,6 +227,7 @@ cServer::~cServer()
delete m_pState;
}
+// TODO - Need to modify this or something, so it broadcasts to all worlds? And move this to cWorld?
void cServer::Broadcast( const cPacket & a_Packet, cClientHandle* a_Exclude /* = 0 */ )
{
//m_World->LockClientHandle();
@@ -239,6 +240,7 @@ void cServer::Broadcast( const cPacket & a_Packet, cClientHandle* a_Exclude /* =
//m_World->UnlockClientHandle();
}
+// TODO - Need to move this to cWorld I think
void cServer::SendAllEntitiesTo(cClientHandle* a_Target)
{
cWorld* World = cRoot::Get()->GetWorld();
@@ -261,7 +263,7 @@ void cServer::StartListenClient()
LOG("%s connected!", ClientIP);
cClientHandle *NewHandle = new cClientHandle( SClient );
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = cRoot::Get()->GetWorld(); // TODO - I don't think the world cares for the client at this stage, besides for calling the tick function
World->LockClientHandle();
World->AddClient( NewHandle );
World->UnlockClientHandle();
@@ -282,7 +284,7 @@ bool cServer::Tick(float a_Dt)
m_Millisecondsf = m_Millisecondsf - (int)m_Millisecondsf;
}
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = cRoot::Get()->GetWorld(); // TODO - Iterate through all worlds, or give all worlds their own thread
World->Tick(a_Dt);
World->LockClientHandle();
@@ -440,7 +442,7 @@ void cServer::ServerCommand( const char* a_Cmd )
}
if( split[0].compare( "save-all" ) == 0 )
{
- cRoot::Get()->GetWorld()->SaveAllChunks();
+ cRoot::Get()->GetWorld()->SaveAllChunks(); // TODO - Force ALL worlds to save their chunks
return;
}
if( split[0].compare( "list" ) == 0 )
diff --git a/source/cSheep.cpp b/source/cSheep.cpp
index 98d17e4d4..2b3f93888 100644
--- a/source/cSheep.cpp
+++ b/source/cSheep.cpp
@@ -52,12 +52,12 @@ void cSheep::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cSignEntity.cpp b/source/cSignEntity.cpp
index 883da223e..2c82563f1 100644
--- a/source/cSignEntity.cpp
+++ b/source/cSignEntity.cpp
@@ -11,8 +11,8 @@
#include
-cSignEntity::cSignEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z)
- : cBlockEntity(a_BlockType, a_X, a_Y, a_Z)
+cSignEntity::cSignEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z, cChunk* a_Chunk)
+ : cBlockEntity(a_BlockType, a_X, a_Y, a_Z, a_Chunk)
{
}
@@ -65,9 +65,7 @@ void cSignEntity::SendTo( cClientHandle* a_Client )
if( a_Client ) a_Client->Send( Sign );
else // broadcast of a_Client == 0
{
- cWorld* World = cRoot::Get()->GetWorld();
- cChunk* Chunk = World->GetChunkOfBlock( m_PosX, m_PosY, m_PosZ );
- Chunk->Broadcast( Sign );
+ GetChunk()->Broadcast( Sign );
}
}
diff --git a/source/cSignEntity.h b/source/cSignEntity.h
index b704fdd3c..b0e95e38c 100644
--- a/source/cSignEntity.h
+++ b/source/cSignEntity.h
@@ -10,10 +10,11 @@ namespace Json
class Value;
}
+class cWorld;
class cSignEntity : public cBlockEntity
{
public:
- cSignEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z);
+ cSignEntity(ENUM_BLOCK_ID a_BlockType, int a_X, int a_Y, int a_Z, cChunk* a_Chunk);
virtual ~cSignEntity();
void WriteToFile(FILE* a_File);
diff --git a/source/cSilverfish.cpp b/source/cSilverfish.cpp
index 25a3befa6..c1ebb9558 100644
--- a/source/cSilverfish.cpp
+++ b/source/cSilverfish.cpp
@@ -48,12 +48,12 @@ void cSilverfish::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cSkeleton.cpp b/source/cSkeleton.cpp
index 84de27d7a..6cdb7b23b 100644
--- a/source/cSkeleton.cpp
+++ b/source/cSkeleton.cpp
@@ -41,7 +41,7 @@ bool cSkeleton::IsA( const char* a_EntityType )
void cSkeleton::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- if (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
+ if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
}
}
@@ -51,12 +51,12 @@ void cSkeleton::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cSlime.cpp b/source/cSlime.cpp
index c568ac78c..90729e169 100644
--- a/source/cSlime.cpp
+++ b/source/cSlime.cpp
@@ -48,12 +48,12 @@ void cSlime::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cSpider.cpp b/source/cSpider.cpp
index 00d63c409..7b7268e78 100644
--- a/source/cSpider.cpp
+++ b/source/cSpider.cpp
@@ -41,7 +41,7 @@ bool cSpider::IsA( const char* a_EntityType )
void cSpider::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- m_EMPersonality = (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) )? PASSIVE:AGGRESSIVE;
+ m_EMPersonality = (GetWorld()->GetWorldTime() < (12000 + 1000) )? PASSIVE:AGGRESSIVE;
}
void cSpider::KilledBy( cEntity* a_Killer )
@@ -49,12 +49,12 @@ void cSpider::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cSquid.cpp b/source/cSquid.cpp
index e528e7e95..2b519a5c7 100644
--- a/source/cSquid.cpp
+++ b/source/cSquid.cpp
@@ -52,12 +52,12 @@ void cSquid::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cWebAdmin.cpp b/source/cWebAdmin.cpp
index d6881c55f..03775ee3f 100644
--- a/source/cWebAdmin.cpp
+++ b/source/cWebAdmin.cpp
@@ -114,7 +114,7 @@ void cWebAdmin::Request_Handler(webserver::http_request* r)
Content += "
";
Content += "Players:
";
- cWorld* World = cRoot::Get()->GetWorld();
+ cWorld* World = cRoot::Get()->GetWorld(); // TODO - Create a list of worlds and players
cWorld::PlayerList PlayerList = World->GetAllPlayers();
for( cWorld::PlayerList::iterator itr = PlayerList.begin(); itr != PlayerList.end(); ++itr )
{
diff --git a/source/cWolf.cpp b/source/cWolf.cpp
index 5a2c14f83..f504d79df 100644
--- a/source/cWolf.cpp
+++ b/source/cWolf.cpp
@@ -48,12 +48,12 @@ void cWolf::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cWorld.cpp b/source/cWorld.cpp
index c5dfc683e..29115d15e 100644
--- a/source/cWorld.cpp
+++ b/source/cWorld.cpp
@@ -179,7 +179,7 @@ cWorld::cWorld()
m_SpawnMonsterRate = (float)IniFile2.GetValueF("Monsters", "AnimalSpawnInterval", 10 );
}
- m_ChunkMap = new cChunkMap( 32, 32 );
+ m_ChunkMap = new cChunkMap( 32, 32, this );
m_Time = 0;
m_WorldTimeFraction = 0.f;
@@ -388,7 +388,7 @@ void cWorld::Tick(float a_Dt)
if( Monster )
{
- Monster->Initialize();
+ Monster->Initialize( this );
Monster->TeleportTo( SpawnPos.x, (double)(Height)+2, SpawnPos.z );
Monster->SpawnOn( 0 );
}
@@ -475,7 +475,7 @@ cChunk* cWorld::GetChunk( int a_X, int a_Y, int a_Z )
}
// Found nothing, create a chunk
- Chunk = new cChunk( a_X, a_Y, a_Z );
+ Chunk = new cChunk( a_X, a_Y, a_Z, this );
if(Chunk)
{
LOGWARN("Created new chunk! %i %i", a_X, a_Z);
@@ -570,7 +570,7 @@ bool cWorld::DigBlock( int a_X, int a_Y, int a_Z, cItem & a_PickupItem )
if( !a_PickupItem.IsEmpty() )
{
cPickup* Pickup = new cPickup( a_X*32 + 16 + (int)fRadRand(16.f), a_Y*32 + 16 + (int)fRadRand(16.f), a_Z*32 + 16 + (int)fRadRand(16.f), a_PickupItem );
- Pickup->Initialize();
+ Pickup->Initialize( this );
}
}
diff --git a/source/cZombie.cpp b/source/cZombie.cpp
index 23953f274..10fb609bb 100644
--- a/source/cZombie.cpp
+++ b/source/cZombie.cpp
@@ -41,7 +41,7 @@ bool cZombie::IsA( const char* a_EntityType )
void cZombie::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- if (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
+ if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
}
}
@@ -51,12 +51,12 @@ void cZombie::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
diff --git a/source/cZombiepigman.cpp b/source/cZombiepigman.cpp
index 5ace226af..da550d3df 100644
--- a/source/cZombiepigman.cpp
+++ b/source/cZombiepigman.cpp
@@ -41,7 +41,7 @@ bool cZombiepigman::IsA( const char* a_EntityType )
void cZombiepigman::Tick(float a_Dt)
{
cMonster::Tick(a_Dt);
- if (cRoot::Get()->GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
+ if (GetWorld()->GetWorldTime() < (12000 + 1000) ) { //if daylight
m_EMMetaState = BURNING; // BURN, BABY, BURN! >:D
}
}
@@ -51,12 +51,12 @@ void cZombiepigman::KilledBy( cEntity* a_Killer )
if( (rand() % 5) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_EGG, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
if( (rand() % 1) == 0 )
{
cPickup* Pickup = new cPickup( (int)(m_Pos->x*32), (int)(m_Pos->y*32), (int)(m_Pos->z*32), cItem( E_ITEM_FEATHER, 1 ) );
- Pickup->Initialize();
+ Pickup->Initialize( GetWorld() );
}
cMonster::KilledBy( a_Killer );
}
--
cgit v1.2.3