Need to merge this
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
_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<IPlayerManager>().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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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<SetTargetZoneMessage>(SetTargetZoneHandler);
|
||||
SubscribeNetworkEvent<SetCombatModeActiveMessage>(SetCombatModeActiveHandler);
|
||||
|
||||
var inputSystem = EntitySystemManager.GetEntitySystem<InputSystem>();
|
||||
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;
|
||||
|
||||
@@ -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<VerbsResponseMessage.VerbData>();
|
||||
//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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<IGameTiming>();
|
||||
|
||||
_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
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user