From 3143d6ce679f322ee73d3d70e2d843e9c98cc043 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Wed, 19 Aug 2020 21:14:40 +0100 Subject: Remove std::make_unique from redstone handler creation --- .../IncrementalRedstoneSimulator/RedstoneHandler.h | 87 ++-------------------- 1 file changed, 8 insertions(+), 79 deletions(-) (limited to 'src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h') diff --git a/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h b/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h index 9b131ece2..5b3dcdeac 100644 --- a/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h +++ b/src/Simulator/IncrementalRedstoneSimulator/RedstoneHandler.h @@ -1,89 +1,18 @@ #pragma once -#include "../../Chunk.h" -#include "ForEachSourceCallback.h" #include "RedstoneSimulatorChunkData.h" +class cChunk; +class ForEachSourceCallback; - - - -class cRedstoneHandler +namespace RedstoneHandler { -public: - - cRedstoneHandler() = default; - DISALLOW_COPY_AND_ASSIGN(cRedstoneHandler); - - using SourceCallback = ForEachSourceCallback &; - - virtual unsigned char GetPowerDeliveredToPosition(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, Vector3i a_QueryPosition, BLOCKTYPE a_QueryBlockType, bool IsLinked) const = 0; - virtual void Update(cChunk & a_Chunk, cChunk & CurrentlyTicking, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, PoweringData a_PoweringData) const = 0; - virtual void ForValidSourcePositions(const cChunk & a_Chunk, Vector3i a_Position, BLOCKTYPE a_BlockType, NIBBLETYPE a_Meta, SourceCallback Callback) const = 0; - - // Force a virtual destructor - virtual ~cRedstoneHandler() {} - -protected: - - inline static auto & DataForChunk(const cChunk & a_Chunk) - { - return *static_cast(a_Chunk.GetRedstoneSimulatorData()); - } - - template - static void UpdateAdjustedRelative(const cChunk & From, const cChunk & To, const Vector3i Position, const Vector3i Offset) - { - DataForChunk(To).WakeUp(cIncrementalRedstoneSimulatorChunkData::RebaseRelativePosition(From, To, Position + Offset)); - - for (const auto LinkedOffset : cSimulator::GetLinkedOffsets(Offset)) - { - DataForChunk(To).WakeUp(cIncrementalRedstoneSimulatorChunkData::RebaseRelativePosition(From, To, Position + LinkedOffset)); - } - } - - template - static void UpdateAdjustedRelatives(const cChunk & From, const cChunk & To, const Vector3i Position, const ArrayType & Relative) - { - for (const auto Offset : Relative) - { - UpdateAdjustedRelative(From, To, Position, Offset); - } - } - - template - static void InvokeForAdjustedRelatives(SourceCallback Callback, const Vector3i Position, const ArrayType & Relative) - { - for (const auto Offset : Relative) - { - Callback(Position + Offset); - } - } - - inline static Vector3i OffsetYP{ 0, 1, 0 }; + unsigned char GetPowerDeliveredToPosition(const cChunk & Chunk, Vector3i Position, BLOCKTYPE BlockType, Vector3i QueryPosition, BLOCKTYPE QueryBlockType, bool IsLinked); - inline static Vector3i OffsetYM{ 0, -1, 0 }; + void Update(cChunk & Chunk, cChunk & CurrentlyTicking, Vector3i Position, BLOCKTYPE BlockType, NIBBLETYPE Meta, PoweringData PoweringData); - inline static std::array RelativeAdjacents - { - { - { 1, 0, 0 }, - { -1, 0, 0 }, - { 0, 1, 0 }, - { 0, -1, 0 }, - { 0, 0, 1 }, - { 0, 0, -1 }, - } - }; + void ForValidSourcePositions(const cChunk & Chunk, Vector3i Position, BLOCKTYPE BlockType, NIBBLETYPE Meta, ForEachSourceCallback & Callback); - inline static std::array RelativeLaterals - { - { - { 1, 0, 0 }, - { -1, 0, 0 }, - { 0, 0, 1 }, - { 0, 0, -1 }, - } - }; -}; + void SetWireState(const cChunk & Chunk, Vector3i Position); +} -- cgit v1.2.3