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);
}