public new float3 Get3DPointWorld(float progress) { ClearData(); ConvertData(); Assert.IsTrue(SplineEntityData3D.HasValue, "Failed to generate spline"); Dynamic3DJob job = new Dynamic3DJob(this, progress, Allocator.TempJob); job.Execute(); float3 jobResult = job.Result; job.Dispose(); return(jobResult); }
public new float3 Get3DPointLocal(float progress) { ClearData(); ConvertData(); Assert.IsTrue(SplineEntityData3D.HasValue, "Failed to generate spline"); Dynamic3DJob job = new Dynamic3DJob(this, progress, Allocator.TempJob); job.Execute(); LocalSpaceConversion3D conversion = new LocalSpaceConversion3D(Position, Forward, job.Result, Allocator.TempJob); conversion.Execute(); float3 pos = conversion.SplinePosition.Value; conversion.Dispose(); job.Dispose(); return(pos); }
/// <summary> /// Renders points along the spline to demonstrate possible point bunching along the splines length /// </summary> /// <param name="quantity">amount of points to render</param> /// <param name="spline">spline to render on</param> protected static void RenderIntermediateSplinePoints(float quantity, ISpline3D spline) { Handles.color = Color.red; const float multiplier = 0.3f; // use the jobs as they support all the possible settings that a spline can have Dynamic3DJob job = new Dynamic3DJob(spline, 0f, Allocator.Temp); for (int i = 0; i <= quantity; i++) { float progress = i == 0 ? 0f : i / (quantity - 1f); SplineProgress jobSplineProgress = job.SplineProgress; jobSplineProgress.Progress = progress; job.SplineProgress = jobSplineProgress; job.Execute(); HandleDrawCross(job.Result, multiplier); } job.Dispose(); }
// Start is called before the first frame update void Start() { const float progress = 0.3f; ISpline3D spline3D = GetComponent <ISpline3D>(); // calculate the point manually Dynamic3DJob dynamic2 = new Dynamic3DJob(spline3D, progress, Allocator.Temp); dynamic2.Execute(); float3 manualResult = dynamic2.Result; dynamic2.Dispose(); // calculate the point using dynamic job Dynamic3DJob dynamic = new Dynamic3DJob(spline3D, progress, Allocator.TempJob); JobHandle handle = dynamic.Schedule(); handle.Complete(); float3 dynamicJobResult = dynamic.Result; dynamic.Dispose(); // calculate the point using specific job type BezierSpline3DPointJob direct = new BezierSpline3DPointJob(spline3D, progress, Allocator.TempJob); JobHandle handle2 = direct.Schedule(handle); handle2.Complete(); float3 directJobResult = direct.Result; direct.Dispose(); if (handle2.IsCompleted) { Assert.AreEqual(manualResult, directJobResult); Assert.AreEqual(manualResult, dynamicJobResult); } }