diff --git a/Engine.Physics2D/Abstract/ICollider2D.cs b/Engine.Physics2D/Abstract/ICollider2D.cs index 9dfb806..5d2a5ff 100644 --- a/Engine.Physics2D/Abstract/ICollider2D.cs +++ b/Engine.Physics2D/Abstract/ICollider2D.cs @@ -9,6 +9,8 @@ public interface ICollider2D : IBehaviour, IAssignableTransform Action? OnCollisionDetected { get; set; } Action? OnCollisionResolved { get; set; } + Action? OnTriggered { get; set; } + IRigidBody2D? RigidBody2D { get; } bool IsTrigger { get; set; } diff --git a/Engine.Physics2D/Collider2DBehaviourBase.cs b/Engine.Physics2D/Collider2DBehaviourBase.cs index 0d42623..e69096f 100644 --- a/Engine.Physics2D/Collider2DBehaviourBase.cs +++ b/Engine.Physics2D/Collider2DBehaviourBase.cs @@ -10,6 +10,7 @@ public abstract class Collider2DBehaviourBase : BehaviourOverride, ICollider2D { public Action? OnCollisionDetected { get; set; } = null; public Action? OnCollisionResolved { get; set; } = null; + public Action? OnTriggered { get; set; } = null; protected bool NeedsRecalculation { get; private set; } = true; diff --git a/Engine.Physics2D/PhysicsEngine2D.cs b/Engine.Physics2D/PhysicsEngine2D.cs index f0d9406..af56e22 100644 --- a/Engine.Physics2D/PhysicsEngine2D.cs +++ b/Engine.Physics2D/PhysicsEngine2D.cs @@ -61,8 +61,23 @@ public class PhysicsEngine2D : IPhysicsEngine2D if (colliderX.RigidBody2D == colliderY.RigidBody2D) continue; + bool bothCollidersAreTriggers = colliderX.IsTrigger && colliderX.IsTrigger == colliderY.IsTrigger; + if (bothCollidersAreTriggers) + continue; + if (collisionDetector.TryDetect(colliderX, colliderY, out CollisionDetectionInformation information)) { + if (colliderX.IsTrigger) + { + colliderX.OnTriggered?.Invoke(colliderX, colliderY); + continue; + } + else if (colliderY.IsTrigger) + { + colliderY.OnTriggered?.Invoke(colliderY, colliderY); + continue; + } + colliderX.OnCollisionDetected?.Invoke(colliderX, information); colliderY.OnCollisionDetected?.Invoke(colliderY, information);