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)