Skip to content

Commit

Permalink
Grappling fixes (space-wizards#23709)
Browse files Browse the repository at this point in the history
  • Loading branch information
EmoGarbage404 authored Jan 8, 2024
1 parent 31133ef commit c9b700a
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 20 deletions.
32 changes: 16 additions & 16 deletions Content.Shared/Weapons/Misc/SharedGrapplingGunSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
using Robust.Shared.Physics.Systems;
using Robust.Shared.Serialization;
using Robust.Shared.Timing;
using Robust.Shared.Utility;

namespace Content.Shared.Weapons.Misc;

Expand All @@ -27,6 +26,7 @@ public abstract class SharedGrapplingGunSystem : EntitySystem
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedJointSystem _joints = default!;
[Dependency] private readonly SharedGunSystem _gun = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!;

public const string GrapplingJoint = "grappling";
Expand All @@ -48,7 +48,8 @@ public override void Initialize()

private void OnGrappleJointRemoved(EntityUid uid, GrapplingProjectileComponent component, JointRemovedEvent args)
{
QueueDel(uid);
if (_netManager.IsServer)
QueueDel(uid);
}

private void OnGrapplingShot(EntityUid uid, GrapplingGunComponent component, ref GunShotEvent args)
Expand All @@ -58,19 +59,20 @@ private void OnGrapplingShot(EntityUid uid, GrapplingGunComponent component, ref
if (!HasComp<GrapplingProjectileComponent>(shotUid))
continue;

//todo: this doesn't actually support multigrapple
// At least show the visuals.
component.Projectile = shotUid.Value;
Dirty(uid, component);
var visuals = EnsureComp<JointVisualsComponent>(shotUid.Value);
visuals.Sprite =
new SpriteSpecifier.Rsi(new ResPath("Objects/Weapons/Guns/Launchers/grappling_gun.rsi"), "rope");
visuals.Sprite = component.RopeSprite;
visuals.OffsetA = new Vector2(0f, 0.5f);
visuals.Target = uid;
Dirty(shotUid.Value, visuals);
}

TryComp<AppearanceComponent>(uid, out var appearance);
_appearance.SetData(uid, SharedTetherGunSystem.TetherVisualsStatus.Key, false, appearance);
Dirty(uid, component);
}

private void OnGrapplingDeselected(EntityUid uid, GrapplingGunComponent component, HandDeselectedEvent args)
Expand Down Expand Up @@ -117,23 +119,21 @@ private void OnGunActivate(EntityUid uid, GrapplingGunComponent component, Activ
if (!Timing.IsFirstTimePredicted || args.Handled)
return;

_audio.PlayPredicted(component.CycleSound, uid, args.User);
if (Deleted(component.Projectile))
return;

TryComp<AppearanceComponent>(uid, out var appearance);
_appearance.SetData(uid, SharedTetherGunSystem.TetherVisualsStatus.Key, true, appearance);
SetReeling(uid, component, false, args.User);
_audio.PlayPredicted(component.CycleSound, uid, args.User);
_appearance.SetData(uid, SharedTetherGunSystem.TetherVisualsStatus.Key, true);

if (!Deleted(component.Projectile))
if (_netManager.IsServer)
{
if (_netManager.IsServer)
{
QueueDel(component.Projectile.Value);
}

component.Projectile = null;
Dirty(uid, component);
QueueDel(component.Projectile.Value);
}

component.Projectile = null;
SetReeling(uid, component, false, args.User);
_gun.ChangeBasicEntityAmmoCount(uid, 1);

args.Handled = true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Utility;

namespace Content.Shared.Weapons.Ranged.Components;

Expand All @@ -10,7 +11,8 @@ public sealed partial class GrapplingGunComponent : Component
[DataField("jointId"), AutoNetworkedField]
public string Joint = string.Empty;

[DataField("projectile")] public EntityUid? Projectile;
[DataField, AutoNetworkedField]
public EntityUid? Projectile;

[ViewVariables(VVAccess.ReadWrite), DataField("reeling"), AutoNetworkedField]
public bool Reeling;
Expand All @@ -24,5 +26,9 @@ public sealed partial class GrapplingGunComponent : Component
[ViewVariables(VVAccess.ReadWrite), DataField("cycleSound"), AutoNetworkedField]
public SoundSpecifier? CycleSound = new SoundPathSpecifier("/Audio/Weapons/Guns/MagIn/kinetic_reload.ogg");

[DataField, ViewVariables]
public SpriteSpecifier RopeSprite =
new SpriteSpecifier.Rsi(new ResPath("Objects/Weapons/Guns/Launchers/grappling_gun.rsi"), "rope");

public EntityUid? Stream;
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,19 +62,26 @@ private void UpdateBasicEntityAppearance(EntityUid uid, BasicEntityAmmoProviderC
}

#region Public API
public bool ChangeBasicEntityAmmoCount(EntityUid uid, int delta, BasicEntityAmmoProviderComponent? component = null)
{
if (!Resolve(uid, ref component, false) || component.Count == null)
return false;

return UpdateBasicEntityAmmoCount(uid, component.Count.Value + delta, component);
}

public bool UpdateBasicEntityAmmoCount(EntityUid uid, int count, BasicEntityAmmoProviderComponent? component = null)
{
if (!Resolve(uid, ref component))
if (!Resolve(uid, ref component, false))
return false;

if (count > component.Capacity)
return false;

component.Count = count;
Dirty(uid, component);
UpdateBasicEntityAppearance(uid, component);
UpdateAmmoCount(uid);
Dirty(uid, component);

return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,6 @@
- type: Gun
soundGunshot: /Audio/Weapons/Guns/Gunshots/harpoon.ogg
fireRate: 0.5
- type: RechargeCycleAmmo
- type: BasicEntityAmmoProvider
proto: GrapplingHook
capacity: 1
Expand Down

0 comments on commit c9b700a

Please sign in to comment.