From e40f9b20e357e5a8cb0d1332413ebd46d9731e11 Mon Sep 17 00:00:00 2001 From: Acruid Date: Thu, 16 May 2019 14:41:43 -0700 Subject: [PATCH] Added a range check for examining entities. Now you can't examine things across the map. Made the examine window a little transparent so that you can see things behind it. This prevents the examine popup from occluding gameplay. Moved the ExamineEntity bind from Human to Common context so that it will always be available to clients. Ghosts can now examine things. --- .../EntitySystems/ExamineSystem.cs | 15 +++++++++- Content.Client/Input/ContentContexts.cs | 2 +- .../EntitySystems/Click/ExamineSystem.cs | 30 ++++++++++++------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs index 7133287378..be25d0be11 100644 --- a/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/ExamineSystem.cs @@ -1,4 +1,4 @@ -using System.Threading; +using System.Threading; using System.Threading.Tasks; using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.Input; @@ -7,6 +7,7 @@ using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Interfaces.GameObjects.Components; using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.UserInterface; +using Robust.Client.Player; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; @@ -25,10 +26,14 @@ namespace Content.Client.GameObjects.EntitySystems { public const string StyleClassEntityTooltip = "entity-tooltip"; + public const float ExamineRange = 1.5f; + public const float ExamineRangeSquared = ExamineRange * ExamineRange; + #pragma warning disable 649 [Dependency] private IInputManager _inputManager; [Dependency] private IUserInterfaceManager _userInterfaceManager; [Dependency] private IEntityManager _entityManager; + [Dependency] private IPlayerManager _playerManager; #pragma warning restore 649 private Popup _examineTooltipOpen; @@ -56,6 +61,13 @@ namespace Content.Client.GameObjects.EntitySystems return; } + var playerEntity = _playerManager.LocalPlayer.ControlledEntity; + if(playerEntity == null) + return; + + if((entity.Transform.WorldPosition - playerEntity.Transform.WorldPosition).LengthSquared > ExamineRangeSquared) + return; + DoExamine(entity); } @@ -70,6 +82,7 @@ namespace Content.Client.GameObjects.EntitySystems _userInterfaceManager.StateRoot.AddChild(_examineTooltipOpen); var panel = new PanelContainer(); panel.AddStyleClass(StyleClassEntityTooltip); + panel.ModulateSelfOverride = Color.LightGray.WithAlpha(0.90f); _examineTooltipOpen.AddChild(panel); panel.SetAnchorAndMarginPreset(Control.LayoutPreset.Wide); var vBox = new VBoxContainer(); diff --git a/Content.Client/Input/ContentContexts.cs b/Content.Client/Input/ContentContexts.cs index 53d7cb71df..1e32bfee30 100644 --- a/Content.Client/Input/ContentContexts.cs +++ b/Content.Client/Input/ContentContexts.cs @@ -13,13 +13,13 @@ namespace Content.Client.Input { var common = contexts.GetContext("common"); common.AddFunction(ContentKeyFunctions.FocusChat); + common.AddFunction(ContentKeyFunctions.ExamineEntity); var human = contexts.GetContext("human"); human.AddFunction(ContentKeyFunctions.SwapHands); human.AddFunction(ContentKeyFunctions.Drop); human.AddFunction(ContentKeyFunctions.ActivateItemInHand); human.AddFunction(ContentKeyFunctions.OpenCharacterMenu); - human.AddFunction(ContentKeyFunctions.ExamineEntity); human.AddFunction(ContentKeyFunctions.UseItemInHand); human.AddFunction(ContentKeyFunctions.ActivateItemInWorld); human.AddFunction(ContentKeyFunctions.ThrowItemInHand); diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index 0c655a0351..d189e3f7b3 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -29,8 +29,12 @@ namespace Content.Server.GameObjects.EntitySystems public class ExamineSystem : EntitySystem { + public const float ExamineRange = 1.5f; + public const float ExamineRangeSquared = ExamineRange * ExamineRange; + #pragma warning disable 649 [Dependency] private IEntityManager _entityManager; + [Dependency] private IPlayerManager _playerManager; #pragma warning restore 649 private static readonly FormattedMessage _entityNotFoundMessage; @@ -95,18 +99,24 @@ namespace Content.Server.GameObjects.EntitySystems { base.HandleNetMessage(channel, message); - if (message is ExamineSystemMessages.RequestExamineInfoMessage request) - { - if (!_entityManager.TryGetEntity(request.EntityUid, out var entity)) - { - RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage( - request.EntityUid, _entityNotFoundMessage)); - return; - } + if (!(message is ExamineSystemMessages.RequestExamineInfoMessage request)) + return; - var text = GetExamineText(entity); - RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage(request.EntityUid, text)); + var session = _playerManager.GetSessionByChannel(channel); + var playerEnt = session.AttachedEntity; + + if((playerEnt == null) || + (!_entityManager.TryGetEntity(request.EntityUid, out var entity)) || + (entity.Transform.MapID != playerEnt.Transform.MapID) || + ((entity.Transform.WorldPosition - playerEnt.Transform.WorldPosition).LengthSquared > ExamineRangeSquared)) + { + RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage( + request.EntityUid, _entityNotFoundMessage)); + return; } + + var text = GetExamineText(entity); + RaiseNetworkEvent(new ExamineSystemMessages.ExamineInfoResponseMessage(request.EntityUid, text)); } } }