From a49c004278b0e300521e9cedf44a46ac843a958b Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Sat, 13 Apr 2013 21:02:10 +0000 Subject: Rewritten entities so that they are owned by individual chunks and ticked within their chunk's Tick() git-svn-id: http://mc-server.googlecode.com/svn/trunk@1385 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Chunk.h | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'source/Chunk.h') diff --git a/source/Chunk.h b/source/Chunk.h index a15a19466..09536f099 100644 --- a/source/Chunk.h +++ b/source/Chunk.h @@ -104,7 +104,6 @@ public: const NIBBLETYPE * a_BlockSkyLight, const cChunkDef::HeightMap * a_HeightMap, const cChunkDef::BiomeMap & a_BiomeMap, - cEntityList & a_Entities, cBlockEntityList & a_BlockEntities ); @@ -125,7 +124,7 @@ public: /// Sets or resets the internal flag that prevents chunk from being unloaded void Stay(bool a_Stay = true); - void Tick(float a_Dt, MTRand & a_TickRandom); + void Tick(float a_Dt); int GetPosX(void) const { return m_PosX; } int GetPosY(void) const { return m_PosY; } @@ -176,12 +175,16 @@ public: bool HasClient (cClientHandle* a_Client ); bool HasAnyClients(void); // Returns true if theres any client in the chunk; false otherwise - void AddEntity( cEntity * a_Entity); - void RemoveEntity( cEntity * a_Entity); + void AddEntity(cEntity * a_Entity); + void RemoveEntity(cEntity * a_Entity); + bool HasEntity(int a_EntityID); /// Calls the callback for each entity; returns true if all entities processed, false if the callback aborted by returning true bool ForEachEntity(cEntityCallback & a_Callback); // Lua-accessible + /// Calls the callback if the entity with the specified ID is found, with the entity object as the callback param. Returns true if entity found. + bool DoWithEntityByID(int a_EntityID, cEntityCallback & a_Callback, bool & a_CallbackResult); // Lua-accessible + /// Calls the callback for each chest; returns true if all chests processed, false if the callback aborted by returning true bool ForEachChest(cChestCallback & a_Callback); // Lua-accessible @@ -352,7 +355,8 @@ private: /// Checks the block scheduled for checking in m_ToTickBlocks[] void CheckBlocks(void); - void TickBlocks (MTRand & a_TickRandom); + /// Ticks several random blocks in the chunk + void TickBlocks(void); /// Adds snow to the top of snowy biomes and hydrates farmland / fills cauldrons in rainy biomes void ApplyWeatherToTop(void); @@ -368,6 +372,9 @@ private: /// Checks if a leaves block at the specified coords has a log up to 4 blocks away connected by other leaves blocks (false if no log) bool HasNearLog(cBlockArea & a_Area, int a_BlockX, int a_BlockY, int a_BlockZ); + + /// Called by Tick() when an entity moves out of this chunk into a neighbor; moves the entity and sends spawn / despawn packet to clients + void MoveEntityToNewChunk(cEntity * a_Entity); }; typedef cChunk * cChunkPtr; -- cgit v1.2.3