diff --git a/Source/Editor/Content/Items/SettingsItem/AndroidPlatformSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/AndroidPlatformSettingsItem.cs new file mode 100644 index 000000000..4b161bbef --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/AndroidPlatformSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class AndroidPlatformSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public AndroidPlatformSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.AndroidSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/AudioSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/AudioSettingsItem.cs new file mode 100644 index 000000000..69a931126 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/AudioSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class AudioSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public AudioSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.AudioSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/BuildSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/BuildSettingsItem.cs new file mode 100644 index 000000000..6f471d912 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/BuildSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class BuildSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public BuildSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.BuildSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/GameSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/GameSettingsItem.cs new file mode 100644 index 000000000..f45fca855 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/GameSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class GameSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public GameSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/GraphicsSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/GraphicsSettingsItem.cs new file mode 100644 index 000000000..8122ee54f --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/GraphicsSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class GraphicsSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public GraphicsSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/InputSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/InputSettingsItem.cs new file mode 100644 index 000000000..3b532799e --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/InputSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class InputSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public InputSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.InputSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/LayersAndTagsSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/LayersAndTagsSettingsItem.cs new file mode 100644 index 000000000..75485a279 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/LayersAndTagsSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class LayersAndTagsSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public LayersAndTagsSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.LayersAndTagsSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/LinuxPlatformSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/LinuxPlatformSettingsItem.cs new file mode 100644 index 000000000..4e43326f0 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/LinuxPlatformSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class LinuxPlatformSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// Name of the resource type. + public LinuxPlatformSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.LinuxSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/NavigationSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/NavigationSettingsItem.cs new file mode 100644 index 000000000..a2e9c58e4 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/NavigationSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class NavigationSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public NavigationSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.NavigationSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/PhysicsSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/PhysicsSettingsItem.cs new file mode 100644 index 000000000..9613f3b72 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/PhysicsSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class PhysicsSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public PhysicsSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.PhysicsSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/TimeSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/TimeSettingsItem.cs new file mode 100644 index 000000000..d5c4769c6 --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/TimeSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class TimeSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// + public TimeSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/UWPPlatformSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/UWPPlatformSettingsItem.cs new file mode 100644 index 000000000..8e11af39f --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/UWPPlatformSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class UWPPlatformSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// Name of the resource type. + public UWPPlatformSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.UWPSettings; + } +} diff --git a/Source/Editor/Content/Items/SettingsItem/WindowsPlatformSettingsItem.cs b/Source/Editor/Content/Items/SettingsItem/WindowsPlatformSettingsItem.cs new file mode 100644 index 000000000..5fc52815d --- /dev/null +++ b/Source/Editor/Content/Items/SettingsItem/WindowsPlatformSettingsItem.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2021 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class WindowsPlatformSettingsItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// Name of the resource type. + public WindowsPlatformSettingsItem(string path, Guid id, string typeName) + : base(path, id, typeName) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.WindowsSettings; + } +} diff --git a/Source/Editor/Content/Proxy/SettingsProxy.cs b/Source/Editor/Content/Proxy/SettingsProxy.cs index a6b74b0ea..df927fef2 100644 --- a/Source/Editor/Content/Proxy/SettingsProxy.cs +++ b/Source/Editor/Content/Proxy/SettingsProxy.cs @@ -3,6 +3,7 @@ using System; using FlaxEditor.Content.Create; using FlaxEditor.Content.Settings; +using FlaxEditor.Modules; namespace FlaxEditor.Content { @@ -44,6 +45,28 @@ namespace FlaxEditor.Content Editor.Instance.ContentImporting.Create(new SettingsCreateEntry(outputPath)); } + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + switch (typeName.Substring(typeName.LastIndexOf('.')+1)) + { + case "GameSettings": return new GameSettingsItem(path, id, typeName); + case "AndroidPlatformSettings": return new AndroidPlatformSettingsItem(path, id, typeName); + case "AudioSettings": return new AudioSettingsItem(path, id, typeName); + case "BuildSettings": return new BuildSettingsItem(path, id, typeName); + case "GraphicsSettings": return new GraphicsSettingsItem(path, id, typeName); + case "InputSettings": return new InputSettingsItem(path, id, typeName); + case "LayersAndTagsSettings": return new LayersAndTagsSettingsItem(path, id, typeName); + case "LinuxPlatformSettings": return new LinuxPlatformSettingsItem(path, id, typeName); + case "NavigationSettings": return new NavigationSettingsItem(path, id, typeName); + case "PhysicsSettings": return new PhysicsSettingsItem(path, id, typeName); + case "TimeSettings": return new TimeSettingsItem(path, id, typeName); + case "UWPPlatformSettings": return new UWPPlatformSettingsItem(path, id, typeName); + case "WindowsPlatformSettings": return new WindowsPlatformSettingsItem(path, id, typeName); + } + return base.ConstructItem(path, typeName, ref id); + } + /// public override bool IsProxyFor() { diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 5cada5d87..f09ff3332 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -220,7 +220,7 @@ namespace FlaxEditor GameProject = ProjectInfo.Load(Internal_GetProjectPath()); Icons = new EditorIcons(); - Icons.GetIcons(); + Icons.LoadIcons(); // Create common editor modules RegisterModule(Options = new OptionsModule(this)); diff --git a/Source/Editor/EditorIcons.cs b/Source/Editor/EditorIcons.cs index 700b5e25e..4d79155f4 100644 --- a/Source/Editor/EditorIcons.cs +++ b/Source/Editor/EditorIcons.cs @@ -16,102 +16,120 @@ namespace FlaxEditor [HideInEditor] public sealed class EditorIcons { - public SpriteHandle FolderClosed12; - public SpriteHandle FolderOpened12; - public SpriteHandle DragBar12; + // 12px public SpriteHandle ArrowDown12; public SpriteHandle ArrowRight12; - public SpriteHandle Search12; - public SpriteHandle Settings12; - public SpriteHandle Cross12; public SpriteHandle CheckBoxIntermediate12; public SpriteHandle CheckBoxTick12; + public SpriteHandle Cross12; + public SpriteHandle DragBar12; + public SpriteHandle FolderClosed12; + public SpriteHandle FolderOpened12; + public SpriteHandle Search12; + public SpriteHandle Settings12; public SpriteHandle StatusBarSizeGrip12; + // 16px public SpriteHandle ArrowRightBorder16; - public SpriteHandle World16; - public SpriteHandle ScaleStep16; - public SpriteHandle RotateStep16; - public SpriteHandle Grid16; - public SpriteHandle Translate16; - public SpriteHandle Rotate16; - public SpriteHandle Scale16; - public SpriteHandle Link16; public SpriteHandle Docs16; + public SpriteHandle Grid16; + public SpriteHandle Link16; + public SpriteHandle Rotate16; + public SpriteHandle RotateStep16; + public SpriteHandle Scale16; + public SpriteHandle ScaleStep16; + public SpriteHandle Translate16; + public SpriteHandle World16; - public SpriteHandle Save32; - public SpriteHandle Undo32; - public SpriteHandle Redo32; - public SpriteHandle Translate32; - public SpriteHandle Rotate32; - public SpriteHandle Scale32; - public SpriteHandle Play32; - public SpriteHandle Pause32; - public SpriteHandle Step32; - public SpriteHandle Stop32; - public SpriteHandle PageScale32; - public SpriteHandle Bone32; - public SpriteHandle Docs32; - public SpriteHandle Import32; + // 32px public SpriteHandle AddDoc32; - public SpriteHandle RemoveDoc32; - public SpriteHandle BracketsSlash32; - public SpriteHandle Find32; - public SpriteHandle Reload32; + public SpriteHandle ArrowDown32; public SpriteHandle ArrowLeft32; public SpriteHandle ArrowRight32; - public SpriteHandle ArrowDown32; public SpriteHandle ArrowUp32; + public SpriteHandle Bone32; + public SpriteHandle BracketsSlash32; + public SpriteHandle Build32; + public SpriteHandle Camera32; + public SpriteHandle Docs32; public SpriteHandle Error32; - public SpriteHandle Warning32; - public SpriteHandle Info32; - public SpriteHandle UV32; + public SpriteHandle Find32; public SpriteHandle Image32; + public SpriteHandle Import32; + public SpriteHandle Info32; public SpriteHandle Link32; public SpriteHandle Next32; - public SpriteHandle Camera32; - public SpriteHandle Build32; + public SpriteHandle PageScale32; + public SpriteHandle Pause32; + public SpriteHandle Play32; + public SpriteHandle Redo32; + public SpriteHandle Reload32; + public SpriteHandle RemoveDoc32; + public SpriteHandle Rotate32; + public SpriteHandle Save32; + public SpriteHandle Scale32; + public SpriteHandle Step32; + public SpriteHandle Stop32; + public SpriteHandle Translate32; + public SpriteHandle Undo32; + public SpriteHandle UV32; + public SpriteHandle Warning32; + // 48px public SpriteHandle Add48; - public SpriteHandle Paint48; public SpriteHandle Foliage48; public SpriteHandle Mountain48; + public SpriteHandle Paint48; - public SpriteHandle Plugin64; - public SpriteHandle Document64; - public SpriteHandle CSharpScript64; - public SpriteHandle CppScript64; - public SpriteHandle Folder64; - public SpriteHandle Scene64; + // 64px public SpriteHandle CodeScript64; + public SpriteHandle CppScript64; + public SpriteHandle CSharpScript64; + public SpriteHandle Document64; + public SpriteHandle Folder64; + public SpriteHandle Plugin64; + public SpriteHandle Scene64; + // 128px public SpriteHandle Logo128; - public SpriteHandle VisjectBoxOpen; - public SpriteHandle VisjectBoxClose; + // Visject public SpriteHandle VisjectArrowOpen; public SpriteHandle VisjectArrowClose; + public SpriteHandle VisjectBoxOpen; + public SpriteHandle VisjectBoxClose; + // Platforms + public SpriteHandle Android; public SpriteHandle AssetShadow; public SpriteHandle ColorWheel; - public SpriteHandle Windows; - public SpriteHandle XboxOne; - public SpriteHandle WindowsStore; public SpriteHandle Linux; public SpriteHandle PS4; + public SpriteHandle WindowsStore; + public SpriteHandle Windows; + public SpriteHandle XboxOne; public SpriteHandle XboxSeriesX; - public SpriteHandle Android; - internal void GetIcons() + // Settings + public SpriteHandle AndroidSettings; + public SpriteHandle AudioSettings; + public SpriteHandle BuildSettings; + public SpriteHandle GameSettings; + public SpriteHandle PhysicsSettings; + public SpriteHandle GraphicsSettings; + public SpriteHandle InputSettings; + public SpriteHandle LayersAndTagsSettings; + public SpriteHandle LinuxSettings; + public SpriteHandle NavigationSettings; + public SpriteHandle TimeSettings; + public SpriteHandle UWPSettings; + public SpriteHandle WindowsSettings; + + internal void LoadIcons() { - // Load asset + // Load & validate var iconsAtlas = FlaxEngine.Content.LoadAsyncInternal(EditorAssets.IconsAtlas); - if (iconsAtlas == null) - { - Editor.LogError("Cannot load editor icons atlas."); - return; - } - if (iconsAtlas.WaitForLoaded()) + if (iconsAtlas == null || iconsAtlas.WaitForLoaded()) { Editor.LogError("Failed to load editor icons atlas."); return; @@ -122,11 +140,11 @@ namespace FlaxEditor for (int i = 0; i < fields.Length; i++) { var field = fields[i]; + var sprite = iconsAtlas.FindSprite(field.Name); if (!sprite.IsValid) - { - Editor.LogWarning(string.Format("Failed to load sprite icon \'{0}\'.", field.Name)); - } + Editor.LogWarning($"Failed to load sprite icon \'{field.Name}\'."); + field.SetValue(this, sprite); } }