// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved.
using System;
using FlaxEditor.Content.Settings;
using FlaxEditor.Scripting;
using FlaxEngine;
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
{
///
/// Types of the settings assets that can be created.
///
public 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 build settings.
///
BuildSettings,
///
/// The input settings.
///
InputSettings,
///
/// 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,
}
private static readonly Type[] _types =
{
typeof(GameSettings),
typeof(AudioSettings),
typeof(TimeSettings),
typeof(LayersAndTagsSettings),
typeof(PhysicsSettings),
typeof(GraphicsSettings),
typeof(NavigationSettings),
typeof(BuildSettings),
typeof(InputSettings),
typeof(WindowsPlatformSettings),
typeof(UWPPlatformSettings),
typeof(LinuxPlatformSettings),
TypeUtils.GetManagedType(GameSettings.PS4PlatformSettingsTypename),
TypeUtils.GetManagedType(GameSettings.XboxScarlettPlatformSettingsTypename),
typeof(AndroidPlatformSettings),
};
///
/// The create options.
///
public class Options
{
///
/// The type.
///
[Tooltip("Type of the settings asset to create")]
public SettingsTypes Type = SettingsTypes.GameSettings;
}
private readonly Options _options = new Options();
///
public override object Settings => _options;
///
/// Initializes a new instance of the class.
///
/// The result file url.
public SettingsCreateEntry(string resultUrl)
: base("Settings", resultUrl)
{
}
///
public override bool Create()
{
// Create settings asset object and serialize it to pure json asset
var type = _types[(int)_options.Type];
if (type == null)
{
MessageBox.Show("Cannot create " + _options.Type + " settings. Platform not supported.");
return true;
}
var data = Activator.CreateInstance(type);
return Editor.SaveJsonAsset(ResultUrl, data);
}
}
}