summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpeterbell10 <peterbell10@live.co.uk>2017-09-22 18:16:47 +0200
committerMattes D <github@xoft.cz>2017-10-21 19:33:22 +0200
commitc54bf40ef96806bf836db205f79e60d016b7eee9 (patch)
tree935dc6f8f18d86f21e6309947d4d09254f4c632a
parentcWorld: Move Initialization from Start to the constructor. (diff)
downloadcuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar.gz
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar.bz2
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar.lz
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar.xz
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.tar.zst
cuberite-c54bf40ef96806bf836db205f79e60d016b7eee9.zip
-rw-r--r--src/LightingThread.cpp26
-rw-r--r--src/LightingThread.h6
-rw-r--r--src/World.cpp6
-rw-r--r--src/World.h2
-rw-r--r--src/WorldStorage/WorldStorage.cpp6
-rw-r--r--src/WorldStorage/WorldStorage.h3
6 files changed, 17 insertions, 32 deletions
diff --git a/src/LightingThread.cpp b/src/LightingThread.cpp
index 302a7ba01..39b22f748 100644
--- a/src/LightingThread.cpp
+++ b/src/LightingThread.cpp
@@ -88,9 +88,9 @@ public:
////////////////////////////////////////////////////////////////////////////////
// cLightingThread:
-cLightingThread::cLightingThread(void) :
+cLightingThread::cLightingThread(cWorld & a_World):
super("cLightingThread"),
- m_World(nullptr),
+ m_World(a_World),
m_MaxHeight(0),
m_NumSeeds(0)
{
@@ -109,18 +109,6 @@ cLightingThread::~cLightingThread()
-bool cLightingThread::Start(cWorld * a_World)
-{
- ASSERT(m_World == nullptr); // Not started yet
- m_World = a_World;
-
- return super::Start();
-}
-
-
-
-
-
void cLightingThread::Stop(void)
{
{
@@ -150,8 +138,6 @@ void cLightingThread::Stop(void)
void cLightingThread::QueueChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_CallbackAfter)
{
- ASSERT(m_World != nullptr); // Did you call Start() properly?
-
cChunkStay * ChunkStay = new cLightingChunkStay(*this, a_ChunkX, a_ChunkZ, std::move(a_CallbackAfter));
{
// The ChunkStay will enqueue itself using the QueueChunkStay() once it is fully loaded
@@ -159,7 +145,7 @@ void cLightingThread::QueueChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr<cCh
cCSLock Lock(m_CS);
m_PendingQueue.push_back(ChunkStay);
}
- ChunkStay->Enable(*m_World->GetChunkMap());
+ ChunkStay->Enable(*m_World.GetChunkMap());
}
@@ -238,7 +224,7 @@ void cLightingThread::Execute(void)
void cLightingThread::LightChunk(cLightingChunkStay & a_Item)
{
// If the chunk is already lit, skip it (report as success):
- if (m_World->IsChunkLighted(a_Item.m_ChunkX, a_Item.m_ChunkZ))
+ if (m_World.IsChunkLighted(a_Item.m_ChunkX, a_Item.m_ChunkZ))
{
if (a_Item.m_CallbackAfter != nullptr)
{
@@ -319,7 +305,7 @@ void cLightingThread::LightChunk(cLightingChunkStay & a_Item)
CompressLight(m_BlockLight, BlockLight);
CompressLight(m_SkyLight, SkyLight);
- m_World->ChunkLighted(a_Item.m_ChunkX, a_Item.m_ChunkZ, BlockLight, SkyLight);
+ m_World.ChunkLighted(a_Item.m_ChunkX, a_Item.m_ChunkZ, BlockLight, SkyLight);
if (a_Item.m_CallbackAfter != nullptr)
{
@@ -341,7 +327,7 @@ void cLightingThread::ReadChunks(int a_ChunkX, int a_ChunkZ)
for (int x = 0; x < 3; x++)
{
Reader.m_ReadingChunkX = x;
- VERIFY(m_World->GetChunkData(a_ChunkX + x - 1, a_ChunkZ + z - 1, Reader));
+ VERIFY(m_World.GetChunkData(a_ChunkX + x - 1, a_ChunkZ + z - 1, Reader));
} // for z
} // for x
diff --git a/src/LightingThread.h b/src/LightingThread.h
index 0208848f6..6c27ff7ba 100644
--- a/src/LightingThread.h
+++ b/src/LightingThread.h
@@ -52,11 +52,9 @@ class cLightingThread :
public:
- cLightingThread(void);
+ cLightingThread(cWorld & a_World);
virtual ~cLightingThread() override;
- bool Start(cWorld * a_World);
-
void Stop(void);
/** Queues the entire chunk for lighting.
@@ -94,7 +92,7 @@ protected:
typedef std::list<cChunkStay *> cChunkStays;
- cWorld * m_World;
+ cWorld & m_World;
/** The mutex to protect m_Queue and m_PendingQueue */
cCriticalSection m_CS;
diff --git a/src/World.cpp b/src/World.cpp
index d86329395..4dd9cbc86 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -196,6 +196,7 @@ cWorld::cWorld(
m_MapManager(this),
m_GeneratorCallbacks(*this),
m_ChunkSender(*this),
+ m_Lighting(*this),
m_TickThread(*this)
{
LOGD("cWorld::cWorld(\"%s\")", a_WorldName.c_str());
@@ -405,6 +406,7 @@ cWorld::cWorld(
m_SimulatorManager->RegisterSimulator(m_SandSimulator.get(), 1);
m_SimulatorManager->RegisterSimulator(m_FireSimulator.get(), 1);
+ m_Storage.Initialize(*this, m_StorageSchema, m_StorageCompressionFactor);
m_Generator.Initialize(m_GeneratorCallbacks, m_GeneratorCallbacks, IniFile);
m_MapManager.LoadMapData();
@@ -607,8 +609,8 @@ void cWorld::InitializeSpawn(void)
void cWorld::Start()
{
- m_Lighting.Start(this);
- m_Storage.Start(this, m_StorageSchema, m_StorageCompressionFactor);
+ m_Lighting.Start();
+ m_Storage.Start();
m_Generator.Start();
m_ChunkSender.Start();
m_TickThread.Start();
diff --git a/src/World.h b/src/World.h
index 5b26ec197..d76f4c258 100644
--- a/src/World.h
+++ b/src/World.h
@@ -962,7 +962,7 @@ private:
cCriticalSection m_CSPlayers;
cPlayerList m_Players;
- cWorldStorage m_Storage;
+ cWorldStorage m_Storage;
unsigned int m_MaxPlayers;
diff --git a/src/WorldStorage/WorldStorage.cpp b/src/WorldStorage/WorldStorage.cpp
index 29fe78d4f..7be710c29 100644
--- a/src/WorldStorage/WorldStorage.cpp
+++ b/src/WorldStorage/WorldStorage.cpp
@@ -60,13 +60,11 @@ cWorldStorage::~cWorldStorage()
-bool cWorldStorage::Start(cWorld * a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor)
+void cWorldStorage::Initialize(cWorld & a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor)
{
- m_World = a_World;
+ m_World = &a_World;
m_StorageSchemaName = a_StorageSchemaName;
InitSchemas(a_StorageCompressionFactor);
-
- return super::Start();
}
diff --git a/src/WorldStorage/WorldStorage.h b/src/WorldStorage/WorldStorage.h
index 5b8a1b8ba..a7d3bb1d4 100644
--- a/src/WorldStorage/WorldStorage.h
+++ b/src/WorldStorage/WorldStorage.h
@@ -69,7 +69,8 @@ public:
The callback, if specified, will be called with the result of the save operation. */
void QueueSaveChunk(int a_ChunkX, int a_ChunkZ, cChunkCoordCallback * a_Callback = nullptr);
- bool Start(cWorld * a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor); // Hide the cIsThread's Start() method, we need to provide args
+ /** Initializes the storage schemas, ready to be started. */
+ void Initialize(cWorld & a_World, const AString & a_StorageSchemaName, int a_StorageCompressionFactor);
void Stop(void); // Hide the cIsThread's Stop() method, we need to signal the event
void WaitForFinish(void);
void WaitForLoadQueueEmpty(void);