using Engine.Core;
namespace Engine.Physics2D;
/// 
/// Represents a 2D collider.
/// 
public interface ICollider2D : IBehaviour
{
    /// 
    /// Event triggered when a collision is detected.
    /// 
    Event OnCollisionDetected { get; }
    /// 
    /// Event triggered when a collision is resolved.
    /// 
    Event OnCollisionResolved { get; }
    /// 
    /// Event triggered when another  triggers this .
    /// 
    Event OnTriggered { get; }
    /// 
    ITransform2D Transform { get; }
    /// 
    /// The  associated with the .
    /// 
    IRigidBody2D? RigidBody2D { get; }
    /// 
    /// The value indicating whether the  is a trigger.
    /// 
    bool IsTrigger { get; set; }
    /// 
    /// Recalculates  properties.
    /// 
    void Recalculate();
    void Detect(CollisionDetectionInformation collisionDetectionInformation);
    void Resolve(CollisionDetectionInformation collisionDetectionInformation);
    void Trigger(ICollider2D initiator);
    readonly record struct CollisionDetectedArguments(ICollider2D Sender, CollisionDetectionInformation CollisionDetectionInformation);
    readonly record struct CollisionResolvedArguments(ICollider2D Sender, CollisionDetectionInformation CollisionDetectionInformation);
    readonly record struct TriggeredArguments(ICollider2D Sender, ICollider2D InitiatorCollider);
}