Files
FlaxEngine/Source/Engine/Level/LargeWorlds.h
2024-02-26 19:00:48 +01:00

32 lines
1.5 KiB
C

// Copyright (c) 2012-2024 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Types/BaseTypes.h"
/// <summary>
/// The engine utility for large worlds support. Contains constants and tools for using 64-bit precision coordinates in various game systems (eg. scene rendering).
/// </summary>
API_CLASS(Static) class FLAXENGINE_API LargeWorlds
{
DECLARE_SCRIPTING_TYPE_MINIMAL(LargeWorlds);
/// <summary>
/// Enables large worlds usage in the engine. If true, scene rendering and other systems will use origin shifting to achieve higher precision in large worlds.
/// </summary>
API_FIELD() static bool Enable;
/// <summary>
/// Defines the size of a single chunk. Large world (64-bit) gets divided into smaller chunks so all the math operations (32-bit) can be performed relative to the chunk origin without precision loss.
/// </summary>
API_FIELD() static constexpr Real ChunkSize = 8192;
/// <summary>
/// Updates the large world origin to match the input position. The origin is snapped to the best matching chunk location.
/// </summary>
/// <param name="origin">The current origin of the large world. Gets updated with the input position.</param>
/// <param name="position">The current input position (eg. render view location or auto listener position).</param>
/// <remarks>Used only if LargeWorlds::Enabled is true.</remarks>
API_FUNCTION() static void UpdateOrigin(API_PARAM(Ref) Vector3& origin, const Vector3& position);
};