Add easier game or plugin settings asset usage with SettingsBase

This commit is contained in:
Wojciech Figat
2022-01-21 16:22:14 +01:00
parent b998655e1a
commit d36c502287
8 changed files with 56 additions and 30 deletions

View File

@@ -16,7 +16,7 @@
#include "Engine/Content/Content.h" #include "Engine/Content/Content.h"
#include "Engine/Content/JsonAsset.h" #include "Engine/Content/JsonAsset.h"
IMPLEMENT_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform);
namespace namespace
{ {

View File

@@ -12,7 +12,7 @@
#include "Engine/Content/Content.h" #include "Engine/Content/Content.h"
#include "Engine/Content/JsonAsset.h" #include "Engine/Content/JsonAsset.h"
IMPLEMENT_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform);
const Char* LinuxPlatformTools::GetDisplayName() const const Char* LinuxPlatformTools::GetDisplayName() const
{ {

View File

@@ -14,7 +14,7 @@
#include "Engine/Content/Content.h" #include "Engine/Content/Content.h"
#include "Engine/Content/JsonAsset.h" #include "Engine/Content/JsonAsset.h"
IMPLEMENT_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform);
const Char* UWPPlatformTools::GetDisplayName() const const Char* UWPPlatformTools::GetDisplayName() const
{ {

View File

@@ -11,7 +11,7 @@
#include "Engine/Content/Content.h" #include "Engine/Content/Content.h"
#include "Engine/Content/JsonAsset.h" #include "Engine/Content/JsonAsset.h"
IMPLEMENT_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform);
const Char* WindowsPlatformTools::GetDisplayName() const const Char* WindowsPlatformTools::GetDisplayName() const
{ {

View File

@@ -37,36 +37,36 @@ public:
} }
}; };
IMPLEMENT_SETTINGS_GETTER(BuildSettings, GameCooking); IMPLEMENT_ENGINE_SETTINGS_GETTER(BuildSettings, GameCooking);
IMPLEMENT_SETTINGS_GETTER(GraphicsSettings, Graphics); IMPLEMENT_ENGINE_SETTINGS_GETTER(GraphicsSettings, Graphics);
IMPLEMENT_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags); IMPLEMENT_ENGINE_SETTINGS_GETTER(LayersAndTagsSettings, LayersAndTags);
IMPLEMENT_SETTINGS_GETTER(TimeSettings, Time); IMPLEMENT_ENGINE_SETTINGS_GETTER(TimeSettings, Time);
IMPLEMENT_SETTINGS_GETTER(AudioSettings, Audio); IMPLEMENT_ENGINE_SETTINGS_GETTER(AudioSettings, Audio);
IMPLEMENT_SETTINGS_GETTER(PhysicsSettings, Physics); IMPLEMENT_ENGINE_SETTINGS_GETTER(PhysicsSettings, Physics);
IMPLEMENT_SETTINGS_GETTER(InputSettings, Input); IMPLEMENT_ENGINE_SETTINGS_GETTER(InputSettings, Input);
IMPLEMENT_SETTINGS_GETTER(StreamingSettings, Streaming); IMPLEMENT_ENGINE_SETTINGS_GETTER(StreamingSettings, Streaming);
#if !USE_EDITOR #if !USE_EDITOR
#if PLATFORM_WINDOWS #if PLATFORM_WINDOWS
IMPLEMENT_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(WindowsPlatformSettings, WindowsPlatform);
#elif PLATFORM_UWP #elif PLATFORM_UWP
IMPLEMENT_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(UWPPlatformSettings, UWPPlatform);
#elif PLATFORM_LINUX #elif PLATFORM_LINUX
IMPLEMENT_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(LinuxPlatformSettings, LinuxPlatform);
#elif PLATFORM_PS4 #elif PLATFORM_PS4
IMPLEMENT_SETTINGS_GETTER(PS4PlatformSettings, PS4Platform); IMPLEMENT_ENGINE_SETTINGS_GETTER(PS4PlatformSettings, PS4Platform);
#elif PLATFORM_PS5 #elif PLATFORM_PS5
IMPLEMENT_SETTINGS_GETTER(PS5PlatformSettings, PS5Platform); IMPLEMENT_ENGINE_SETTINGS_GETTER(PS5PlatformSettings, PS5Platform);
#elif PLATFORM_XBOX_ONE #elif PLATFORM_XBOX_ONE
IMPLEMENT_SETTINGS_GETTER(XboxOnePlatformSettings, XboxOnePlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(XboxOnePlatformSettings, XboxOnePlatform);
#elif PLATFORM_XBOX_SCARLETT #elif PLATFORM_XBOX_SCARLETT
IMPLEMENT_SETTINGS_GETTER(XboxScarlettPlatformSettings, XboxScarlettPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(XboxScarlettPlatformSettings, XboxScarlettPlatform);
#elif PLATFORM_ANDROID #elif PLATFORM_ANDROID
IMPLEMENT_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(AndroidPlatformSettings, AndroidPlatform);
#elif PLATFORM_SWITCH #elif PLATFORM_SWITCH
IMPLEMENT_SETTINGS_GETTER(SwitchPlatformSettings, SwitchPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(SwitchPlatformSettings, SwitchPlatform);
#elif PLATFORM_MAC #elif PLATFORM_MAC
IMPLEMENT_SETTINGS_GETTER(MacPlatformSettings, MacPlatform); IMPLEMENT_ENGINE_SETTINGS_GETTER(MacPlatformSettings, MacPlatform);
#else #else
#error Unknown platform #error Unknown platform
#endif #endif

View File

@@ -9,9 +9,8 @@
/// </summary> /// </summary>
API_CLASS(Abstract) class FLAXENGINE_API SettingsBase : public ISerializable API_CLASS(Abstract) class FLAXENGINE_API SettingsBase : public ISerializable
{ {
DECLARE_SCRIPTING_TYPE_MINIMAL(SettingsBase); DECLARE_SCRIPTING_TYPE_MINIMAL(SettingsBase);
public: public:
/// <summary> /// <summary>
/// Applies the settings to the target system. /// Applies the settings to the target system.
/// </summary> /// </summary>
@@ -20,16 +19,18 @@ public:
} }
public: public:
// [ISerializable] // [ISerializable]
void Serialize(SerializeStream& stream, const void* otherObj) override 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 // Helper utility define for Engine settings getter implementation code
#define IMPLEMENT_SETTINGS_GETTER(type, field) \ #define IMPLEMENT_ENGINE_SETTINGS_GETTER(type, field) \
type* type::Get() \ type* type::Get() \
{ \ { \
static type DefaultInstance; \ static type DefaultInstance; \
@@ -45,3 +46,28 @@ public:
} \ } \
return result; \ 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<JsonAsset>(assetId); \
if (asset && asset->Instance && asset->InstanceType == type::TypeInitializer) \
{ \
result = static_cast<type*>(asset->Instance); \
} \
} \
return result; \
}
#define DECLARE_SETTINGS_GETTER(type) static type* Get()

View File

@@ -73,7 +73,7 @@ namespace
LocalizationService Instance; LocalizationService Instance;
} }
IMPLEMENT_SETTINGS_GETTER(LocalizationSettings, Localization); IMPLEMENT_ENGINE_SETTINGS_GETTER(LocalizationSettings, Localization);
void LocalizationSettings::Apply() void LocalizationSettings::Apply()
{ {

View File

@@ -201,7 +201,7 @@ NavigationSettings::NavigationSettings()
areaWalkable.Cost = 1; areaWalkable.Cost = 1;
} }
IMPLEMENT_SETTINGS_GETTER(NavigationSettings, Navigation); IMPLEMENT_ENGINE_SETTINGS_GETTER(NavigationSettings, Navigation);
void NavigationSettings::Apply() void NavigationSettings::Apply()
{ {