Skip to content

Commit

Permalink
Thrown soap/banana/(etc?) will fail to slip until it lands (space-wiz…
Browse files Browse the repository at this point in the history
…ards#24494)

* throw miss

* event

* whoops

Co-authored-by: metalgearsloth <[email protected]>

* fix popup duplication

* Separate cancellable event

* no popup, no problem

* remove leftover stuff

---------

Co-authored-by: metalgearsloth <[email protected]>
  • Loading branch information
Errant-4 and metalgearsloth authored Mar 20, 2024
1 parent a7d95c3 commit e061cb3
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion Content.Shared/Slippery/SlipperySystem.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Content.Shared.Inventory;
using Robust.Shared.Network;
using Content.Shared.Popups;
using Content.Shared.StatusEffect;
using Content.Shared.StepTrigger.Systems;
using Content.Shared.Stunnable;
using Content.Shared.Throwing;
using JetBrains.Annotations;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Containers;
Expand All @@ -30,6 +33,7 @@ public override void Initialize()
SubscribeLocalEvent<SlipperyComponent, StepTriggerAttemptEvent>(HandleAttemptCollide);
SubscribeLocalEvent<SlipperyComponent, StepTriggeredEvent>(HandleStepTrigger);
SubscribeLocalEvent<NoSlipComponent, SlipAttemptEvent>(OnNoSlipAttempt);
SubscribeLocalEvent<ThrownItemComponent, SlipCausingAttemptEvent>(OnThrownSlipAttempt);
// as long as slip-resistant mice are never added, this should be fine (otherwise a mouse-hat will transfer it's power to the wearer).
SubscribeLocalEvent<NoSlipComponent, InventoryRelayedEvent<SlipAttemptEvent>>((e, c, ev) => OnNoSlipAttempt(e, c, ev.Args));
}
Expand All @@ -52,6 +56,11 @@ private static void OnNoSlipAttempt(EntityUid uid, NoSlipComponent component, Sl
args.Cancel();
}

private void OnThrownSlipAttempt(EntityUid uid, ThrownItemComponent comp, ref SlipCausingAttemptEvent args)
{
args.Cancelled = true;
}

private bool CanSlip(EntityUid uid, EntityUid toSlip)
{
return !_container.IsEntityInContainer(uid)
Expand All @@ -68,6 +77,11 @@ private void TrySlip(EntityUid uid, SlipperyComponent component, EntityUid other
if (attemptEv.Cancelled)
return;

var attemptCausingEv = new SlipCausingAttemptEvent();
RaiseLocalEvent(uid, ref attemptCausingEv);
if (attemptCausingEv.Cancelled)
return;

var ev = new SlipEvent(other);
RaiseLocalEvent(uid, ref ev);

Expand Down Expand Up @@ -107,7 +121,13 @@ public sealed class SlipAttemptEvent : CancellableEntityEventArgs, IInventoryRel
}

/// <summary>
/// This event is raised directed at an entity that CAUSED some other entity to slip (e.g., the banana peel).
/// Raised on an entity that is causing the slip event (e.g, the banana peel), to determine if the slip attempt should be cancelled.
/// </summary>
/// <param name="Cancelled">If the slip should be cancelled</param>
[ByRefEvent]
public record struct SlipCausingAttemptEvent (bool Cancelled);

/// Raised on an entity that CAUSED some other entity to slip (e.g., the banana peel).
/// <param name="Slipped">The entity being slipped</param>
[ByRefEvent]
public readonly record struct SlipEvent(EntityUid Slipped);

0 comments on commit e061cb3

Please sign in to comment.