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)); } } }