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<Transform2DComponent>();
|
|
}
|
|
|
|
public override void Update(float deltaTimeSeconds)
|
|
{
|
|
ownerTransform ??= owner.GetComponent<Transform2DComponent>();
|
|
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);
|
|
|
|
}
|
|
}
|
|
|
|
}
|