|
|
- using System.Numerics;
-
- namespace Smoll.Ex2 {
- 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);
-
- }
- }
-
- }
|