Add commands to show and hide organs inside bodies (#2292)

* Add seeing entities through containers and on the context menu and 4 commands

* Remove unused imports
This commit is contained in:
DrSmugleaf
2020-10-26 12:11:32 +01:00
committed by GitHub
parent 8a2e0ed142
commit ebe8a82033
8 changed files with 257 additions and 15 deletions

View File

@@ -1,7 +1,12 @@
using System.Collections.Generic;
#nullable enable
using System.Collections.Generic;
using System.Reflection;
using Content.Shared.GameObjects.EntitySystemMessages;
using Content.Shared.GameObjects.Verbs;
using Content.Shared.GameTicking;
using Robust.Server.Interfaces.Player;
using Robust.Server.Player;
using Robust.Shared.Enums;
using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.IoC;
@@ -10,18 +15,63 @@ using static Content.Shared.GameObjects.EntitySystemMessages.VerbSystemMessages;
namespace Content.Server.GameObjects.EntitySystems
{
public class VerbSystem : SharedVerbSystem
public class VerbSystem : SharedVerbSystem, IResettingEntitySystem
{
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
private readonly HashSet<IPlayerSession> _seesThroughContainers = new HashSet<IPlayerSession>();
public override void Initialize()
{
base.Initialize();
IoCManager.InjectDependencies(this);
SubscribeNetworkEvent<RequestVerbsMessage>(RequestVerbs);
SubscribeNetworkEvent<UseVerbMessage>(UseVerb);
IoCManager.InjectDependencies(this);
_playerManager.PlayerStatusChanged += PlayerStatusChanged;
}
private void PlayerStatusChanged(object? sender, SessionStatusEventArgs args)
{
if (args.NewStatus == SessionStatus.Disconnected)
{
_seesThroughContainers.Remove(args.Session);
}
}
public void Reset()
{
_seesThroughContainers.Clear();
}
public void AddContainerVisibility(IPlayerSession session)
{
if (!_seesThroughContainers.Add(session))
{
return;
}
var message = new PlayerContainerVisibilityMessage(true);
RaiseNetworkEvent(message, session.ConnectedClient);
}
public void RemoveContainerVisibility(IPlayerSession session)
{
if (!_seesThroughContainers.Remove(session))
{
return;
}
var message = new PlayerContainerVisibilityMessage(false);
RaiseNetworkEvent(message, session.ConnectedClient);
}
public bool HasContainerVisibility(IPlayerSession session)
{
return _seesThroughContainers.Contains(session);
}
private void UseVerb(UseVerbMessage use, EntitySessionEventArgs eventArgs)