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 --- .../RedstoneDataHelper.h | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/Simulator/IncrementalRedstoneSimulator/RedstoneDataHelper.h (limited to 'src/Simulator/IncrementalRedstoneSimulator/RedstoneDataHelper.h') diff --git a/src/Simulator/IncrementalRedstoneSimulator/RedstoneDataHelper.h b/src/Simulator/IncrementalRedstoneSimulator/RedstoneDataHelper.h new file mode 100644 index 000000000..16d6924b1 --- /dev/null +++ b/src/Simulator/IncrementalRedstoneSimulator/RedstoneDataHelper.h @@ -0,0 +1,63 @@ +#pragma once + +#include "../../Chunk.h" + +inline auto & DataForChunk(const cChunk & a_Chunk) +{ + return *static_cast(a_Chunk.GetRedstoneSimulatorData()); +} + +template +inline 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 +inline 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 +inline void InvokeForAdjustedRelatives(ForEachSourceCallback & Callback, const Vector3i Position, const ArrayType & Relative) +{ + for (const auto Offset : Relative) + { + Callback(Position + Offset); + } +} + +inline constexpr Vector3i OffsetYP{ 0, 1, 0 }; + +inline constexpr Vector3i OffsetYM{ 0, -1, 0 }; + +inline constexpr std::array RelativeAdjacents +{ + { + { 1, 0, 0 }, + { -1, 0, 0 }, + { 0, 1, 0 }, + { 0, -1, 0 }, + { 0, 0, 1 }, + { 0, 0, -1 }, + } +}; + +inline constexpr std::array RelativeLaterals +{ + { + { 1, 0, 0 }, + { -1, 0, 0 }, + { 0, 0, 1 }, + { 0, 0, -1 }, + } +}; -- cgit v1.2.3