| @ -0,0 +1,59 @@ | |||
| using System.Numerics; | |||
| namespace Smoll.Ex2 { | |||
| sealed class InertiaComponent : Component { | |||
| public Transform2D transform; | |||
| public float dampening; | |||
| public float minimalDampening = 2.0f; | |||
| 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; | |||
| ownerTransform.transform.angle += transform.angle; | |||
| if(dampening != 1) { | |||
| if(transform.position.Magnitude > minimalDampening) { | |||
| transform.position *= dampening; | |||
| } else { | |||
| transform.position *= 0; | |||
| } | |||
| if(transform.angle > minimalDampening) { | |||
| transform.angle *= dampening; | |||
| } else { | |||
| transform.angle *= 0; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| } | |||