Adds AttemptEntity(Uns|S)tickEvent. (#20728)

* try-stick

* convert spider charge to attempt-stick-events
This commit is contained in:
TemporalOroboros
2023-10-24 18:45:42 -07:00
committed by GitHub
parent f0c5aa15b8
commit 3007200832
3 changed files with 63 additions and 12 deletions

View File

@@ -23,7 +23,7 @@ public sealed class SpiderChargeSystem : EntitySystem
{
base.Initialize();
SubscribeLocalEvent<SpiderChargeComponent, BeforeRangedInteractEvent>(BeforePlant);
SubscribeLocalEvent<SpiderChargeComponent, AttemptEntityStickEvent>(OnAttemptStick);
SubscribeLocalEvent<SpiderChargeComponent, EntityStuckEvent>(OnStuck);
SubscribeLocalEvent<SpiderChargeComponent, TriggerEvent>(OnExplode);
}
@@ -31,14 +31,17 @@ public sealed class SpiderChargeSystem : EntitySystem
/// <summary>
/// Require that the planter is a ninja and the charge is near the target warp point.
/// </summary>
private void BeforePlant(EntityUid uid, SpiderChargeComponent comp, BeforeRangedInteractEvent args)
private void OnAttemptStick(EntityUid uid, SpiderChargeComponent comp, AttemptEntityStickEvent args)
{
if (args.Cancelled)
return;
var user = args.User;
if (!_mind.TryGetRole<NinjaRoleComponent>(user, out var role))
{
_popup.PopupEntity(Loc.GetString("spider-charge-not-ninja"), user, user);
args.Handled = true;
args.Cancelled = true;
return;
}
@@ -47,12 +50,14 @@ public sealed class SpiderChargeSystem : EntitySystem
return;
// assumes warp point still exists
var target = Transform(role.SpiderChargeTarget.Value).MapPosition;
var coords = args.ClickLocation.ToMap(EntityManager, _transform);
if (!coords.InRange(target, comp.Range))
var targetXform = Transform(role.SpiderChargeTarget.Value);
var locXform = Transform(args.Target);
if (locXform.MapID != targetXform.MapID ||
(_transform.GetWorldPosition(locXform) - _transform.GetWorldPosition(targetXform)).LengthSquared() > comp.Range * comp.Range)
{
_popup.PopupEntity(Loc.GetString("spider-charge-too-far"), user, user);
args.Handled = true;
args.Cancelled = true;
return;
}
}