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