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.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,9 +99,16 @@ namespace Content.Server.GameObjects.EntitySystems
|
||||
{
|
||||
base.HandleNetMessage(channel, message);
|
||||
|
||||
if (message is ExamineSystemMessages.RequestExamineInfoMessage request)
|
||||
{
|
||||
if (!_entityManager.TryGetEntity(request.EntityUid, out var entity))
|
||||
if (!(message is ExamineSystemMessages.RequestExamineInfoMessage request))
|
||||
return;
|
||||
|
||||
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));
|
||||
@@ -109,4 +120,3 @@ namespace Content.Server.GameObjects.EntitySystems
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user