From 4c40f3bdf89bed1e38238bb758490ca889b888d3 Mon Sep 17 00:00:00 2001 From: wrexbe <81056464+wrexbe@users.noreply.github.com> Date: Fri, 27 May 2022 22:39:26 -0700 Subject: [PATCH] Fix StepTrigger error (#8480) * Fix StepTrigger error * Changed it * Update Content.Shared/StepTrigger/StepTriggerSystem.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Update Content.Shared/StepTrigger/StepTriggerSystem.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Update StepTriggerSystem.cs * Update StepTriggerSystem.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> --- .../StepTrigger/StepTriggerSystem.cs | 80 +++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/Content.Shared/StepTrigger/StepTriggerSystem.cs b/Content.Shared/StepTrigger/StepTriggerSystem.cs index 5031bdd7a1..2c242f0a58 100644 --- a/Content.Shared/StepTrigger/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/StepTriggerSystem.cs @@ -18,62 +18,60 @@ public sealed class StepTriggerSystem : EntitySystem public override void Update(float frameTime) { - foreach (var (_, trigger) in EntityQuery()) + foreach (var (_, trigger, transform) in EntityQuery()) { - if (!Update(trigger)) + if (!Update(trigger, transform)) continue; RemComp(trigger.Owner); } } - private bool Update(StepTriggerComponent component) + private bool Update(StepTriggerComponent component, TransformComponent transform) { - if (component.Deleted || !component.Active || component.Colliding.Count == 0) + if (!component.Active || + component.Colliding.Count == 0) return true; + foreach (var otherUid in component.Colliding.ToArray()) { - if (!otherUid.IsValid()) - { - component.Colliding.Remove(otherUid); - component.CurrentlySteppedOn.Remove(otherUid); - component.Dirty(); - continue; - } + var shouldRemoveFromColliding = UpdateColliding(component, transform, otherUid); + if (!shouldRemoveFromColliding) continue; - // TODO: This shouldn't be calculating based on world AABBs. - var ourAabb = _entityLookup.GetWorldAABB(component.Owner); - var otherAabb = _entityLookup.GetWorldAABB(otherUid); - - if (!TryComp(otherUid, out PhysicsComponent? otherPhysics) || !ourAabb.Intersects(otherAabb)) - { - component.Colliding.Remove(otherUid); - component.CurrentlySteppedOn.Remove(otherUid); - component.Dirty(); - continue; - } - - if (component.CurrentlySteppedOn.Contains(otherUid)) - continue; - - if (!CanTrigger(component.Owner, otherUid, component)) - continue; - - if (otherPhysics.LinearVelocity.Length < component.RequiredTriggerSpeed) - continue; - - var percentage = otherAabb.IntersectPercentage(ourAabb); - if (percentage < component.IntersectRatio) - continue; - - var ev = new StepTriggeredEvent { Source = component.Owner, Tripper = otherUid }; - RaiseLocalEvent(component.Owner, ref ev); - - component.CurrentlySteppedOn.Add(otherUid); - component.Dirty(); + component.Colliding.Remove(otherUid); + component.CurrentlySteppedOn.Remove(otherUid); + Dirty(component); } + return false; + } + private bool UpdateColliding(StepTriggerComponent component, TransformComponent ownerTransform, EntityUid otherUid) + { + if (!TryComp(otherUid, out PhysicsComponent? otherPhysics)) + return true; + + if (component.CurrentlySteppedOn.Contains(otherUid) || + !CanTrigger(component.Owner, otherUid, component) || + otherPhysics.LinearVelocity.Length < component.RequiredTriggerSpeed) + return false; + + // TODO: This shouldn't be calculating based on world AABBs. + var ourAabb = _entityLookup.GetWorldAABB(component.Owner, ownerTransform); + var otherAabb = _entityLookup.GetWorldAABB(otherUid); + + if (!ourAabb.Intersects(otherAabb)) + return true; + + var percentage = otherAabb.IntersectPercentage(ourAabb); + if (percentage < component.IntersectRatio) + return false; + + var ev = new StepTriggeredEvent { Source = component.Owner, Tripper = otherUid }; + RaiseLocalEvent(component.Owner, ref ev); + + component.CurrentlySteppedOn.Add(otherUid); + Dirty(component); return false; }