diff --git a/Source/Editor/Content/Create/SettingsCreateEntry.cs b/Source/Editor/Content/Create/SettingsCreateEntry.cs index 8445425b0..570903baa 100644 --- a/Source/Editor/Content/Create/SettingsCreateEntry.cs +++ b/Source/Editor/Content/Create/SettingsCreateEntry.cs @@ -3,6 +3,7 @@ using System; using FlaxEditor.Content.Settings; using FlaxEditor.Scripting; +using FlaxEditor.Windows.Assets; using FlaxEngine; namespace FlaxEditor.Content.Create @@ -11,101 +12,30 @@ namespace FlaxEditor.Content.Create /// Engine settings asset creating handler. Allows to specify type of the settings to create (e.g. , , etc.). /// /// - public class SettingsCreateEntry : CreateFileEntry + internal class SettingsCreateEntry : CreateFileEntry { /// /// Types of the settings assets that can be created. /// - public enum SettingsTypes + internal enum SettingsTypes { - /// - /// The game settings. - /// GameSettings, - - /// - /// The audio settings. - /// AudioSettings, - - /// - /// The time settings. - /// TimeSettings, - - /// - /// The layers and tags settings. - /// LayersAndTagsSettings, - - /// - /// The physics settings. - /// PhysicsSettings, - - /// - /// The graphics settings. - /// GraphicsSettings, - - /// - /// The navigation settings. - /// NavigationSettings, - - /// - /// The localization settings. - /// LocalizationSettings, - - /// - /// The build settings. - /// BuildSettings, - - /// - /// The input settings. - /// InputSettings, - - /// - /// The streaming settings. - /// StreamingSettings, - - /// - /// The Windows settings. - /// WindowsPlatformSettings, - - /// - /// The UWP settings. - /// UWPPlatformSettings, - - /// - /// The Linux settings. - /// LinuxPlatformSettings, - - /// - /// The PS4 settings - /// PS4PlatformSettings, - - /// - /// The Xbox Scarlett settings - /// XboxScarlettPlatformSettings, - - /// - /// The Android settings - /// AndroidPlatformSettings, - - /// - /// The Switch settings - /// SwitchPlatformSettings, } @@ -131,10 +61,7 @@ namespace FlaxEditor.Content.Create TypeUtils.GetManagedType(GameSettings.SwitchPlatformSettingsTypename), }; - /// - /// The create options. - /// - public class Options + internal class Options { /// /// The type. @@ -168,7 +95,134 @@ namespace FlaxEditor.Content.Create return true; } var data = Activator.CreateInstance(type); - return Editor.SaveJsonAsset(ResultUrl, data); + if (Editor.SaveJsonAsset(ResultUrl, data)) + return true; + + // Automatic settings linking to game settings for easier usage + var gameSettingsItem = Editor.Instance.ContentDatabase.Game.Content.Folder.FindChild(GameSettings.GameSettingsAssetPath) as JsonAssetItem; + if (gameSettingsItem != null) + { + var gameSettingsWindow = Editor.Instance.Windows.FindEditor(gameSettingsItem) as JsonAssetWindow; + if (gameSettingsWindow?.Instance is GameSettings) + { + if (TrySet(gameSettingsWindow.Instance as GameSettings, ResultUrl, _options.Type)) + gameSettingsWindow.MarkAsEdited(); + } + else + { + var gameSettingsAsset = FlaxEngine.Content.LoadAsync(gameSettingsItem.ID); + if (gameSettingsAsset && !gameSettingsAsset.WaitForLoaded()) + { + if (gameSettingsAsset.CreateInstance() is GameSettings settings) + { + if (TrySet(settings, ResultUrl, _options.Type)) + { + Editor.SaveJsonAsset(GameSettings.GameSettingsAssetPath, settings); + } + } + } + } + } + + return false; + } + + private static bool TrySet(GameSettings instance, string resultUrl, SettingsTypes type) + { + var asset = FlaxEngine.Content.LoadAsync(resultUrl); + if (instance != null && asset != null) + { + switch (type) + { + case SettingsTypes.AudioSettings: + if (instance.Audio != null) + return false; + instance.Audio = asset; + break; + case SettingsTypes.TimeSettings: + if (instance.Time != null) + return false; + instance.Time = asset; + break; + case SettingsTypes.LayersAndTagsSettings: + if (instance.LayersAndTags != null) + return false; + instance.LayersAndTags = asset; + break; + case SettingsTypes.PhysicsSettings: + if (instance.Physics != null) + return false; + instance.Physics = asset; + break; + case SettingsTypes.GraphicsSettings: + if (instance.Graphics != null) + return false; + instance.Graphics = asset; + break; + case SettingsTypes.NavigationSettings: + if (instance.Navigation != null) + return false; + instance.Navigation = asset; + break; + case SettingsTypes.LocalizationSettings: + if (instance.Localization != null) + return false; + instance.Localization = asset; + break; + case SettingsTypes.BuildSettings: + if (instance.GameCooking != null) + return false; + instance.GameCooking = asset; + break; + case SettingsTypes.InputSettings: + if (instance.Input != null) + return false; + instance.Input = asset; + break; + case SettingsTypes.StreamingSettings: + if (instance.Streaming != null) + return false; + instance.Streaming = asset; + break; + case SettingsTypes.WindowsPlatformSettings: + if (instance.WindowsPlatform != null) + return false; + instance.WindowsPlatform = asset; + break; + case SettingsTypes.UWPPlatformSettings: + if (instance.UWPPlatform != null) + return false; + instance.UWPPlatform = asset; + break; + case SettingsTypes.LinuxPlatformSettings: + if (instance.LinuxPlatform != null) + return false; + instance.LinuxPlatform = asset; + break; + case SettingsTypes.PS4PlatformSettings: + if (instance.PS4Platform != null) + return false; + instance.PS4Platform = asset; + break; + case SettingsTypes.XboxScarlettPlatformSettings: + if (instance.XboxScarlettPlatform != null) + return false; + instance.XboxScarlettPlatform = asset; + break; + case SettingsTypes.AndroidPlatformSettings: + if (instance.AndroidPlatform != null) + return false; + instance.AndroidPlatform = asset; + break; + case SettingsTypes.SwitchPlatformSettings: + if (instance.SwitchPlatform != null) + return false; + instance.SwitchPlatform = asset; + break; + } + return true; + } + return false; } } } diff --git a/Source/Editor/Modules/WindowsModule.cs b/Source/Editor/Modules/WindowsModule.cs index 5267da01f..e1d1a6753 100644 --- a/Source/Editor/Modules/WindowsModule.cs +++ b/Source/Editor/Modules/WindowsModule.cs @@ -201,7 +201,6 @@ namespace FlaxEditor.Modules return win; } } - return null; } diff --git a/Source/Editor/Windows/Assets/JsonAssetWindow.cs b/Source/Editor/Windows/Assets/JsonAssetWindow.cs index c48125013..18d130bb1 100644 --- a/Source/Editor/Windows/Assets/JsonAssetWindow.cs +++ b/Source/Editor/Windows/Assets/JsonAssetWindow.cs @@ -23,6 +23,11 @@ namespace FlaxEditor.Windows.Assets private object _object; private bool _isRegisteredForScriptsReload; + /// + /// Gets the instance of the Json asset object that is being edited. + /// + public object Instance => _object; + /// public JsonAssetWindow(Editor editor, AssetItem item) : base(editor, item)