diff --git a/Content.Client/_CP14/Fishing/CP14FishingSystem.cs b/Content.Client/_CP14/Fishing/CP14FishingSystem.cs index b51bcfb8f2..c903c58718 100644 --- a/Content.Client/_CP14/Fishing/CP14FishingSystem.cs +++ b/Content.Client/_CP14/Fishing/CP14FishingSystem.cs @@ -1,20 +1,19 @@ using System.Numerics; -using Content.Client._CP14.Input; using Content.Client.Hands.Systems; +using Content.Client.Interactable; using Content.Client.Resources; using Content.Client.UserInterface.Screens; using Content.Shared._CP14.Fishing; using Content.Shared._CP14.Fishing.Components; using Content.Shared._CP14.Input; using Content.Shared.Interaction; -using Robust.Client; using Robust.Client.GameObjects; using Robust.Client.Graphics; +using Robust.Client.Player; using Robust.Client.ResourceManagement; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Shared.Input; -using Robust.Shared.Input.Binding; using Robust.Shared.Prototypes; using Robust.Shared.Timing; @@ -28,6 +27,7 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem [Dependency] private readonly InputSystem _input = default!; [Dependency] private readonly IGameTiming _gameTiming = default!; [Dependency] private readonly HandsSystem _handsSystem = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; private Popup? _fishingPopup; @@ -46,7 +46,11 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem if (!fishingRodComponent.FishCaught) return; + if (_playerManager.LocalSession?.AttachedEntity is not { } player) + return; + var reeling = _input.CmdStates.GetState(CP14ContentKeyFunctions.CP14FishingAction) == BoundKeyState.Down; + RaiseNetworkEvent(new FishingReelKeyMessage(player, reeling)); } private void OpenFishingPopup(EntityUid uid, CP14FishingRodComponent component, AfterInteractEvent args) diff --git a/Content.Server/_CP14/Fishing/CP14FishingSystem.cs b/Content.Server/_CP14/Fishing/CP14FishingSystem.cs index 174fee64c2..b2d89a3d44 100644 --- a/Content.Server/_CP14/Fishing/CP14FishingSystem.cs +++ b/Content.Server/_CP14/Fishing/CP14FishingSystem.cs @@ -1,3 +1,4 @@ +using Content.Server.Hands.Systems; using Content.Shared._CP14.Fishing; using Content.Shared._CP14.Fishing.Components; using Content.Shared.Interaction; @@ -10,12 +11,14 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem [Dependency] private readonly SharedInteractionSystem _interactionSystem = default!; [Dependency] private readonly ThrowingSystem _throwingSystem = default!; [Dependency] private readonly SharedTransformSystem _transformSystem = default!; + [Dependency] private readonly HandsSystem _handsSystem = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnInteract); + SubscribeNetworkEvent(OnReelingMessage); } public override void Update(float delta) @@ -37,8 +40,21 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem } } + private void OnReelingMessage(FishingReelKeyMessage msg) + { + var held = _handsSystem.GetActiveItem(msg.User); + + if (!TryComp(held, out var rodComponent)) + return; + + rodComponent.Reeling = msg.Reeling; + } + private void OnInteract(EntityUid uid, CP14FishingRodComponent component, AfterInteractEvent args) { + if (args.Handled) + return; + if (args.Target is not { Valid: true }) return; @@ -51,6 +67,7 @@ public sealed class CP14FishingSystem : CP14SharedFishingSystem if (!_interactionSystem.InRangeUnobstructed(uid, args.Target.Value, component.MaxFishingDistance)) return; + args.Handled = true; CastFloat(uid, component, args.Target.Value); } diff --git a/Content.Shared/_CP14/Fishing/CP14SharedFishingSystem.cs b/Content.Shared/_CP14/Fishing/CP14SharedFishingSystem.cs index f574150889..0e6262df7a 100644 --- a/Content.Shared/_CP14/Fishing/CP14SharedFishingSystem.cs +++ b/Content.Shared/_CP14/Fishing/CP14SharedFishingSystem.cs @@ -1,5 +1,6 @@ using Content.Shared._CP14.Fishing.Components; using Robust.Shared.Random; +using Robust.Shared.Serialization; using Robust.Shared.Timing; namespace Content.Shared._CP14.Fishing; @@ -33,4 +34,17 @@ public abstract class CP14SharedFishingSystem : EntitySystem _random.SetSeed((int)_gameTiming.CurTick.Value); component.FishingTime += TimeSpan.FromSeconds(_random.NextDouble(component.MinAwaitTime, component.MaxAwaitTime)); } + + [Serializable, NetSerializable] + public sealed class FishingReelKeyMessage : EntityEventArgs + { + public EntityUid User { get; } + public bool Reeling { get; } + + public FishingReelKeyMessage(EntityUid user, bool reeling) + { + User = user; + Reeling = reeling; + } + } } diff --git a/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs b/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs index 8136f8646b..dd3b879228 100644 --- a/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs +++ b/Content.Shared/_CP14/Fishing/Components/CP14FishingRodComponent.cs @@ -21,6 +21,9 @@ public sealed partial class CP14FishingRodComponent : Component [AutoNetworkedField] public bool FishCaught; + [AutoNetworkedField] + public bool Reeling; + [DataField] public EntProtoId FloatPrototype = "CP14DefaultFishingFloat";