From a7e9f88ff3dba3b99b58d2bf9ed2350e6154d876 Mon Sep 17 00:00:00 2001 From: Aiden Neill Date: Fri, 18 Dec 2020 18:42:34 -0700 Subject: New pull request for daylight sensor (#5066) * Fixes #4918 Co-authored-by: Tiger Wang --- src/Blocks/BlockDaylightSensor.h | 54 ++++++++++++++++++++++++++++++++++++++++ src/Blocks/BlockHandler.cpp | 3 ++- src/Blocks/CMakeLists.txt | 1 + 3 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 src/Blocks/BlockDaylightSensor.h (limited to 'src/Blocks') diff --git a/src/Blocks/BlockDaylightSensor.h b/src/Blocks/BlockDaylightSensor.h new file mode 100644 index 000000000..3c8cfd0eb --- /dev/null +++ b/src/Blocks/BlockDaylightSensor.h @@ -0,0 +1,54 @@ + +#pragma once + +#include "BlockHandler.h" + + + + + +class cBlockDaylightSensorHandler final : + public cBlockHandler +{ + using Super = cBlockHandler; + +public: + + using Super::Super; + +private: + + virtual bool OnUse( + cChunkInterface & a_ChunkInterface, + cWorldInterface & a_WorldInterface, + cPlayer & a_Player, + const Vector3i a_BlockPos, + eBlockFace a_BlockFace, + const Vector3i a_CursorPos + ) const override + { + if (a_ChunkInterface.GetBlock(a_BlockPos) == E_BLOCK_DAYLIGHT_SENSOR) + { + a_ChunkInterface.SetBlock(a_BlockPos, E_BLOCK_INVERTED_DAYLIGHT_SENSOR, 0); + } + else + { + a_ChunkInterface.SetBlock(a_BlockPos, E_BLOCK_DAYLIGHT_SENSOR, 0); + } + + return true; + } + + + virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, const cEntity * a_Digger, const cItem * a_Tool) const override + { + // Always drop the regular daylight sensor: + return { E_BLOCK_DAYLIGHT_SENSOR }; + } + + + virtual bool IsUseable(void) const override + { + return true; + } +}; diff --git a/src/Blocks/BlockHandler.cpp b/src/Blocks/BlockHandler.cpp index 925c53cda..326f0de27 100644 --- a/src/Blocks/BlockHandler.cpp +++ b/src/Blocks/BlockHandler.cpp @@ -24,6 +24,7 @@ #include "BlockComparator.h" #include "BlockConcretePowder.h" #include "BlockCrops.h" +#include "BlockDaylightSensor.h" #include "BlockDeadBush.h" #include "BlockDefaultBlock.h" #include "BlockDirt.h" @@ -250,7 +251,7 @@ namespace constexpr cBlockFenceGateHandler BlockDarkOakFenceGateHandler (E_BLOCK_DARK_OAK_FENCE_GATE); constexpr cBlockFenceHandler BlockDarkOakFenceHandler (E_BLOCK_DARK_OAK_FENCE); constexpr cBlockStairsHandler BlockDarkOakWoodStairsHandler (E_BLOCK_DARK_OAK_WOOD_STAIRS); - constexpr cDefaultBlockHandler BlockDaylightSensorHandler (E_BLOCK_DAYLIGHT_SENSOR); + constexpr cBlockDaylightSensorHandler BlockDaylightSensorHandler (E_BLOCK_DAYLIGHT_SENSOR); constexpr cBlockDeadBushHandler BlockDeadBushHandler (E_BLOCK_DEAD_BUSH); constexpr cBlockRailHandler BlockDetectorRailHandler (E_BLOCK_DETECTOR_RAIL); constexpr cDefaultBlockHandler BlockDiamondBlockHandler (E_BLOCK_DIAMOND_BLOCK); diff --git a/src/Blocks/CMakeLists.txt b/src/Blocks/CMakeLists.txt index 57c4d07a7..7fb0237e3 100644 --- a/src/Blocks/CMakeLists.txt +++ b/src/Blocks/CMakeLists.txt @@ -26,6 +26,7 @@ target_sources( BlockComparator.h BlockConcretePowder.h BlockCrops.h + BlockDaylightSensor.h BlockDeadBush.h BlockDefaultBlock.h BlockDirt.h -- cgit v1.2.3