From 53bd576adebd1994dd59271e0a81b0c951215606 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Wed, 28 Feb 2024 02:05:26 +0100 Subject: [PATCH] Fix game settings serialization bug --- Source/Engine/Audio/AudioSettings.h | 10 +--------- Source/Engine/Core/Config/BuildSettings.h | 19 +------------------ Source/Engine/Core/Config/GameSettings.cpp | 1 + Source/Engine/Core/Config/GameSettings.h | 6 ++---- .../Engine/Core/Config/LayersTagsSettings.h | 5 ++--- Source/Engine/Core/Config/TimeSettings.h | 7 +++---- Source/Engine/Engine/Time.cpp | 9 --------- Source/Engine/Input/InputSettings.h | 1 + .../Localization/LocalizationSettings.h | 1 + Source/Engine/Navigation/NavigationSettings.h | 1 + Source/Engine/Networking/NetworkSettings.h | 3 ++- Source/Engine/Physics/PhysicsSettings.h | 1 + 12 files changed, 16 insertions(+), 48 deletions(-) diff --git a/Source/Engine/Audio/AudioSettings.h b/Source/Engine/Audio/AudioSettings.h index f4f901b97..edff00390 100644 --- a/Source/Engine/Audio/AudioSettings.h +++ b/Source/Engine/Audio/AudioSettings.h @@ -3,7 +3,6 @@ #pragma once #include "Engine/Core/Config/Settings.h" -#include "Engine/Serialization/Serialization.h" /// /// Audio settings container. @@ -11,6 +10,7 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API AudioSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(AudioSettings); + API_AUTO_SERIALIZATION(); public: /// @@ -46,12 +46,4 @@ public: // [SettingsBase] void Apply() override; - - void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override - { - DESERIALIZE(DisableAudio); - DESERIALIZE(DopplerFactor); - DESERIALIZE(MuteOnFocusLoss); - DESERIALIZE(EnableHRTF); - } }; diff --git a/Source/Engine/Core/Config/BuildSettings.h b/Source/Engine/Core/Config/BuildSettings.h index 075fd926f..86bc9571f 100644 --- a/Source/Engine/Core/Config/BuildSettings.h +++ b/Source/Engine/Core/Config/BuildSettings.h @@ -3,7 +3,6 @@ #pragma once #include "Engine/Core/Config/Settings.h" -#include "Engine/Serialization/Serialization.h" #include "Engine/Core/Collections/Array.h" #include "Engine/Content/Asset.h" #include "Engine/Content/AssetReference.h" @@ -15,6 +14,7 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API BuildSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(BuildSettings); + API_AUTO_SERIALIZATION(); public: /// @@ -106,21 +106,4 @@ public: /// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use. /// static BuildSettings* Get(); - - // [SettingsBase] - void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override - { - DESERIALIZE(MaxAssetsPerPackage); - DESERIALIZE(MaxPackageSizeMB); - DESERIALIZE(ContentKey); - DESERIALIZE(ForDistribution); - DESERIALIZE(SkipPackaging); - DESERIALIZE(AdditionalAssets); - DESERIALIZE(AdditionalAssetFolders); - DESERIALIZE(ShadersNoOptimize); - DESERIALIZE(ShadersGenerateDebugData); - DESERIALIZE(SkipDefaultFonts); - DESERIALIZE(SkipDotnetPackaging); - DESERIALIZE(SkipUnusedDotnetLibsPackaging); - } }; diff --git a/Source/Engine/Core/Config/GameSettings.cpp b/Source/Engine/Core/Config/GameSettings.cpp index 76fb0f437..11617612f 100644 --- a/Source/Engine/Core/Config/GameSettings.cpp +++ b/Source/Engine/Core/Config/GameSettings.cpp @@ -22,6 +22,7 @@ #include "Engine/Engine/Globals.h" #include "Engine/Profiler/ProfilerCPU.h" #include "Engine/Streaming/StreamingSettings.h" +#include "Engine/Serialization/Serialization.h" #if FLAX_TESTS || USE_EDITOR #include "Engine/Platform/FileSystem.h" #endif diff --git a/Source/Engine/Core/Config/GameSettings.h b/Source/Engine/Core/Config/GameSettings.h index d28dcaa56..59e504b6b 100644 --- a/Source/Engine/Core/Config/GameSettings.h +++ b/Source/Engine/Core/Config/GameSettings.h @@ -12,9 +12,9 @@ /// API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API GameSettings : public SettingsBase { -DECLARE_SCRIPTING_TYPE_MINIMAL(GameSettings); -public: + DECLARE_SCRIPTING_TYPE_MINIMAL(GameSettings); +public: /// /// The product full name. /// @@ -59,7 +59,6 @@ public: Dictionary CustomSettings; public: - // Settings containers Guid Time; Guid Audio; @@ -87,7 +86,6 @@ public: Guid iOSPlatform; public: - /// /// Gets the instance of the game settings asset (null if missing). Object returned by this method is always loaded with valid data to use. /// diff --git a/Source/Engine/Core/Config/LayersTagsSettings.h b/Source/Engine/Core/Config/LayersTagsSettings.h index 39d7506d5..20e3977a7 100644 --- a/Source/Engine/Core/Config/LayersTagsSettings.h +++ b/Source/Engine/Core/Config/LayersTagsSettings.h @@ -11,9 +11,9 @@ /// API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API LayersAndTagsSettings : public SettingsBase { -DECLARE_SCRIPTING_TYPE_MINIMAL(LayersAndTagsSettings); -public: + DECLARE_SCRIPTING_TYPE_MINIMAL(LayersAndTagsSettings); +public: /// /// The tag names. /// @@ -25,7 +25,6 @@ public: String Layers[32]; public: - /// /// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use. /// diff --git a/Source/Engine/Core/Config/TimeSettings.h b/Source/Engine/Core/Config/TimeSettings.h index 2a5a39a72..3edd83195 100644 --- a/Source/Engine/Core/Config/TimeSettings.h +++ b/Source/Engine/Core/Config/TimeSettings.h @@ -9,9 +9,10 @@ /// API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API TimeSettings : public SettingsBase { -DECLARE_SCRIPTING_TYPE_MINIMAL(TimeSettings); -public: + DECLARE_SCRIPTING_TYPE_MINIMAL(TimeSettings); + API_AUTO_SERIALIZATION(); +public: /// /// The target amount of the game logic updates per second (script updates frequency). /// @@ -43,7 +44,6 @@ public: float MaxUpdateDeltaTime = 0.1f; public: - /// /// Gets the instance of the settings asset (default value if missing). Object returned by this method is always loaded with valid data to use. /// @@ -51,5 +51,4 @@ public: // [SettingsBase] void Apply() override; - void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) final override; }; diff --git a/Source/Engine/Engine/Time.cpp b/Source/Engine/Engine/Time.cpp index 4903a576e..6df5275f5 100644 --- a/Source/Engine/Engine/Time.cpp +++ b/Source/Engine/Engine/Time.cpp @@ -54,15 +54,6 @@ void TimeSettings::Apply() ::MaxUpdateDeltaTime = MaxUpdateDeltaTime; } -void TimeSettings::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) -{ - DESERIALIZE(UpdateFPS); - DESERIALIZE(PhysicsFPS); - DESERIALIZE(DrawFPS); - DESERIALIZE(TimeScale); - DESERIALIZE(MaxUpdateDeltaTime); -} - void Time::TickData::OnBeforeRun(float targetFps, double currentTime) { Time = UnscaledTime = TimeSpan::Zero(); diff --git a/Source/Engine/Input/InputSettings.h b/Source/Engine/Input/InputSettings.h index 9f03db243..b251eaf3c 100644 --- a/Source/Engine/Input/InputSettings.h +++ b/Source/Engine/Input/InputSettings.h @@ -12,6 +12,7 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API InputSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(InputSettings); + public: /// /// Maps a discrete button or key press events to a "friendly name" that will later be bound to event-driven behavior. The end effect is that pressing (and/or releasing) a key, mouse button, or keypad button. diff --git a/Source/Engine/Localization/LocalizationSettings.h b/Source/Engine/Localization/LocalizationSettings.h index 0f5e1d99c..cfd391cc3 100644 --- a/Source/Engine/Localization/LocalizationSettings.h +++ b/Source/Engine/Localization/LocalizationSettings.h @@ -12,6 +12,7 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API LocalizationSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(LocalizationSettings); + public: /// /// The list of the string localization tables used by the game. diff --git a/Source/Engine/Navigation/NavigationSettings.h b/Source/Engine/Navigation/NavigationSettings.h index 62671433f..f4e6c26fa 100644 --- a/Source/Engine/Navigation/NavigationSettings.h +++ b/Source/Engine/Navigation/NavigationSettings.h @@ -12,6 +12,7 @@ API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings", NoConstructor) class FLAXENGINE_API NavigationSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(NavigationSettings); + public: /// /// If checked, enables automatic navmesh actors spawning on a scenes that are using it during navigation building. diff --git a/Source/Engine/Networking/NetworkSettings.h b/Source/Engine/Networking/NetworkSettings.h index 98340e369..c861114f9 100644 --- a/Source/Engine/Networking/NetworkSettings.h +++ b/Source/Engine/Networking/NetworkSettings.h @@ -10,8 +10,9 @@ /// API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings") class FLAXENGINE_API NetworkSettings : public SettingsBase { - API_AUTO_SERIALIZATION(); DECLARE_SCRIPTING_TYPE_MINIMAL(NetworkSettings); + API_AUTO_SERIALIZATION(); + public: /// /// Maximum amount of active network clients in a game session. Used by server or host to limit amount of players and spectators. diff --git a/Source/Engine/Physics/PhysicsSettings.h b/Source/Engine/Physics/PhysicsSettings.h index eefbacc87..fca1ea2d4 100644 --- a/Source/Engine/Physics/PhysicsSettings.h +++ b/Source/Engine/Physics/PhysicsSettings.h @@ -56,6 +56,7 @@ API_ENUM() enum class PhysicsSolverType API_CLASS(sealed, Namespace="FlaxEditor.Content.Settings", NoConstructor) class FLAXENGINE_API PhysicsSettings : public SettingsBase { DECLARE_SCRIPTING_TYPE_MINIMAL(PhysicsSettings); + public: /// /// The default gravity force value (in cm^2/s).