From 7a9925f982e43fcc1d798318905d83b5805b12cc Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Fri, 17 Feb 2012 18:24:34 +0000 Subject: Added the skeleton of the cLightingThread object git-svn-id: http://mc-server.googlecode.com/svn/trunk@286 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/LightingThread.h | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 source/LightingThread.h (limited to 'source/LightingThread.h') diff --git a/source/LightingThread.h b/source/LightingThread.h new file mode 100644 index 000000000..5b60d34bf --- /dev/null +++ b/source/LightingThread.h @@ -0,0 +1,82 @@ + +// LightingThread.h + +// Interfaces to the cLightingThread class representing the thread that processes requests for lighting +// Note that the world generators need direct access to the lighting methods so that they can light the generated chunk + + + + +#pragma once + +#include "cIsThread.h" + + + + + +// fwd: +class cWorld; + + + + + +class cLightingThread : + public cIsThread +{ + typedef cIsThread super; + +public: + + class cLightingBuffer + { + public: + cLightingBuffer(int m_MinX, int m_MaxX, int m_MinY, int m_MaxY, int m_MinZ, int m_MaxZ); + + /// Copies the world's existing chunks into m_BlockData, m_Skylight and m_BlockLight + void GetFromWorld(cWorld * a_World); + void SetToWorld (cWorld * a_World); + + void Process(void); // Does the actual lighting on this buffer + + protected: + + // Block coords: + int m_MinX, m_MaxX; + int m_MinY, m_MaxY; + int m_MinZ, m_MaxZ; + + int m_StrideX; // = OffsetOfBlock(x, y, z) - OffsetOfBlock(x + 1, y, z) + int m_StrideZ; // = OffsetOfBlock(x, y, z) - OffsetOfBlock(x, y, z + 1) + + // These buffers actually store 1 block in each direction more than is specified in the coords + // This way we can throw out a lot of conditions inside the processing cycles + // And it allows us to light a chunk with regard to its surrounding chunks without much work + // (So if m_MinX is 16 and m_MaxX is 32, the buffers actually contain data for X in range from 15 to 33 (18 items) + char * m_BlockData; + char * m_SkyLight; + char * m_BlockLight; + } ; + + cLightingThread(void); + ~cLightingThread(); + + void Stop(void); + + void QueueLighting(cWorld * a_World, int a_MinX, int a_MaxX, int a_MinY, int a_MaxY, int a_MinZ, int a_MaxZ); // queues the request + +protected: + + typedef std::list cLightingBufferQueue; + + cCriticalSection m_CS; + cLightingBufferQueue m_Queue; + cEvent m_Event; // Set when queue is appended or to stop the thread + + virtual void Execute(void) override; +} ; + + + + -- cgit v1.2.3