Add serialization of game settings for proper upgrade when loading deprecated data

This commit is contained in:
Wojtek Figat
2025-01-20 23:47:51 +01:00
parent 8a7ceef288
commit d4a5c76c82
12 changed files with 113 additions and 19 deletions

View File

@@ -42,6 +42,14 @@ public:
};
IMPLEMENT_ENGINE_SETTINGS_GETTER(BuildSettings, GameCooking);
#include "Engine/Content/Deprecated.h"
void GraphicsSettings::SetUeeHDRProbes(bool value)
{
MARK_CONTENT_DEPRECATED();
UseHDRProbes = value;
}
IMPLEMENT_ENGINE_SETTINGS_GETTER(GraphicsSettings, Graphics);
IMPLEMENT_ENGINE_SETTINGS_GETTER(NetworkSettings, Network);
IMPLEMENT_ENGINE_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags);
@@ -260,6 +268,27 @@ void GameSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* mo
DESERIALIZE(iOSPlatform);
}
#if USE_EDITOR
void LayersAndTagsSettings::Serialize(SerializeStream& stream, const void* otherObj)
{
SERIALIZE_GET_OTHER_OBJ(LayersAndTagsSettings);
stream.JKEY("Tags");
stream.StartArray();
for (const String& e : Tags)
stream.String(e);
stream.EndArray();
stream.JKEY("Layers");
stream.StartArray();
for (const String& e : Layers)
stream.String(e);
stream.EndArray();
}
#endif
void LayersAndTagsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
{
const auto tags = stream.FindMember("Tags");
@@ -280,7 +309,7 @@ void LayersAndTagsSettings::Deserialize(DeserializeStream& stream, ISerializeMod
if (layers != stream.MemberEnd() && layers->value.IsArray())
{
auto& layersArray = layers->value;
for (uint32 i = 0; i < layersArray.Size() && i < 32; i++)
for (uint32 i = 0; i < layersArray.Size() && i < ARRAY_COUNT(Layers); i++)
{
auto& v = layersArray[i];
if (v.IsString())
@@ -288,7 +317,7 @@ void LayersAndTagsSettings::Deserialize(DeserializeStream& stream, ISerializeMod
else
Layers[i].Clear();
}
for (uint32 i = layersArray.Size(); i < 32; i++)
for (uint32 i = layersArray.Size(); i < ARRAY_COUNT(Layers); i++)
{
Layers[i].Clear();
}

View File

@@ -145,15 +145,12 @@ private:
/// Renamed UeeHDRProbes into UseHDRProbes
/// [Deprecated on 12.10.2022, expires on 12.10.2024]
/// </summary>
API_PROPERTY(Attributes="Serialize, Obsolete, NoUndo") bool GetUeeHDRProbes() const
API_PROPERTY(Attributes="Serialize, Obsolete, NoUndo") DEPRECATED("Use UseHDRProbes instead.") bool GetUeeHDRProbes() const
{
return UseHDRProbes;
}
API_PROPERTY(Attributes="Serialize, Obsolete, NoUndo") void SetUeeHDRProbes(bool value)
{
UseHDRProbes = value;
}
API_PROPERTY(Attributes="Serialize, Obsolete, NoUndo") DEPRECATED("Use UseHDRProbes instead.") void SetUeeHDRProbes(bool value);
public:
/// <summary>

View File

@@ -32,5 +32,8 @@ public:
// [SettingsBase]
void Apply() override;
#if USE_EDITOR
void Serialize(SerializeStream& stream, const void* otherObj) override;
#endif
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
};

View File

@@ -5,7 +5,6 @@
#include "Keyboard.h"
#include "Mouse.h"
#include "Gamepad.h"
#include "FlaxEngine.Gen.h"
#include "Engine/Platform/Window.h"
#include "Engine/Engine/Engine.h"
#include "Engine/Engine/EngineService.h"

View File

@@ -80,6 +80,17 @@ void LocalizationSettings::Apply()
Instance.OnLocalizationChanged();
}
#if USE_EDITOR
void LocalizationSettings::Serialize(SerializeStream& stream, const void* otherObj)
{
SERIALIZE_GET_OTHER_OBJ(LocalizationSettings);
SERIALIZE(LocalizedStringTables);
SERIALIZE(DefaultFallbackLanguage);
}
#endif
void LocalizationSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
{
DESERIALIZE(LocalizedStringTables);

View File

@@ -34,5 +34,8 @@ public:
// [SettingsBase]
void Apply() override;
#if USE_EDITOR
void Serialize(SerializeStream& stream, const void* otherObj) override;
#endif
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
};

View File

@@ -235,6 +235,28 @@ void NavigationSettings::Apply()
#endif
}
#if USE_EDITOR
void NavigationSettings::Serialize(SerializeStream& stream, const void* otherObj)
{
SERIALIZE_GET_OTHER_OBJ(NavigationSettings);
SERIALIZE(AutoAddMissingNavMeshes);
SERIALIZE(AutoRemoveMissingNavMeshes);
SERIALIZE(CellHeight);
SERIALIZE(CellSize);
SERIALIZE(TileSize);
SERIALIZE(MinRegionArea);
SERIALIZE(MergeRegionArea);
SERIALIZE(MaxEdgeLen);
SERIALIZE(MaxEdgeError);
SERIALIZE(DetailSamplingDist);
SERIALIZE(MaxDetailSamplingError);
SERIALIZE(NavMeshes);
SERIALIZE(NavAreas);
}
#endif
void NavigationSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
{
DESERIALIZE(AutoAddMissingNavMeshes);

View File

@@ -104,5 +104,8 @@ public:
// [SettingsBase]
void Apply() override;
#if USE_EDITOR
void Serialize(SerializeStream& stream, const void* otherObj) override;
#endif
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
};

View File

@@ -49,6 +49,36 @@ PhysicsSettings::PhysicsSettings()
LayerMasks[i] = MAX_uint32;
}
#if USE_EDITOR
void PhysicsSettings::Serialize(SerializeStream& stream, const void* otherObj)
{
SERIALIZE_GET_OTHER_OBJ(PhysicsSettings);
SERIALIZE(DefaultGravity);
SERIALIZE(TriangleMeshTriangleMinAreaThreshold);
SERIALIZE(BounceThresholdVelocity);
SERIALIZE(FrictionCombineMode);
SERIALIZE(RestitutionCombineMode);
SERIALIZE(DisableCCD);
SERIALIZE(BroadPhaseType);
SERIALIZE(SolverType);
SERIALIZE(MaxDeltaTime);
SERIALIZE(EnableSubstepping);
SERIALIZE(SubstepDeltaTime);
SERIALIZE(MaxSubsteps);
SERIALIZE(QueriesHitTriggers);
SERIALIZE(SupportCookingAtRuntime);
stream.JKEY("LayerMasks");
stream.StartArray();
for (uint32 e : LayerMasks)
stream.Uint(e);
stream.EndArray();
}
#endif
void PhysicsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
{
DESERIALIZE(DefaultGravity);
@@ -71,7 +101,7 @@ void PhysicsSettings::Deserialize(DeserializeStream& stream, ISerializeModifier*
{
auto& layersArray = layers->value;
ASSERT(layersArray.IsArray());
for (uint32 i = 0; i < layersArray.Size() && i < 32; i++)
for (uint32 i = 0; i < layersArray.Size() && i < ARRAY_COUNT(LayerMasks); i++)
{
LayerMasks[i] = layersArray[i].GetUint();
}

View File

@@ -143,7 +143,7 @@ public:
float TriangleMeshTriangleMinAreaThreshold = 5.0f;
/// <summary>
/// If enabled, any Raycast or other scene query that intersects with a Collider marked as a Trigger will returns with a hit. Individual raycasts can override this behavior.
/// If enabled, any Raycast or other scene query that intersects with a Collider marked as a Trigger will return with a hit. Individual raycasts can override this behavior.
/// </summary>
API_FIELD(Attributes="EditorOrder(1200), EditorDisplay(\"Other\")")
bool QueriesHitTriggers = true;
@@ -166,5 +166,8 @@ public:
// [SettingsBase]
void Apply() override;
#if USE_EDITOR
void Serialize(SerializeStream& stream, const void* otherObj) override;
#endif
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
};

View File

@@ -60,11 +60,6 @@ void StreamingSettings::Apply()
TextureGroupSamplers.Resize(TextureGroups.Count(), false);
}
void StreamingSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
{
DESERIALIZE(TextureGroups);
}
StreamableResource::StreamableResource(StreamingGroup* group)
: _group(group)
, _isDynamic(true)

View File

@@ -10,9 +10,10 @@
/// </summary>
API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings", NoConstructor) class FLAXENGINE_API StreamingSettings : public SettingsBase
{
DECLARE_SCRIPTING_TYPE_MINIMAL(StreamingSettings);
public:
DECLARE_SCRIPTING_TYPE_MINIMAL(StreamingSettings);
API_AUTO_SERIALIZATION();
public:
/// <summary>
/// Textures streaming configuration (per-group).
/// </summary>
@@ -20,7 +21,6 @@ public:
Array<TextureGroup, InlinedAllocation<32>> TextureGroups;
public:
/// <summary>
/// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use.
/// </summary>
@@ -28,5 +28,4 @@ public:
// [SettingsBase]
void Apply() override;
void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override;
};