From 68cced73afe546328cf94ed07c57deee47bfadec Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sun, 20 Sep 2020 14:50:52 +0100 Subject: BlockHandler initialisation is a constant expression (#4891) * BlockHandler initialisation is a constant expression If we can't make it all namespaces, this is the next best I guess. + Tag handlers constexpr, const as needed + Inherit constructors * Privatise handler functions * More constexpr Co-authored-by: Alexander Harkness --- src/Blocks/BlockBed.h | 73 +++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 43 deletions(-) (limited to 'src/Blocks/BlockBed.h') diff --git a/src/Blocks/BlockBed.h b/src/Blocks/BlockBed.h index 0a5a0e300..aacd26e73 100644 --- a/src/Blocks/BlockBed.h +++ b/src/Blocks/BlockBed.h @@ -22,75 +22,62 @@ class cBlockBedHandler : public: - cBlockBedHandler(BLOCKTYPE a_BlockType): - Super(a_BlockType) + using Super::Super; + + static Vector3i MetaDataToDirection(NIBBLETYPE a_MetaData) { + switch (a_MetaData) + { + case 0: return Vector3i(0, 0, 1); + case 1: return Vector3i(-1, 0, 0); + case 2: return Vector3i(0, 0, -1); + case 3: return Vector3i(1, 0, 0); + } + return Vector3i(); } + static void SetBedOccupationState(cChunkInterface & a_ChunkInterface, Vector3i a_BedPosition, bool a_IsOccupied) + { + auto Meta = a_ChunkInterface.GetBlockMeta(a_BedPosition); + if (a_IsOccupied) + { + Meta |= 0x04; // Where 0x4 = occupied bit + } + else + { + Meta &= 0x0b; // Clear the "occupied" bit of the bed's block + } + a_ChunkInterface.SetBlockMeta(a_BedPosition, Meta); + } - +private: // Overrides: virtual void OnBroken( cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, const Vector3i a_BlockPos, BLOCKTYPE a_OldBlockType, NIBBLETYPE a_OldBlockMeta - ) override; + ) const override; virtual bool OnUse( cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, const Vector3i a_ClickedBlockPos, eBlockFace a_ClickedBlockFace, const Vector3i a_CursorPos - ) override; + ) const override; virtual cItems ConvertToPickups( NIBBLETYPE a_BlockMeta, cBlockEntity * a_BlockEntity, const cEntity * a_Digger, const cItem * a_Tool - ) override; + ) const override; virtual void OnPlacedByPlayer( cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, const sSetBlock & a_BlockChange - ) override; - - - - - - static Vector3i MetaDataToDirection(NIBBLETYPE a_MetaData) - { - switch (a_MetaData) - { - case 0: return Vector3i( 0, 0, 1); - case 1: return Vector3i(-1, 0, 0); - case 2: return Vector3i( 0, 0, -1); - case 3: return Vector3i( 1, 0, 0); - } - return Vector3i(); - } - - - - - - static void SetBedOccupationState(cChunkInterface & a_ChunkInterface, Vector3i a_BedPosition, bool a_IsOccupied) - { - auto Meta = a_ChunkInterface.GetBlockMeta(a_BedPosition); - if (a_IsOccupied) - { - Meta |= 0x04; // Where 0x4 = occupied bit - } - else - { - Meta &= 0x0b; // Clear the "occupied" bit of the bed's block - } - - a_ChunkInterface.SetBlockMeta(a_BedPosition, Meta); - } + ) const override; @@ -102,7 +89,7 @@ public: - virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override + virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) const override { UNUSED(a_Meta); return 28; -- cgit v1.2.3