From 705aeceba620f13ee787968be3671da1f67945ed Mon Sep 17 00:00:00 2001 From: Pieter-Jan Briers Date: Wed, 25 Mar 2020 11:16:57 +0100 Subject: [PATCH] Need to merge this --- .../Components/Mobs/CombatModeComponent.cs | 41 ++++++++-------- .../EntitySystems/CombatModeSystem.cs | 28 ++++++++--- .../Components/Mobs/CombatModeComponent.cs | 30 ------------ .../EntitySystems/Click/ExamineSystem.cs | 12 ++--- .../EntitySystems/CombatModeSystem.cs | 46 +----------------- .../GameObjects/EntitySystems/VerbSystem.cs | 21 +++------ .../Mobs/SharedCombatModeComponent.cs | 47 +++++++++++++++++++ 7 files changed, 104 insertions(+), 121 deletions(-) diff --git a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs index e003d99569..5594677999 100644 --- a/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs +++ b/Content.Client/GameObjects/Components/Mobs/CombatModeComponent.cs @@ -1,4 +1,5 @@ -using Content.Client.UserInterface; +using System; +using Content.Client.UserInterface; using Content.Shared.GameObjects.Components.Mobs; using Robust.Client.GameObjects; using Robust.Client.Player; @@ -6,7 +7,6 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Network; using Robust.Shared.IoC; -using Robust.Shared.ViewVariables; namespace Content.Client.GameObjects.Components.Mobs { @@ -15,29 +15,25 @@ namespace Content.Client.GameObjects.Components.Mobs { #pragma warning disable 649 [Dependency] private readonly IPlayerManager _playerManager; -#pragma warning restore 649 - - [ViewVariables(VVAccess.ReadWrite)] - public bool IsInCombatMode { get; private set; } - - [ViewVariables(VVAccess.ReadWrite)] - public TargetingZone ActiveZone { get; private set; } - -#pragma warning disable 649 [Dependency] private readonly IGameHud _gameHud; #pragma warning restore 649 - public override void HandleComponentState(ComponentState curState, ComponentState nextState) + public override bool IsInCombatMode { - base.HandleComponentState(curState, nextState); - - if (!(curState is CombatModeComponentState state)) - return; - - IsInCombatMode = state.IsInCombatMode; - ActiveZone = state.TargetingZone; - if (Owner == _playerManager.LocalPlayer.ControlledEntity) + get => base.IsInCombatMode; + set { + base.IsInCombatMode = value; + UpdateHud(); + } + } + + public override TargetingZone ActiveZone + { + get => base.ActiveZone; + set + { + base.ActiveZone = value; UpdateHud(); } } @@ -61,6 +57,11 @@ namespace Content.Client.GameObjects.Components.Mobs private void UpdateHud() { + if (Owner != _playerManager.LocalPlayer.ControlledEntity) + { + return; + } + _gameHud.CombatModeActive = IsInCombatMode; _gameHud.TargetingZone = ActiveZone; } diff --git a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs index 8d73a4fa5a..d6895276b1 100644 --- a/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/CombatModeSystem.cs @@ -2,15 +2,16 @@ using Content.Client.GameObjects.Components.Mobs; using Content.Client.UserInterface; using Content.Client.Utility; using Content.Shared.GameObjects.Components.Mobs; -using Content.Shared.GameObjects.EntitySystemMessages; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; +using JetBrains.Annotations; +using Robust.Client.GameObjects; using Robust.Client.GameObjects.EntitySystems; using Robust.Client.Graphics.Drawing; using Robust.Client.Graphics.Overlays; using Robust.Client.Interfaces.Graphics.Overlays; using Robust.Client.Interfaces.Input; using Robust.Client.Player; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Input; using Robust.Shared.IoC; using Robust.Shared.Maths; @@ -19,7 +20,8 @@ using static Content.Client.StaticIoC; namespace Content.Client.GameObjects.EntitySystems { - public sealed class CombatModeSystem : EntitySystem + [UsedImplicitly] + public sealed class CombatModeSystem : SharedCombatModeSystem { private const float AttackTimeThreshold = 0.15f; @@ -44,10 +46,24 @@ namespace Content.Client.GameObjects.EntitySystems _inputSystem = EntitySystemManager.GetEntitySystem(); _inputSystem.BindMap.BindFunction(ContentKeyFunctions.UseOrAttack, new InputHandler(this)); - + _inputSystem.BindMap.BindFunction(ContentKeyFunctions.ToggleCombatMode, + InputCmdHandler.FromDelegate(CombatModeToggled, handle: false)); _overlayManager.AddOverlay(new CombatModeOverlay(this)); } + private void CombatModeToggled(ICommonSession session) + { + var player = IoCManager.Resolve().LocalPlayer; + + if (player.ControlledEntity == null || + !player.ControlledEntity.TryGetComponent(out CombatModeComponent combatModeComponent)) + { + return; + } + + combatModeComponent.IsInCombatMode = !combatModeComponent.IsInCombatMode; + } + public override void Shutdown() { base.Shutdown(); @@ -68,12 +84,12 @@ namespace Content.Client.GameObjects.EntitySystems private void OnTargetingZoneChanged(TargetingZone obj) { - RaiseNetworkEvent(new CombatModeSystemMessages.SetTargetZoneMessage(obj)); + EntityManager.RaisePredictiveEvent(new SetTargetZoneMessage(obj)); } private void OnCombatModeChanged(bool obj) { - RaiseNetworkEvent(new CombatModeSystemMessages.SetCombatModeActiveMessage(obj)); + EntityManager.RaisePredictiveEvent(new SetCombatModeActiveMessage(obj)); // Just in case. UseOrAttackIsDown = false; diff --git a/Content.Server/GameObjects/Components/Mobs/CombatModeComponent.cs b/Content.Server/GameObjects/Components/Mobs/CombatModeComponent.cs index f8547b0830..334f8445cb 100644 --- a/Content.Server/GameObjects/Components/Mobs/CombatModeComponent.cs +++ b/Content.Server/GameObjects/Components/Mobs/CombatModeComponent.cs @@ -1,6 +1,5 @@ using Content.Shared.GameObjects.Components.Mobs; using Robust.Shared.GameObjects; -using Robust.Shared.ViewVariables; namespace Content.Server.GameObjects.Components.Mobs { @@ -12,34 +11,5 @@ namespace Content.Server.GameObjects.Components.Mobs [RegisterComponent] public sealed class CombatModeComponent : SharedCombatModeComponent { - private bool _isInCombatMode; - private TargetingZone _activeZone; - - [ViewVariables(VVAccess.ReadWrite)] - public bool IsInCombatMode - { - get => _isInCombatMode; - set - { - _isInCombatMode = value; - Dirty(); - } - } - - [ViewVariables(VVAccess.ReadWrite)] - public TargetingZone ActiveZone - { - get => _activeZone; - set - { - _activeZone = value; - Dirty(); - } - } - - public override ComponentState GetComponentState() - { - return new CombatModeComponentState(IsInCombatMode, ActiveZone); - } } } diff --git a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs index 2f67454a90..b8f2d3cd76 100644 --- a/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/Click/ExamineSystem.cs @@ -1,6 +1,7 @@ using Content.Shared.GameObjects.EntitySystemMessages; using Content.Shared.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Maths; @@ -20,7 +21,6 @@ namespace Content.Server.GameObjects.EntitySystems { #pragma warning disable 649 [Dependency] private IEntityManager _entityManager; - [Dependency] private IPlayerManager _playerManager; #pragma warning restore 649 private static readonly FormattedMessage _entityNotFoundMessage; @@ -75,14 +75,12 @@ namespace Content.Server.GameObjects.EntitySystems return message; } - private void ExamineInfoRequest(ExamineSystemMessages.RequestExamineInfoMessage request) + private void ExamineInfoRequest(ExamineSystemMessages.RequestExamineInfoMessage request, EntitySessionEventArgs eventArgs) { - var channel = request.NetChannel; - if(channel == null) - return; - - var session = _playerManager.GetSessionByChannel(channel); + var player = (IPlayerSession) eventArgs.SenderSession; + var session = eventArgs.SenderSession; var playerEnt = session.AttachedEntity; + var channel = player.ConnectedClient; if (playerEnt == null || !_entityManager.TryGetEntity(request.EntityUid, out var entity) diff --git a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs index ec560d9295..4f72374ff3 100644 --- a/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/CombatModeSystem.cs @@ -1,69 +1,27 @@ using Content.Server.GameObjects.Components.Mobs; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Input; using JetBrains.Annotations; using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.Player; -using Robust.Shared.GameObjects; -using Robust.Shared.GameObjects.Systems; using Robust.Shared.Input; using Robust.Shared.IoC; using Robust.Shared.Players; -using static Content.Shared.GameObjects.EntitySystemMessages.CombatModeSystemMessages; namespace Content.Server.GameObjects.EntitySystems { [UsedImplicitly] - public sealed class CombatModeSystem : EntitySystem + public sealed class CombatModeSystem : SharedCombatModeSystem { -#pragma warning disable 649 - [Dependency] private readonly IPlayerManager _playerManager; -#pragma warning restore 649 - public override void Initialize() { base.Initialize(); - SubscribeNetworkEvent(SetTargetZoneHandler); - SubscribeNetworkEvent(SetCombatModeActiveHandler); - var inputSystem = EntitySystemManager.GetEntitySystem(); inputSystem.BindMap.BindFunction(ContentKeyFunctions.ToggleCombatMode, InputCmdHandler.FromDelegate(CombatModeToggled)); } - private void SetCombatModeActiveHandler(SetCombatModeActiveMessage ev) - { - if (!TryGetCombatComponent(ev, out var combatModeComponent)) - return; - - combatModeComponent.IsInCombatMode = ev.Active; - } - - private void SetTargetZoneHandler(SetTargetZoneMessage ev) - { - if (!TryGetCombatComponent(ev, out var combatModeComponent)) - return; - - combatModeComponent.ActiveZone = ev.TargetZone; - } - - private bool TryGetCombatComponent(EntitySystemMessage ev, out CombatModeComponent combatModeComponent) - { - if (ev.NetChannel == null) - { - combatModeComponent = default; - return false; - } - - var player = _playerManager.GetSessionByChannel(ev.NetChannel); - if (player.AttachedEntity != null && player.AttachedEntity.TryGetComponent(out combatModeComponent)) - return true; - - combatModeComponent = default; - return false; - - } - private static void CombatModeToggled(ICommonSession session) { var playerSession = (IPlayerSession) session; diff --git a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs index 95be3be1aa..f84d55bd00 100644 --- a/Content.Server/GameObjects/EntitySystems/VerbSystem.cs +++ b/Content.Server/GameObjects/EntitySystems/VerbSystem.cs @@ -2,6 +2,7 @@ using System.Reflection; using Content.Shared.GameObjects; using Robust.Server.Interfaces.Player; +using Robust.Shared.GameObjects; using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; @@ -13,7 +14,6 @@ namespace Content.Server.GameObjects.EntitySystems { #pragma warning disable 649 [Dependency] private readonly IEntityManager _entityManager; - [Dependency] private readonly IPlayerManager _playerManager; #pragma warning restore 649 public override void Initialize() @@ -26,18 +26,14 @@ namespace Content.Server.GameObjects.EntitySystems IoCManager.InjectDependencies(this); } - private void UseVerb(UseVerbMessage use) + private void UseVerb(UseVerbMessage use, EntitySessionEventArgs eventArgs) { - var channel = use.NetChannel; - if(channel == null) - return; - if (!_entityManager.TryGetEntity(use.EntityUid, out var entity)) { return; } - var session = _playerManager.GetSessionByChannel(channel); + var session = eventArgs.SenderSession; var userEntity = session.AttachedEntity; foreach (var (component, verb) in VerbUtility.GetVerbs(entity)) @@ -83,19 +79,16 @@ namespace Content.Server.GameObjects.EntitySystems } } - private void RequestVerbs(RequestVerbsMessage req) + private void RequestVerbs(RequestVerbsMessage req, EntitySessionEventArgs eventArgs) { - var channel = req.NetChannel; - if (channel == null) - return; + var player = (IPlayerSession) eventArgs.SenderSession; if (!_entityManager.TryGetEntity(req.EntityUid, out var entity)) { return; } - var session = _playerManager.GetSessionByChannel(channel); - var userEntity = session.AttachedEntity; + var userEntity = player.AttachedEntity; var data = new List(); //Get verbs, component dependent. @@ -125,7 +118,7 @@ namespace Content.Server.GameObjects.EntitySystems } var response = new VerbsResponseMessage(data, req.EntityUid); - RaiseNetworkEvent(response, channel); + RaiseNetworkEvent(response, player.ConnectedClient); } } } diff --git a/Content.Shared/GameObjects/Components/Mobs/SharedCombatModeComponent.cs b/Content.Shared/GameObjects/Components/Mobs/SharedCombatModeComponent.cs index 047d4c2cce..507a61e48d 100644 --- a/Content.Shared/GameObjects/Components/Mobs/SharedCombatModeComponent.cs +++ b/Content.Shared/GameObjects/Components/Mobs/SharedCombatModeComponent.cs @@ -1,6 +1,9 @@ using System; using Robust.Shared.GameObjects; +using Robust.Shared.Interfaces.Timing; +using Robust.Shared.IoC; using Robust.Shared.Serialization; +using Robust.Shared.ViewVariables; namespace Content.Shared.GameObjects.Components.Mobs { @@ -9,6 +12,50 @@ namespace Content.Shared.GameObjects.Components.Mobs public sealed override uint? NetID => ContentNetIDs.COMBATMODE; public override string Name => "CombatMode"; + private bool _isInCombatMode; + private TargetingZone _activeZone; + + [ViewVariables(VVAccess.ReadWrite)] + public virtual bool IsInCombatMode + { + get => _isInCombatMode; + set + { + var gt = IoCManager.Resolve(); + + _isInCombatMode = value; + Dirty(); + } + } + + [ViewVariables(VVAccess.ReadWrite)] + public virtual TargetingZone ActiveZone + { + get => _activeZone; + set + { + _activeZone = value; + Dirty(); + } + } + + public override void HandleComponentState(ComponentState curState, ComponentState nextState) + { + base.HandleComponentState(curState, nextState); + + if (!(curState is CombatModeComponentState state)) + return; + + IsInCombatMode = state.IsInCombatMode; + ActiveZone = state.TargetingZone; + } + + + public override ComponentState GetComponentState() + { + return new CombatModeComponentState(IsInCombatMode, ActiveZone); + } + [Serializable, NetSerializable] protected sealed class CombatModeComponentState : ComponentState {