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()
{