using System.Numerics; namespace Smoll.Ex3 { sealed class InertiaComponent : Component { public Transform2D transform; public float dampening; private Transform2DComponent? ownerTransform; public InertiaComponent(float dampening = 1) : this(dampening, 0, 0, 0) { } public InertiaComponent(float dampening, float x, float y) : this(dampening, x, y, 0) { } public InertiaComponent(float dampening, float x, float y, float angle) { transform = new Transform2D(); transform.position = y * Complex.ImaginaryOne + x; transform.angle = angle; transform.scale = 1; this.dampening = dampening; } public InertiaComponent(float dampening, Transform2D tr) { transform = tr; this.dampening = dampening; } public override void OnAttached() { ownerTransform = owner.GetComponent(); } public override void Update(float deltaTimeSeconds) { ownerTransform ??= owner.GetComponent(); ownerTransform ??= new Transform2DComponent(); ownerTransform.transform.position += transform.position * deltaTimeSeconds; ownerTransform.transform.angle += transform.angle * deltaTimeSeconds; transform.position *= MathF.Pow(dampening, deltaTimeSeconds); transform.angle *= MathF.Pow(dampening, deltaTimeSeconds); } } }