diff --git a/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
index 9844f3fda..29c8e889e 100644
--- a/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
+++ b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs
@@ -739,6 +739,8 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
public override void Initialize(LayoutElementsContainer layout)
{
+ var _style = FlaxEngine.GUI.Style.Current;
+
// Area for drag&drop scripts
var dragArea = layout.CustomContainer();
dragArea.CustomControl.ScriptsEditor = this;
@@ -850,7 +852,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
var title = Utilities.Utils.GetPropertyNameUI(scriptType.Name);
var group = layout.Group(title, editor);
if (!hasAllRequirements)
- group.Panel.HeaderTextColor = FlaxEngine.GUI.Style.Current.Statusbar.Failed;
+ group.Panel.HeaderTextColor = _style.Statusbar.Failed;
if ((Presenter.Features & FeatureFlags.CacheExpandedGroups) != 0)
{
if (Editor.Instance.ProjectCache.IsGroupToggled(title))
@@ -863,9 +865,10 @@ namespace FlaxEditor.CustomEditors.Dedicated
group.Panel.Open();
// Customize
+ float totalHeaderButtonsOffset = 0f;
group.Panel.TooltipText = Editor.Instance.CodeDocs.GetTooltip(scriptType);
if (script.HasPrefabLink)
- group.Panel.HeaderTextColor = FlaxEngine.GUI.Style.Current.ProgressNormal;
+ group.Panel.HeaderTextColor = _style.ProgressNormal;
// Add toggle button to the group
var headerHeight = group.Panel.HeaderHeight;
@@ -889,7 +892,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
TooltipText = "Script reference.",
AutoFocus = true,
IsScrollable = false,
- Color = FlaxEngine.GUI.Style.Current.ForegroundGrey,
+ Color = _style.ForegroundGrey,
Parent = group.Panel,
Bounds = new Rectangle(scriptToggle.Right, 0.5f, headerHeight, headerHeight),
Margin = new Margin(1),
@@ -908,6 +911,31 @@ namespace FlaxEditor.CustomEditors.Dedicated
var settingsButton = group.AddSettingsButton();
settingsButton.Tag = script;
settingsButton.Clicked += OnSettingsButtonClicked;
+ totalHeaderButtonsOffset += settingsButton.Width + FlaxEditor.Utilities.Constants.UIMargin;
+
+ // Add script obsolete icon to the group
+ if (scriptType.HasAttribute(typeof(ObsoleteAttribute), false))
+ {
+ ObsoleteAttribute attribute = (ObsoleteAttribute)scriptType.GetAttributes(false).First(x => x is ObsoleteAttribute);
+
+ string tooltip = "Script marked as obsolete." +
+ (string.IsNullOrEmpty(attribute.Message) ? "" : $"\n{attribute.Message}") +
+ (string.IsNullOrEmpty(attribute.DiagnosticId) ? "" : $"\n{attribute.DiagnosticId}");
+ var obsoleteButton = group.AddHeaderButton(tooltip, totalHeaderButtonsOffset, Editor.Instance.Icons.Info32);
+ obsoleteButton.Color = Color.Orange;
+ obsoleteButton.MouseOverColor = Color.DarkOrange;
+ totalHeaderButtonsOffset += obsoleteButton.Width;
+ }
+
+ // Show visual indicator if script only exists in prefab instance and is not part of the prefab
+ bool isPrefabActor = scripts.Any(s => s.Actor.HasPrefabLink);
+ if (isPrefabActor && script.PrefabID == Guid.Empty)
+ {
+ var prefabInstanceButton = group.AddHeaderButton("Script only exists in this prefab instance.", totalHeaderButtonsOffset, Editor.Instance.Icons.Add32);
+ prefabInstanceButton.Color = _style.ProgressNormal;
+ prefabInstanceButton.MouseOverColor = _style.ProgressNormal * 0.9f;
+ totalHeaderButtonsOffset += prefabInstanceButton.Width;
+ }
// Adjust margin to not overlap with other ui elements in the header
group.Panel.HeaderTextMargin = group.Panel.HeaderTextMargin with { Left = scriptDrag.Right - 12, Right = settingsButton.Width + Utilities.Constants.UIMargin };
diff --git a/Source/Editor/CustomEditors/Elements/Container/GroupElement.cs b/Source/Editor/CustomEditors/Elements/Container/GroupElement.cs
index 055c6a29d..a3397d10a 100644
--- a/Source/Editor/CustomEditors/Elements/Container/GroupElement.cs
+++ b/Source/Editor/CustomEditors/Elements/Container/GroupElement.cs
@@ -37,25 +37,35 @@ namespace FlaxEditor.CustomEditors.Elements
public override ContainerControl ContainerControl => Panel;
///
- /// Adds utility settings button to the group header.
+ /// Add utility settings button to the group header.
///
/// The created control.
public Image AddSettingsButton()
+ {
+ return AddHeaderButton("Settings", 0, Style.Current.Settings);
+ }
+
+ ///
+ /// Adds a button to the group header.
+ ///
+ /// The created control.
+ public Image AddHeaderButton(string tooltipText, float xOffset, SpriteHandle sprite)
{
var style = Style.Current;
+ const float padding = 2.0f;
var settingsButtonSize = Panel.HeaderHeight;
Panel.HeaderTextMargin = Panel.HeaderTextMargin with { Right = settingsButtonSize + Utilities.Constants.UIMargin };
; return new Image
{
- TooltipText = "Settings",
+ TooltipText = tooltipText,
AutoFocus = true,
AnchorPreset = AnchorPresets.TopRight,
Parent = Panel,
- Bounds = new Rectangle(Panel.Width - settingsButtonSize, 0, settingsButtonSize, settingsButtonSize),
+ Bounds = new Rectangle(Panel.Width - settingsButtonSize - xOffset, padding * 0.5f, settingsButtonSize - padding, settingsButtonSize - padding),
IsScrollable = false,
Color = style.ForegroundGrey,
Margin = new Margin(1),
- Brush = new SpriteBrush(style.Settings),
+ Brush = new SpriteBrush(sprite),
};
}
}