UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LargeWorldCoordinatesSerializer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4#include "UObject/NameTypes.h"
7
8// Serialization helper for core variant types only. DO NOT USE!
9#define UE_SERIALIZE_VARIANT_FROM_MISMATCHED_TAG(AR_OR_SLOT, ALIAS, TYPE, ALT_TYPE) LWCSerializerPrivate::SerializeFromMismatchedTag<F##ALT_TYPE>(*this, StructTag, AR_OR_SLOT, NAME_##ALIAS, NAME_##TYPE, NAME_##ALT_TYPE)
11{
12
14inline bool IsPreLWC(const FStructuredArchive::FSlot& Slot) { return IsPreLWC(Slot.GetUnderlyingArchive()); }
15
16// SerializeFromMismatchedTag helper for core type use only. DO NOT USE!
17template<typename FAltType, typename FType, typename FArSlot>
18std::enable_if_t<std::is_floating_point_v<typename FType::FReal>, bool> SerializeFromMismatchedTag(FType& Target, FName StructTag, FArSlot& ArSlot, FName BaseTag, FName ThisTag, FName AltTag)
19{
21 {
22 // Note: relies on Serialize to handle float/double based on archive version.
23 return Target.Serialize(ArSlot);
24 }
25 else if(StructTag == AltTag || StructTag == BaseTag)
26 {
27 // Convert from alt type
28 FAltType AsAlt; // TODO: Could we derive this from FType?
29 const bool bResult = AsAlt.Serialize(ArSlot);
30 Target = static_cast<FType>(AsAlt); // LWC_TODO: Log precision loss warning for TIsUECoreVariant<FType, float>? Could get spammy.
31 return bResult;
32 }
33
34 return false;
35}
36
37// SerializeFromMismatchedTag helper for core type use only. DO NOT USE!
38template<typename FAltType, typename FType, typename FArSlot>
39std::enable_if_t<std::is_integral_v<typename FType::IntType>, bool> SerializeFromMismatchedTag(FType& Target, FName StructTag, FArSlot& ArSlot, FName BaseTag, FName ThisTag, FName AltTag)
40{
42 {
43 // Note: Unlike float types int retains a default of 32bits, so no conversion is necessary.
44 return Target.Serialize(ArSlot);
45 }
46 else if (StructTag == AltTag || StructTag == BaseTag)
47 {
48 // Convert from alt type
50 const bool bResult = AsAlt.Serialize(ArSlot);
51 Target = static_cast<FType>(AsAlt);
52 return bResult;
53 }
54
55 return false;
56}
57
58} // namespace LWCSerializerPrivate
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
Definition Archive.h:1208
UE_FORCEINLINE_HINT FPackageFileVersion UEVer() const
Definition Archive.h:204
Definition NameTypes.h:617
Definition StructuredArchiveSlots.h:52
CORE_API FArchive & GetUnderlyingArchive() const
Definition StructuredArchiveSlots.cpp:7
Definition LargeWorldCoordinatesSerializer.h:11
std::enable_if_t< std::is_floating_point_v< typename FType::FReal >, bool > SerializeFromMismatchedTag(FType &Target, FName StructTag, FArSlot &ArSlot, FName BaseTag, FName ThisTag, FName AltTag)
Definition LargeWorldCoordinatesSerializer.h:18
bool IsPreLWC(const FArchive &Ar)
Definition LargeWorldCoordinatesSerializer.h:13
Definition IsUECoreType.h:19