|
|
- using System.Numerics;
- using Raylib_cs;
-
- namespace Smoll.Ex2 {
- class ArrowComponent : Smoll.Component {
- Complex offset;
- public Complex rawValue;
- Transform2DComponent? ownerTransform;
-
- public ArrowComponent(int offset_x = 0, int offset_y = 0)
- {
- this.offset = offset_x + Complex.ImaginaryOne*offset_y;
- }
-
- public override void OnAttached() {
- ownerTransform = owner.GetComponent<Transform2DComponent>();
- }
-
- public Complex Origin() {
- ownerTransform ??= owner.GetComponent<Transform2DComponent>();
- ownerTransform ??= new Transform2DComponent();
- var tr = ownerTransform.AbsoluteTransform();
- return tr.position + offset*Complex.Exp(Complex.ImaginaryOne * tr.angle) * tr.scale;
- }
-
- public Complex Vector() {
- ownerTransform ??= owner.GetComponent<Transform2DComponent>();
- ownerTransform ??= new Transform2DComponent();
- var tr = ownerTransform.AbsoluteTransform();
- return rawValue*Complex.Exp(Complex.ImaginaryOne * tr.angle) * tr.scale;
- }
-
- public Tuple<Complex, Complex> OriginAndVector() {
- ownerTransform ??= owner.GetComponent<Transform2DComponent>();
- ownerTransform ??= new Transform2DComponent();
- var tr = ownerTransform.AbsoluteTransform();
- return Tuple.Create(tr.position + offset*Complex.Exp(Complex.ImaginaryOne * tr.angle) * tr.scale, rawValue*Complex.Exp(Complex.ImaginaryOne * tr.angle) * tr.scale);
- }
-
- public override void Draw(Smoll.Layer.DrawMode drawMode) {
- if(drawMode == Layer.DrawMode.Debug) {
- var data = OriginAndVector();
- Complex start = data.Item1;
- Complex end = data.Item1 + data.Item2;
- Raylib.DrawLineEx(new Vector2((float)start.Real, (float)start.Imaginary),new Vector2((float)end.Real, (float)end.Imaginary),2f, Color.Red);
- }
- }
- }
- }
|