fix context menu bugs (#5527)
This commit is contained in:
@@ -1,10 +1,8 @@
|
|||||||
using Content.Client.Administration.UI.Tabs.AtmosTab;
|
|
||||||
using Content.Shared.Verbs;
|
using Content.Shared.Verbs;
|
||||||
using Robust.Client.Console;
|
using Robust.Client.Console;
|
||||||
using Robust.Client.ViewVariables;
|
using Robust.Client.ViewVariables;
|
||||||
using Robust.Shared.GameObjects;
|
using Robust.Shared.GameObjects;
|
||||||
using Robust.Shared.IoC;
|
using Robust.Shared.IoC;
|
||||||
using Robust.Shared.Map;
|
|
||||||
|
|
||||||
namespace Content.Client.Verbs
|
namespace Content.Client.Verbs
|
||||||
{
|
{
|
||||||
@@ -33,6 +31,7 @@ namespace Content.Client.Verbs
|
|||||||
verb.Text = "View Variables";
|
verb.Text = "View Variables";
|
||||||
verb.IconTexture = "/Textures/Interface/VerbIcons/vv.svg.192dpi.png";
|
verb.IconTexture = "/Textures/Interface/VerbIcons/vv.svg.192dpi.png";
|
||||||
verb.Act = () => _viewVariablesManager.OpenVV(args.Target);
|
verb.Act = () => _viewVariablesManager.OpenVV(args.Target);
|
||||||
|
verb.ClientExclusive = true; // opening VV window is client-side. Don't ask server to run this verb.
|
||||||
args.Verbs.Add(verb);
|
args.Verbs.Add(verb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,8 @@ namespace Content.Client.ContextMenu.UI
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void UpdateEntity(IEntity? entity = null)
|
public void UpdateEntity(IEntity? entity = null)
|
||||||
{
|
{
|
||||||
entity ??= Entity;
|
if (Entity != null && !Entity.Deleted)
|
||||||
|
entity ??= Entity;
|
||||||
|
|
||||||
EntityIcon.Sprite = entity?.GetComponentOrNull<ISpriteComponent>();
|
EntityIcon.Sprite = entity?.GetComponentOrNull<ISpriteComponent>();
|
||||||
|
|
||||||
|
|||||||
@@ -321,7 +321,7 @@ namespace Content.Client.ContextMenu.UI
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Look through a sub-menu and return the first entity.
|
/// Recursively look through a sub-menu and return the first entity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private IEntity? GetFirstEntityOrNull(ContextMenuPopup? menu)
|
private IEntity? GetFirstEntityOrNull(ContextMenuPopup? menu)
|
||||||
{
|
{
|
||||||
@@ -334,8 +334,13 @@ namespace Content.Client.ContextMenu.UI
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (entityElement.Entity != null)
|
if (entityElement.Entity != null)
|
||||||
return entityElement.Entity;
|
{
|
||||||
|
if (!entityElement.Entity.Deleted)
|
||||||
|
return entityElement.Entity;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if the element has no entity, its a group of entities with another attached sub-menu.
|
||||||
var entity = GetFirstEntityOrNull(entityElement.SubMenu);
|
var entity = GetFirstEntityOrNull(entityElement.SubMenu);
|
||||||
if (entity != null)
|
if (entity != null)
|
||||||
return entity;
|
return entity;
|
||||||
|
|||||||
@@ -37,8 +37,14 @@ namespace Content.Client.ContextMenu.UI
|
|||||||
(a, b) => a.Prototype!.ID == b.Prototype!.ID,
|
(a, b) => a.Prototype!.ID == b.Prototype!.ID,
|
||||||
(a, b) =>
|
(a, b) =>
|
||||||
{
|
{
|
||||||
var xStates = a.GetComponent<ISpriteComponent>().AllLayers.Where(e => e.Visible).Select(s => s.RsiState.Name);
|
a.TryGetComponent<ISpriteComponent>(out var spriteA);
|
||||||
var yStates = b.GetComponent<ISpriteComponent>().AllLayers.Where(e => e.Visible).Select(s => s.RsiState.Name);
|
b.TryGetComponent<ISpriteComponent>(out var spriteB);
|
||||||
|
|
||||||
|
if (spriteA == null || spriteB == null)
|
||||||
|
return spriteA == spriteB;
|
||||||
|
|
||||||
|
var xStates = spriteA.AllLayers.Where(e => e.Visible).Select(s => s.RsiState.Name);
|
||||||
|
var yStates = spriteB.AllLayers.Where(e => e.Visible).Select(s => s.RsiState.Name);
|
||||||
|
|
||||||
return xStates.OrderBy(t => t).SequenceEqual(yStates.OrderBy(t => t));
|
return xStates.OrderBy(t => t).SequenceEqual(yStates.OrderBy(t => t));
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user