feat: Transform Hierarchy System

This commit is contained in:
2024-02-06 12:34:18 +03:00
parent b931abb735
commit 6e4c9b0ef8
3 changed files with 247 additions and 5 deletions

View File

@@ -1,11 +1,12 @@
using System;
using System.Collections.Generic;
namespace Syntriax.Engine.Core.Abstract;
/// <summary>
/// Represents the transformation properties of an object such as position, scale, and rotation.
/// </summary>
public interface ITransform
public interface ITransform : IEnumerable<ITransform>
{
/// <summary>
/// Event triggered when the <see cref="Position"/> of the <see cref="ITransform"/> changes.
@@ -23,17 +24,61 @@ public interface ITransform
Action<ITransform>? OnRotationChanged { get; set; }
/// <summary>
/// The position of the <see cref="ITransform"/> in 2D space.
/// Event triggered when the <see cref="Parent"/> of the <see cref="ITransform"/> changes. The second parameter is the old <see cref="ITransform"/>.
/// </summary>
Action<ITransform, ITransform?>? OnParentChanged { get; set; }
/// <summary>
/// Event triggered when a new <see cref="ITransform"/> is added to the <see cref="Children"/>.
/// </summary>
Action<ITransform, ITransform>? OnChildrenAdded { get; set; }
/// <summary>
/// Event triggered when an <see cref="ITransform"/> is removed from the <see cref="Children"/>.
/// </summary>
Action<ITransform, ITransform>? OnChildrenRemoved { get; set; }
/// <summary>
/// The world position of the <see cref="ITransform"/> in 2D space.
/// </summary>
Vector2D Position { get; set; }
/// <summary>
/// The scale of the <see cref="ITransform"/>.
/// The world scale of the <see cref="ITransform"/>.
/// </summary>
Vector2D Scale { get; set; }
/// <summary>
/// The rotation of the <see cref="ITransform"/> in degrees.
/// The world rotation of the <see cref="ITransform"/> in degrees.
/// </summary>
float Rotation { get; set; }
/// <summary>
/// The local position of the <see cref="ITransform"/> in 2D space.
/// </summary>
Vector2D LocalPosition { get; set; }
/// <summary>
/// The local scale of the <see cref="ITransform"/>.
/// </summary>
Vector2D LocalScale { get; set; }
/// <summary>
/// The local rotation of the <see cref="ITransform"/> in degrees.
/// </summary>
float LocalRotation { get; set; }
/// <summary>
/// The parent <see cref="ITransform"/> of the <see cref="ITransform"/>.
/// </summary>
ITransform? Parent { get; }
/// <summary>
/// The <see cref="ITransform"/>s that have this <see cref="ITransform"/> as their <see cref="Parent"/>.
/// </summary>
IReadOnlyList<ITransform> Children { get; }
void SetParent(ITransform? transform);
void AddChild(ITransform transform);
void RemoveChild(ITransform transform);
}