A Smoll game engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

53 lignes
1.5 KiB

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