From d861518d2ed34aa13757791a690741f3d43f38ed Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 27 Jun 2022 23:33:51 +0200 Subject: [PATCH] Add origin updating for LargeWorlds --- Source/Engine/Level/Level.cpp | 3 +++ Source/Engine/Tests/TestLevel.cpp | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 Source/Engine/Tests/TestLevel.cpp diff --git a/Source/Engine/Level/Level.cpp b/Source/Engine/Level/Level.cpp index 0e35e9dac..983b814e1 100644 --- a/Source/Engine/Level/Level.cpp +++ b/Source/Engine/Level/Level.cpp @@ -50,6 +50,9 @@ void LargeWorlds::UpdateOrigin(Vector3& origin, const Vector3& position) { if (Enable) { + constexpr Real chunkSizeInv = 1.0 / ChunkSize; + constexpr Real chunkSizeHalf = ChunkSize * 0.5; + origin = Vector3(Int3((position - chunkSizeHalf) * chunkSizeInv)) * ChunkSize; } } diff --git a/Source/Engine/Tests/TestLevel.cpp b/Source/Engine/Tests/TestLevel.cpp new file mode 100644 index 000000000..830868a1d --- /dev/null +++ b/Source/Engine/Tests/TestLevel.cpp @@ -0,0 +1,18 @@ +// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved. + +#include "Engine/Core/Math/Vector3.h" +#include "Engine/Level/LargeWorlds.h" +#include + +TEST_CASE("LargeWorlds") +{ + SECTION("UpdateOrigin") + { + LargeWorlds::Enable = true; + Vector3 origin = Vector3::Zero; + LargeWorlds::UpdateOrigin(origin, Vector3::Zero); + CHECK(origin == Vector3::Zero); + LargeWorlds::UpdateOrigin(origin, Vector3(LargeWorlds::ChunkSize * 0.5, LargeWorlds::ChunkSize * 1.0001, LargeWorlds::ChunkSize * 1.5)); + CHECK(origin == Vector3(0, 0, LargeWorlds::ChunkSize * 1)); + } +}