From 221cc4ec5cb6301743e947eaabed3fecedba796f Mon Sep 17 00:00:00 2001 From: Mattes D Date: Wed, 16 Oct 2019 10:06:34 +0200 Subject: Refactored block-to-pickup conversion. (#4417) --- src/Blocks/BlockBed.h | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) (limited to 'src/Blocks/BlockBed.h') diff --git a/src/Blocks/BlockBed.h b/src/Blocks/BlockBed.h index c66542e7d..585067ce2 100644 --- a/src/Blocks/BlockBed.h +++ b/src/Blocks/BlockBed.h @@ -4,7 +4,7 @@ #pragma once #include "BlockEntity.h" -#include "MetaRotator.h" +#include "Mixins.h" #include "ChunkInterface.h" @@ -18,24 +18,28 @@ class cWorldInterface; class cBlockBedHandler : public cMetaRotator { + using super = cMetaRotator; + public: - cBlockBedHandler(BLOCKTYPE a_BlockType) - : cMetaRotator(a_BlockType) + + cBlockBedHandler(BLOCKTYPE a_BlockType): + super(a_BlockType) { } - virtual void OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ) override; + + + + // Overrides: + virtual void OnBroken(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, Vector3i a_BlockPos, BLOCKTYPE a_OldBlockType, NIBBLETYPE a_OldBlockMeta) override; virtual bool OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override; + virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, cBlockEntity * a_BlockEntity, const cEntity * a_Digger, const cItem * a_Tool) override; + virtual void OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, const sSetBlock & a_BlockChange) override; + - virtual bool IsUseable(void) override - { - return true; - } - virtual void ConvertToPickups(cItems & Pickups, NIBBLETYPE Meta) override {} - virtual void ConvertToPickups(cWorldInterface & a_WorldInterface, cItems & a_Pickups, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ) override; // Bed specific helper functions static NIBBLETYPE RotationToMetaData(double a_Rotation) @@ -51,18 +55,26 @@ public: return (static_cast(a_Rotation + 2)) % 4; } + + + + 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); + 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, const Vector3i & a_BedPosition, bool a_IsOccupied) { auto Meta = a_ChunkInterface.GetBlockMeta(a_BedPosition); @@ -78,7 +90,9 @@ public: a_ChunkInterface.SetBlockMeta(a_BedPosition.x, a_BedPosition.y, a_BedPosition.z, Meta); } - virtual void OnPlacedByPlayer(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, const sSetBlock & a_BlockChange) override; + + + virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override { -- cgit v1.2.3