namespace Engine.Core;
/// 
/// Represents the transformation properties of an object such as position, scale, and rotation in 3D space.
/// 
public interface ITransform3D : 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.
    /// 
    Vector3D Up { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector3D Down { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector3D Left { get; }
    /// 
    /// The  pointing upwards in world space.
    /// 
    Vector3D Right { get; }
    /// 
    /// The  pointing forwards in world space.
    /// 
    Vector3D Forward { get; }
    /// 
    /// The  pointing backwards in world space.
    /// 
    Vector3D Backward { get; }
    /// 
    /// The world position of the  in 3D space.
    /// 
    Vector3D Position { get; set; }
    /// 
    /// The world scale of the .
    /// 
    Vector3D Scale { get; set; }
    /// 
    /// The world rotation of the  in degrees.
    /// 
    Quaternion Rotation { get; set; }
    /// 
    /// The local position of the  in 3D space.
    /// 
    Vector3D LocalPosition { get; set; }
    /// 
    /// The local scale of the .
    /// 
    Vector3D LocalScale { get; set; }
    /// 
    /// The local rotation of the  in degrees.
    /// 
    Quaternion LocalRotation { get; set; }
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct PositionChangedArguments(Vector3D PreviousPosition);
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct ScaleChangedArguments(Vector3D PreviousScale);
    /// 
    /// Arguments for the event triggered when the 's rotation changes.
    /// 
    /// The previous  of the .
    readonly record struct RotationChangedArguments(Quaternion PreviousRotation);
}