public void Point() { ISimpleTestSpline2D bezierSpline2D = CreateSpline(); float2 a = float2.zero; bezierSpline2D.AddControlPoint(a); float2 b = new float2(1f, 0f); bezierSpline2D.AddControlPoint(b); Spline2DData data = bezierSpline2D.SplineEntityData2D.Value; Assert.AreEqual(1f, bezierSpline2D.Length()); Assert.AreEqual(1f, data.Length); Assert.AreEqual(1, bezierSpline2D.Times.Count); Assert.AreEqual(1, data.Time.Length); Assert.AreEqual(1f, bezierSpline2D.Times[0]); Assert.AreEqual(1f, data.Time[0]); BezierSpline2DPointJob job = new BezierSpline2DPointJob(bezierSpline2D, -0.5f, Allocator.Temp); try { CheckFloatJob(a, job, -0.5f); CheckFloatJob(a, job, 0f); CheckFloatJob(new float2(0.5f, 0f), job, 0.5f); CheckFloatJob(b, job, 5f); } finally { job.Dispose(); } }
private void CheckFloatJob(float2 expected, BezierSpline2DPointJob job, float progress) { job.SplineProgress = new SplineProgress() { Progress = progress }; job.Execute(); TestHelpers.CheckFloat2(expected, job.Result); }
private float2 getPointViaJob(ISpline2D spline, float progress) { switch (spline.SplineDataType) { case SplineType.Bezier: BezierSpline2DPointJob bzSpline = new BezierSpline2DPointJob(spline, progress, Allocator.Temp); bzSpline.Execute(); float2 result = bzSpline.Result; bzSpline.Dispose(); return(result); case SplineType.Linear: LinearSpline2DPointJob pSpline = new LinearSpline2DPointJob(spline, progress, Allocator.Temp); pSpline.Execute(); return(pSpline.Result); default: throw new ArgumentOutOfRangeException(); } }
public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { NativeArray <SplineProgress> movers = chunk.GetNativeArray(MoverDef); NativeArray <Translation> transes = chunk.GetNativeArray(TransDef); BezierSpline2DPointJob point = new BezierSpline2DPointJob() { Spline = Spline }; for (int i = chunk.Count - 1; i >= 0; i--) { SplineProgress move = movers[i]; point.SplineProgress = move; point.Execute(); transes[i] = new Translation() { Value = new float3(point.Result, 0f) }; } }