namespace Engine.Core;
/// 
/// Represents the transformation properties of an object such as position, scale, and rotation in 2D space.
/// 
public interface ITransform2D : IBehaviour
{
    /// 
    /// Event triggered when the  of the  changes.
    /// 
    Event OnPositionChanged { get; }
    /// 
    /// Event triggered when the  of the  changes.
    /// 
    Event OnScaleChanged { get; }
    /// 
    /// Event triggered when the  of the  changes.
    /// 
    Event OnRotationChanged { get; }
    /// 
    /// Event triggered when any of the properties of the  gets updated.
    /// 
    Event OnTransformUpdated { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector2D Up { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector2D Down { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector2D Left { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector2D Right { get; }
    /// 
    /// The world position of the  in 2D space.
    /// 
    Vector2D Position { get; set; }
    /// 
    /// The world scale of the .
    /// 
    Vector2D Scale { get; set; }
    /// 
    /// The world rotation of the  in degrees.
    /// 
    float Rotation { get; set; }
    /// 
    /// The local position of the  in 2D space.
    /// 
    Vector2D LocalPosition { get; set; }
    /// 
    /// The local scale of the .
    /// 
    Vector2D LocalScale { get; set; }
    /// 
    /// The local rotation of the  in degrees.
    /// 
    float LocalRotation { get; set; }
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct PositionChangedArguments(Vector2D PreviousPosition);
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct ScaleChangedArguments(Vector2D PreviousScale);
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct RotationChangedArguments(float PreviousRotation);
}