summaryrefslogtreecommitdiffstats
path: root/src/BlockInfo.h
diff options
context:
space:
mode:
authorMasy98 <masy@antheruscraft.de>2014-09-26 18:32:31 +0200
committerMasy98 <masy@antheruscraft.de>2014-09-26 18:32:31 +0200
commit2feee3b316bf5cad87f9b9540c6b49f1775ada6e (patch)
tree7e508a2cc3d2c8586327e8074337da537cbbad5f /src/BlockInfo.h
parentAdded slime block to slime balls recipe (diff)
parentFixed issue with casting (diff)
downloadcuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.gz
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.bz2
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.lz
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.xz
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.tar.zst
cuberite-2feee3b316bf5cad87f9b9540c6b49f1775ada6e.zip
Diffstat (limited to 'src/BlockInfo.h')
-rw-r--r--src/BlockInfo.h31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/BlockInfo.h b/src/BlockInfo.h
index 567070a7f..1e4cf2ca0 100644
--- a/src/BlockInfo.h
+++ b/src/BlockInfo.h
@@ -11,14 +11,27 @@ class cBlockHandler;
-
// tolua_begin
class cBlockInfo
{
public:
/** Returns the associated BlockInfo structure for the specified block type. */
- static cBlockInfo & Get(BLOCKTYPE a_Type);
+
+ /** This accessor makes sure that the cBlockInfo structures are properly initialized exactly once.
+ It does so by using the C++ singleton approximation - storing the actual singleton as the function's static variable.
+ It works only if it is called for the first time before the app spawns other threads. */
+ static cBlockInfo & Get(BLOCKTYPE a_Type)
+ {
+ static cBlockInfo ms_Info[256];
+ static bool IsBlockInfoInitialized = false;
+ if (!IsBlockInfoInitialized)
+ {
+ cBlockInfo::Initialize(ms_Info);
+ IsBlockInfoInitialized = true;
+ }
+ return ms_Info[a_Type];
+ }
/** How much light do the blocks emit on their own? */
@@ -78,7 +91,19 @@ protected:
typedef cBlockInfo cBlockInfoArray[256];
/** Creates a default BlockInfo structure, initializes all values to their defaults */
- cBlockInfo();
+ cBlockInfo()
+ : m_LightValue(0x00)
+ , m_SpreadLightFalloff(0x0f)
+ , m_Transparent(false)
+ , m_OneHitDig(false)
+ , m_PistonBreakable(false)
+ , m_IsSnowable(false)
+ , m_IsSolid(true)
+ , m_FullyOccupiesVoxel(false)
+ , m_CanBeTerraformed(false)
+ , m_PlaceSound("")
+ , m_Handler(NULL)
+ {}
/** Cleans up the stored values */
~cBlockInfo();