diff --git a/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp index 92eb9542c..0823c9e67 100644 --- a/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp +++ b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp @@ -16,7 +16,7 @@ #include "Engine/Content/Content.h" #include "Engine/Content/JsonAsset.h" -IMPLEMENT_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); namespace { diff --git a/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp index 1c74cd1d3..f9c024071 100644 --- a/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp +++ b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp @@ -12,7 +12,7 @@ #include "Engine/Content/Content.h" #include "Engine/Content/JsonAsset.h" -IMPLEMENT_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); const Char* LinuxPlatformTools::GetDisplayName() const { diff --git a/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp index c74368348..f9331dc66 100644 --- a/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp +++ b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp @@ -14,7 +14,7 @@ #include "Engine/Content/Content.h" #include "Engine/Content/JsonAsset.h" -IMPLEMENT_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); const Char* UWPPlatformTools::GetDisplayName() const { diff --git a/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp index 9f7744704..57183df5b 100644 --- a/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp +++ b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp @@ -11,7 +11,7 @@ #include "Engine/Content/Content.h" #include "Engine/Content/JsonAsset.h" -IMPLEMENT_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); const Char* WindowsPlatformTools::GetDisplayName() const { diff --git a/Source/Engine/Core/Config/GameSettings.cpp b/Source/Engine/Core/Config/GameSettings.cpp index 681a1cb16..e96453b1d 100644 --- a/Source/Engine/Core/Config/GameSettings.cpp +++ b/Source/Engine/Core/Config/GameSettings.cpp @@ -37,36 +37,36 @@ public: } }; -IMPLEMENT_SETTINGS_GETTER(BuildSettings, GameCooking); -IMPLEMENT_SETTINGS_GETTER(GraphicsSettings, Graphics); -IMPLEMENT_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags); -IMPLEMENT_SETTINGS_GETTER(TimeSettings, Time); -IMPLEMENT_SETTINGS_GETTER(AudioSettings, Audio); -IMPLEMENT_SETTINGS_GETTER(PhysicsSettings, Physics); -IMPLEMENT_SETTINGS_GETTER(InputSettings, Input); -IMPLEMENT_SETTINGS_GETTER(StreamingSettings, Streaming); +IMPLEMENT_ENGINE_SETTINGS_GETTER(BuildSettings, GameCooking); +IMPLEMENT_ENGINE_SETTINGS_GETTER(GraphicsSettings, Graphics); +IMPLEMENT_ENGINE_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags); +IMPLEMENT_ENGINE_SETTINGS_GETTER(TimeSettings, Time); +IMPLEMENT_ENGINE_SETTINGS_GETTER(AudioSettings, Audio); +IMPLEMENT_ENGINE_SETTINGS_GETTER(PhysicsSettings, Physics); +IMPLEMENT_ENGINE_SETTINGS_GETTER(InputSettings, Input); +IMPLEMENT_ENGINE_SETTINGS_GETTER(StreamingSettings, Streaming); #if !USE_EDITOR #if PLATFORM_WINDOWS -IMPLEMENT_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); #elif PLATFORM_UWP -IMPLEMENT_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); #elif PLATFORM_LINUX -IMPLEMENT_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); #elif PLATFORM_PS4 -IMPLEMENT_SETTINGS_GETTER(PS4PlatformSettings, PS4Platform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(PS4PlatformSettings, PS4Platform); #elif PLATFORM_PS5 -IMPLEMENT_SETTINGS_GETTER(PS5PlatformSettings, PS5Platform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(PS5PlatformSettings, PS5Platform); #elif PLATFORM_XBOX_ONE -IMPLEMENT_SETTINGS_GETTER(XboxOnePlatformSettings, XboxOnePlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(XboxOnePlatformSettings, XboxOnePlatform); #elif PLATFORM_XBOX_SCARLETT -IMPLEMENT_SETTINGS_GETTER(XboxScarlettPlatformSettings, XboxScarlettPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(XboxScarlettPlatformSettings, XboxScarlettPlatform); #elif PLATFORM_ANDROID -IMPLEMENT_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); #elif PLATFORM_SWITCH -IMPLEMENT_SETTINGS_GETTER(SwitchPlatformSettings, SwitchPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(SwitchPlatformSettings, SwitchPlatform); #elif PLATFORM_MAC -IMPLEMENT_SETTINGS_GETTER(MacPlatformSettings, MacPlatform); +IMPLEMENT_ENGINE_SETTINGS_GETTER(MacPlatformSettings, MacPlatform); #else #error Unknown platform #endif diff --git a/Source/Engine/Core/Config/Settings.h b/Source/Engine/Core/Config/Settings.h index da812f564..31af8d25a 100644 --- a/Source/Engine/Core/Config/Settings.h +++ b/Source/Engine/Core/Config/Settings.h @@ -9,9 +9,8 @@ /// API_CLASS(Abstract) class FLAXENGINE_API SettingsBase : public ISerializable { -DECLARE_SCRIPTING_TYPE_MINIMAL(SettingsBase); + DECLARE_SCRIPTING_TYPE_MINIMAL(SettingsBase); public: - /// /// Applies the settings to the target system. /// @@ -20,16 +19,18 @@ public: } public: - // [ISerializable] void Serialize(SerializeStream& stream, const void* otherObj) override { - // Not supported (Editor C# edits settings data) + } + + void Deserialize(DeserializeStream& stream, ISerializeModifier* modifier) override + { } }; -// Helper utility define for settings getter implementation code -#define IMPLEMENT_SETTINGS_GETTER(type, field) \ +// Helper utility define for Engine settings getter implementation code +#define IMPLEMENT_ENGINE_SETTINGS_GETTER(type, field) \ type* type::Get() \ { \ static type DefaultInstance; \ @@ -45,3 +46,28 @@ public: } \ return result; \ } + +// [Deprecated on 20.01.2022, expires on 20.01.2024] +#define IMPLEMENT_SETTINGS_GETTER(type, field) IMPLEMENT_ENGINE_SETTINGS_GETTER(type, field) + +// Helper utility define for Game settings getter implementation code +#define IMPLEMENT_GAME_SETTINGS_GETTER(type, name) \ + type* type::Get() \ + { \ + static type DefaultInstance; \ + type* result = &DefaultInstance; \ + const auto gameSettings = GameSettings::Get(); \ + if (gameSettings) \ + { \ + Guid assetId = Guid::Empty; \ + gameSettings->CustomSettings.TryGet(TEXT(name), assetId); \ + const auto asset = Content::Load(assetId); \ + if (asset && asset->Instance && asset->InstanceType == type::TypeInitializer) \ + { \ + result = static_cast(asset->Instance); \ + } \ + } \ + return result; \ + } + +#define DECLARE_SETTINGS_GETTER(type) static type* Get() diff --git a/Source/Engine/Localization/Localization.cpp b/Source/Engine/Localization/Localization.cpp index ecfb2610e..78e05aab2 100644 --- a/Source/Engine/Localization/Localization.cpp +++ b/Source/Engine/Localization/Localization.cpp @@ -73,7 +73,7 @@ namespace LocalizationService Instance; } -IMPLEMENT_SETTINGS_GETTER(LocalizationSettings, Localization); +IMPLEMENT_ENGINE_SETTINGS_GETTER(LocalizationSettings, Localization); void LocalizationSettings::Apply() { diff --git a/Source/Engine/Navigation/Navigation.cpp b/Source/Engine/Navigation/Navigation.cpp index ebec0f808..c77617670 100644 --- a/Source/Engine/Navigation/Navigation.cpp +++ b/Source/Engine/Navigation/Navigation.cpp @@ -201,7 +201,7 @@ NavigationSettings::NavigationSettings() areaWalkable.Cost = 1; } -IMPLEMENT_SETTINGS_GETTER(NavigationSettings, Navigation); +IMPLEMENT_ENGINE_SETTINGS_GETTER(NavigationSettings, Navigation); void NavigationSettings::Apply() {