diff options
author | Tycho <work.tycho+git@gmail.com> | 2014-09-17 19:40:10 +0200 |
---|---|---|
committer | Tycho <work.tycho+git@gmail.com> | 2014-09-17 19:40:10 +0200 |
commit | 6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd (patch) | |
tree | 69681d2a6bd1f3572305f7120d9231b394ac9c88 /src/BlockInfo.h | |
parent | IncrementalRedstoneSimulator now has no dependencies on cChunk (diff) | |
download | cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar.gz cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar.bz2 cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar.lz cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar.xz cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.tar.zst cuberite-6e7c0e33b5dd6d86d66ac2eb1a07a33652a708fd.zip |
Diffstat (limited to 'src/BlockInfo.h')
-rw-r--r-- | src/BlockInfo.h | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/BlockInfo.h b/src/BlockInfo.h index 567070a7f..bfa62a132 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(); |