using Syntriax.Engine.Core.Abstract; namespace Syntriax.Engine.Physics2D.Abstract; /// <summary> /// Represents a 2D collider. /// </summary> public interface ICollider2D : IBehaviour { /// <summary> /// Event triggered when a collision is detected. /// </summary> event CollisionDetectedEventHandler? OnCollisionDetected; /// <summary> /// Event triggered when a collision is resolved. /// </summary> event CollisionResolvedEventHandler? OnCollisionResolved; /// <summary> /// Event triggered when another <see cref="ICollider2D"/> triggers this <see cref="ICollider2D"/>. /// </summary> event TriggeredEventHandler? OnTriggered; /// <inheritdoc cref="ITransform2D" /> ITransform2D Transform { get; } /// <summary> /// The <see cref="IRigidBody2D"/> associated with the <see cref="ICollider2D"/>. /// </summary> IRigidBody2D? RigidBody2D { get; } /// <summary> /// The value indicating whether the <see cref="ICollider2D"/> is a trigger. /// </summary> bool IsTrigger { get; set; } /// <summary> /// Recalculates <see cref="ICollider2D"/> properties. /// </summary> void Recalculate(); void Detect(CollisionDetectionInformation collisionDetectionInformation); void Resolve(CollisionDetectionInformation collisionDetectionInformation); void Trigger(ICollider2D initiator); delegate void CollisionDetectedEventHandler(ICollider2D sender, CollisionDetectionInformation collisionDetectionInformation); delegate void CollisionResolvedEventHandler(ICollider2D sender, CollisionDetectionInformation collisionDetectionInformation); delegate void TriggeredEventHandler(ICollider2D sender, ICollider2D initiatorCollider); }