diff --git a/Content.Shared/LieDown/SharedLieDownSystem.cs b/Content.Shared/LieDown/SharedLieDownSystem.cs index b47b5dbc666..9db46ed0c41 100644 --- a/Content.Shared/LieDown/SharedLieDownSystem.cs +++ b/Content.Shared/LieDown/SharedLieDownSystem.cs @@ -9,163 +9,163 @@ using Robust.Shared.Input.Binding; using Robust.Shared.Player; -namespace Content.Shared.LieDown +namespace Content.Shared.LieDown; + +public class SharedLieDownSystem : EntitySystem { - public class SharedLieDownSystem : EntitySystem + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + [Dependency] private readonly StandingStateSystem _standing = default!; + + public override void Initialize() { - [Dependency] private readonly SharedActionsSystem _actions = default!; - [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; - [Dependency] private readonly StandingStateSystem _standing = default!; + SubscribeLocalEvent(OnInteractHand); + SubscribeLocalEvent>(AddStandUpVerb); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnRefresh); + + SubscribeLocalEvent(OnComponentStartup); + SubscribeLocalEvent(OnComponentShutdown); + + // Bind keybinds to lie down action + SubscribeNetworkEvent(OnChangeAction); + CommandBinds.Builder + .Bind(ContentKeyFunctions.LieDownStandUp, InputCmdHandler.FromDelegate(ChangeLyingState)) + .Register(); + } - public override void Initialize() - { - SubscribeLocalEvent(OnInteractHand); - SubscribeLocalEvent>(AddStandUpVerb); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnRefresh); - - SubscribeLocalEvent(OnComponentStartup); - SubscribeLocalEvent(OnComponentShutdown); - - // Bind keybinds to lie down action - SubscribeNetworkEvent(OnChangeAction); - CommandBinds.Builder - .Bind(ContentKeyFunctions.LieDownStandUp, InputCmdHandler.FromDelegate(ChangeLyingState)) - .Register(); - } + private void OnComponentShutdown(EntityUid uid, LyingDownComponent component, ComponentShutdown args) + { + SwitchActions(uid); + _movement.RefreshMovementSpeedModifiers(uid); + } - private void OnComponentShutdown(EntityUid uid, LyingDownComponent component, ComponentShutdown args) - { - SwitchActions(uid); - _movement.RefreshMovementSpeedModifiers(uid); - } + private void OnComponentStartup(EntityUid uid, LyingDownComponent component, ComponentStartup args) + { + SwitchActions(uid); + _movement.RefreshMovementSpeedModifiers(uid); + } + + /// + /// Send an update event when player pressed keybind. + /// + private void ChangeLyingState(ICommonSession? session) + { + RaiseNetworkEvent(new ChangeStandingStateEvent()); + } - private void OnComponentStartup(EntityUid uid, LyingDownComponent component, ComponentStartup args) + /// + /// Process player event, that pressed keybind. + /// + private void OnChangeAction(ChangeStandingStateEvent msg, EntitySessionEventArgs args) + { + if (!args.SenderSession.AttachedEntity.HasValue) + return; + + var uid = args.SenderSession.AttachedEntity.Value; + if (_standing.IsDown(uid)) { - SwitchActions(uid); - _movement.RefreshMovementSpeedModifiers(uid); + TryStandUp(uid); } - - /// - /// Send an update event when player pressed keybind. - /// - private void ChangeLyingState(ICommonSession? session) + else { - RaiseNetworkEvent(new ChangeStandingStateEvent()); + TryLieDown(uid); } + } - /// - /// Process player event, that pressed keybind. - /// - private void OnChangeAction(ChangeStandingStateEvent msg, EntitySessionEventArgs args) + /// + /// Update movement speed according to the lying state. + /// + private void OnRefresh(EntityUid uid, LyingDownComponent component, RefreshMovementSpeedModifiersEvent args) + { + if (_standing.IsDown(uid)) { - if (!args.SenderSession.AttachedEntity.HasValue) - return; - - var uid = args.SenderSession.AttachedEntity.Value; - if (_standing.IsDown(uid)) - { - TryStandUp(uid); - } - else - { - TryLieDown(uid); - } + args.ModifySpeed(0f, 0f); } - - /// - /// Update movement speed according to the lying state. - /// - private void OnRefresh(EntityUid uid, LyingDownComponent component, RefreshMovementSpeedModifiersEvent args) + else { - if (_standing.IsDown(uid)) - { - args.ModifySpeed(0.1f, 0.1f); - } - else - { - args.ModifySpeed(1f, 1f); - } + args.ModifySpeed(1f, 1f); } + } - /// - /// Change available to player actions. - /// - private void SwitchActions(EntityUid uid) + /// + /// Change available to player actions. + /// + private void SwitchActions(EntityUid uid) + { + var standingComponent = Comp(uid); + if (_standing.IsDown(uid)) { - var standingComponent = Comp(uid); - if (_standing.IsDown(uid)) - { - _actions.AddAction(uid, ref standingComponent.StandUpActionEntity, standingComponent.StandUpAction); - _actions.RemoveAction(uid, standingComponent.LieDownActionEntity); - } - else - { - _actions.AddAction(uid, ref standingComponent.LieDownActionEntity, standingComponent.LieDownAction); - _actions.RemoveAction(uid, standingComponent.StandUpActionEntity); - } + _actions.AddAction(uid, ref standingComponent.StandUpActionEntity, standingComponent.StandUpAction); + _actions.RemoveAction(uid, standingComponent.LieDownActionEntity); } - - /// - /// When interacting with a lying down person, add ability to make him stand up. - /// - private void OnInteractHand(EntityUid uid, LyingDownComponent component, InteractHandEvent args) + else { - TryStandUp(args.Target); + _actions.AddAction(uid, ref standingComponent.LieDownActionEntity, standingComponent.LieDownAction); + _actions.RemoveAction(uid, standingComponent.StandUpActionEntity); } + } - /// - /// Add a verb to player menu to make him stand up. - /// - private void AddStandUpVerb(EntityUid uid, LyingDownComponent component, GetVerbsEvent args) - { - if (!args.CanInteract || !args.CanAccess) - return; + /// + /// When interacting with a lying down person, add ability to make him stand up. + /// + private void OnInteractHand(EntityUid uid, LyingDownComponent component, InteractHandEvent args) + { + TryStandUp(args.Target); + } - if (args.Target == args.User) - return; + /// + /// Add a verb to player menu to make him stand up. + /// + private void AddStandUpVerb(EntityUid uid, LyingDownComponent component, GetVerbsEvent args) + { + if (!args.CanInteract || !args.CanAccess) + return; - if (!_standing.IsDown(uid)) - return; + if (args.Target == args.User) + return; - AlternativeVerb verb = new() - { - Act = () => - { - TryStandUp(uid); - }, - Text = Loc.GetString(component.MakeToStandUpAction!), - Priority = 2 - }; - - args.Verbs.Add(verb); - } + if (!_standing.IsDown(uid)) + return; - /// - /// If somebody examined a lying down person, add description. - /// - private void OnExamined(EntityUid uid, LyingDownComponent component, ExaminedEvent args) + AlternativeVerb verb = new() { - if (args.IsInDetailsRange && _standing.IsDown(uid)) + Act = () => { - args.PushMarkup(Loc.GetString("lying-down-examined", ("target", Identity.Entity(uid, EntityManager)))); - } - } + TryStandUp(uid); + }, + Text = Loc.GetString(component.MakeToStandUpAction!), + Priority = 2 + }; - public void TryStandUp(EntityUid uid) - { - if (!_standing.IsDown(uid) || !_standing.Stand(uid)) - return; + args.Verbs.Add(verb); + } - RemCompDeferred(uid); + /// + /// If somebody examined a lying down person, add description. + /// + private void OnExamined(EntityUid uid, LyingDownComponent component, ExaminedEvent args) + { + if (args.IsInDetailsRange && _standing.IsDown(uid)) + { + args.PushMarkup(Loc.GetString("lying-down-examined", ("target", Identity.Entity(uid, EntityManager)))); } + } - public void TryLieDown(EntityUid uid) - { - if (_standing.IsDown(uid) || !_standing.Down(uid, false, false)) - return; + public void TryStandUp(EntityUid uid) + { + if (!_standing.IsDown(uid) || !_standing.Stand(uid)) + return; - EnsureComp(uid); - } + RemCompDeferred(uid); + } + + public void TryLieDown(EntityUid uid) + { + if (_standing.IsDown(uid) || !_standing.Down(uid, false, false)) + return; + + EnsureComp(uid); } } + diff --git a/Content.Shared/Standing/StandingStateComponent.cs b/Content.Shared/Standing/StandingStateComponent.cs index 65737bd65f0..b4516dd6157 100644 --- a/Content.Shared/Standing/StandingStateComponent.cs +++ b/Content.Shared/Standing/StandingStateComponent.cs @@ -6,39 +6,40 @@ using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; -namespace Content.Shared.Standing +namespace Content.Shared.Standing; + + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +[Access(typeof(StandingStateSystem))] +public sealed partial class StandingStateComponent : Component { - [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] - [Access(typeof(StandingStateSystem))] - public sealed partial class StandingStateComponent : Component - { - [ViewVariables(VVAccess.ReadWrite)] - [DataField] - public SoundSpecifier DownSound { get; private set; } = new SoundCollectionSpecifier("BodyFall"); - - [DataField, AutoNetworkedField] - public bool Standing = true; - - /// - /// List of fixtures that had their collision mask changed when the entity was downed. - /// Required for re-adding the collision mask. - /// - [DataField, AutoNetworkedField] - public List ChangedFixtures = new(); - - [DataField] - public EntProtoId LieDownAction = "ActionLieDown"; - - [DataField, AutoNetworkedField] - public EntityUid? LieDownActionEntity; - - [DataField("stand-up-action")] - public EntProtoId StandUpAction = "ActionStandUp"; - - [DataField, AutoNetworkedField] - public EntityUid? StandUpActionEntity; - } - - public sealed partial class LieDownActionEvent : InstantActionEvent {} - public sealed partial class StandUpActionEvent : InstantActionEvent {} + [ViewVariables(VVAccess.ReadWrite)] + [DataField] + public SoundSpecifier DownSound { get; private set; } = new SoundCollectionSpecifier("BodyFall"); + + [DataField, AutoNetworkedField] + public bool Standing = true; + + /// + /// List of fixtures that had their collision mask changed when the entity was downed. + /// Required for re-adding the collision mask. + /// + [DataField, AutoNetworkedField] + public List ChangedFixtures = new(); + + [DataField] + public EntProtoId LieDownAction = "ActionLieDown"; + + [DataField, AutoNetworkedField] + public EntityUid? LieDownActionEntity; + + [DataField("stand-up-action")] + public EntProtoId StandUpAction = "ActionStandUp"; + + [DataField, AutoNetworkedField] + public EntityUid? StandUpActionEntity; } + +public sealed partial class LieDownActionEvent : InstantActionEvent {} +public sealed partial class StandUpActionEvent : InstantActionEvent {} + diff --git a/Resources/keybinds.yml b/Resources/keybinds.yml index c11f59d17c9..dab8819a6be 100644 --- a/Resources/keybinds.yml +++ b/Resources/keybinds.yml @@ -1,4 +1,4 @@ -version: 1 # Not used right now, whatever. +version: 1 # Not used right now, whatever. binds: - function: UIClick type: State @@ -540,3 +540,7 @@ binds: - function: Hotbar9 type: State key: Num9 +- function: LieDownStandUp + type: State + key: Z + mod1: Shift