From e88f179b5fb18e1826bb7af013429c9383ad0ab7 Mon Sep 17 00:00:00 2001 From: mirrorcult Date: Sun, 20 Feb 2022 20:42:16 -0700 Subject: [PATCH] Examine fixes (#6831) --- Content.Client/Examine/ExamineSystem.cs | 37 +++++-------------- Content.Server/Examine/ExamineSystem.cs | 19 ++++++++-- .../Examine/ExamineSystemMessages.cs | 10 +++-- .../health-examinable-comp.ftl | 2 +- 4 files changed, 33 insertions(+), 35 deletions(-) diff --git a/Content.Client/Examine/ExamineSystem.cs b/Content.Client/Examine/ExamineSystem.cs index 4a8e2fc0c8..1504621899 100644 --- a/Content.Client/Examine/ExamineSystem.cs +++ b/Content.Client/Examine/ExamineSystem.cs @@ -40,7 +40,6 @@ namespace Content.Client.Examine SubscribeLocalEvent>(AddExamineVerb); SubscribeNetworkEvent(OnExamineInfoResponse); - SubscribeNetworkEvent(OnVerbsResponse); CommandBinds.Builder .Bind(ContentKeyFunctions.ExamineEntity, new PointerInputCmdHandler(HandleExamine, outsidePrediction: true)) @@ -117,29 +116,13 @@ namespace Content.Client.Examine // opening at the old tooltip rather than the cursor/another entity, // since there's probably one open already if it's coming in from the server. OpenTooltip(player.Value, ev.EntityUid, ev.CenterAtCursor, ev.OpenAtOldTooltip); - UpdateTooltipInfo(player.Value, ev.EntityUid, ev.Message, ev.GetVerbs); - } - - private void OnVerbsResponse(VerbsResponseEvent ev) - { - if (ev.Verbs == null || _examineTooltipOpen == null) - return; - - var verbs = new List(); - - foreach (var verb in ev.Verbs) - { - if (verb is ExamineVerb ex) - verbs.Add(ex); - } - - AddVerbsToTooltip(verbs); + UpdateTooltipInfo(player.Value, ev.EntityUid, ev.Message, ev.Verbs); } public override void SendExamineTooltip(EntityUid player, EntityUid target, FormattedMessage message, bool getVerbs, bool centerAtCursor) { OpenTooltip(player, target, centerAtCursor, false); - UpdateTooltipInfo(player, target, message, getVerbs); + UpdateTooltipInfo(player, target, message); } /// @@ -163,7 +146,7 @@ namespace Content.Client.Examine if (openAtOldTooltip && oldTooltipPos != null) { - popupPos = oldTooltipPos.Value; + popupPos = _userInterfaceManager.ScreenToUIPosition(oldTooltipPos.Value); } else if (centeredOnCursor) { @@ -172,6 +155,7 @@ namespace Content.Client.Examine else { popupPos = _eyeManager.CoordinatesToScreen(Transform(target).Coordinates); + popupPos = _userInterfaceManager.ScreenToUIPosition(popupPos); } // Actually open the tooltip. @@ -221,7 +205,7 @@ namespace Content.Client.Examine /// /// Fills the examine tooltip with a message and buttons if applicable. /// - public void UpdateTooltipInfo(EntityUid player, EntityUid target, FormattedMessage message, bool getVerbs = true) + public void UpdateTooltipInfo(EntityUid player, EntityUid target, FormattedMessage message, List? verbs=null) { var vBox = _examineTooltipOpen?.GetChild(0).GetChild(0); if (vBox == null) @@ -239,12 +223,11 @@ namespace Content.Client.Examine break; } - if (getVerbs) - { - // Get verbs - var set = _verbSystem.GetVerbs(target, player, typeof(ExamineVerb)); - AddVerbsToTooltip(set); - } + verbs ??= new List(); + var totalVerbs = _verbSystem.GetLocalVerbs(target, player, typeof(ExamineVerb)); + totalVerbs.UnionWith(verbs); + + AddVerbsToTooltip(totalVerbs); } private void AddVerbsToTooltip(IEnumerable verbs) diff --git a/Content.Server/Examine/ExamineSystem.cs b/Content.Server/Examine/ExamineSystem.cs index 13f6bc332f..80bd1e44c1 100644 --- a/Content.Server/Examine/ExamineSystem.cs +++ b/Content.Server/Examine/ExamineSystem.cs @@ -1,4 +1,7 @@ +using System.Linq; +using Content.Server.Verbs; using Content.Shared.Examine; +using Content.Shared.Verbs; using JetBrains.Annotations; using Robust.Server.GameObjects; using Robust.Server.Player; @@ -11,6 +14,8 @@ namespace Content.Server.Examine [UsedImplicitly] public sealed class ExamineSystem : ExamineSystemShared { + [Dependency] private readonly VerbSystem _verbSystem = default!; + private static readonly FormattedMessage _entityNotFoundMessage; static ExamineSystem() @@ -33,8 +38,12 @@ namespace Content.Server.Examine var session = actor.PlayerSession; + SortedSet? verbs = null; + if (getVerbs) + verbs = _verbSystem.GetLocalVerbs(target, player, typeof(ExamineVerb)); + var ev = new ExamineSystemMessages.ExamineInfoResponseMessage( - target, message, getVerbs, centerAtCursor + target, message, verbs?.ToList(), centerAtCursor ); RaiseNetworkEvent(ev, session.ConnectedClient); @@ -51,12 +60,16 @@ namespace Content.Server.Examine || !CanExamine(playerEnt, request.EntityUid)) { RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage( - request.EntityUid, _entityNotFoundMessage, request.GetVerbs), channel); + request.EntityUid, _entityNotFoundMessage), channel); return; } + SortedSet? verbs = null; + if (request.GetVerbs) + verbs = _verbSystem.GetLocalVerbs(request.EntityUid, playerEnt, typeof(ExamineVerb)); + var text = GetExamineText(request.EntityUid, player.AttachedEntity); - RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage(request.EntityUid, text, request.GetVerbs), channel); + RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage(request.EntityUid, text, verbs?.ToList()), channel); } } } diff --git a/Content.Shared/Examine/ExamineSystemMessages.cs b/Content.Shared/Examine/ExamineSystemMessages.cs index 8bccd81f24..4274974efe 100644 --- a/Content.Shared/Examine/ExamineSystemMessages.cs +++ b/Content.Shared/Examine/ExamineSystemMessages.cs @@ -1,4 +1,5 @@ using System; +using Content.Shared.Verbs; using Robust.Shared.GameObjects; using Robust.Shared.Serialization; using Robust.Shared.Utility; @@ -27,16 +28,17 @@ namespace Content.Shared.Examine public readonly EntityUid EntityUid; public readonly FormattedMessage Message; - public readonly bool GetVerbs; + public List? Verbs; + public readonly bool CenterAtCursor; public readonly bool OpenAtOldTooltip; - public ExamineInfoResponseMessage(EntityUid entityUid, FormattedMessage message, - bool getVerbs=false, bool centerAtCursor=true, bool openAtOldTooltip=true) + public ExamineInfoResponseMessage(EntityUid entityUid, FormattedMessage message, List? verbs=null, + bool centerAtCursor=true, bool openAtOldTooltip=true) { EntityUid = entityUid; Message = message; - GetVerbs = getVerbs; + Verbs = verbs; CenterAtCursor = centerAtCursor; OpenAtOldTooltip = openAtOldTooltip; } diff --git a/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl b/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl index 844a84a457..64bae9676f 100644 --- a/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl +++ b/Resources/Locale/en-US/health-examinable/health-examinable-comp.ftl @@ -1,2 +1,2 @@ health-examinable-verb-text = Health -health-examinable-verb-disabled = Not close enough +health-examinable-verb-disabled = Need to be in close range