public void Execute(int index) { var roadEntity = NonIntersectingRoadEntities[index]; RoadCenterLineDataComponents[roadEntity] = new RoadCenterLineData { StreetId = index, StartIntersection = Entity.Null, EndIntersection = Entity.Null }; var splineEntity = NonIntersectingSplineEntities[index]; var splineBuffer = SplineSampleBuffers[splineEntity].Reinterpret <RigidTransform>(); var centerLineBuffer = RoadCenterLineSampleBuffers[roadEntity].Reinterpret <RigidTransform>(); centerLineBuffer.CopyFrom(splineBuffer); }
public void Execute(int index) { var range = RoadSplineRanges[index]; var roadEntity = RoadEntities[index]; RoadCenterLineDataComponents[roadEntity] = new RoadCenterLineData { StreetId = range.StreetId, StartIntersection = range.StartIntersectionEntity, EndIntersection = range.EndIntersectionEntity }; var splineBuffer = RoadSplineSampleBuffers[range.SplineEntity].Reinterpret <RigidTransform>(); var roadBuffer = RoadCenterLineSampleBuffers[roadEntity].Reinterpret <RigidTransform>(); // Get nearest integer spline indices var firstIntegerIdx = (int)math.floor(range.StartIndex + 1f); var lastIntegerIdx = (int)math.ceil(range.EndIndex - 1f); // Add first point if between spline indices if (!Utilities.GeometryUtility.ApproximatelyEqual(range.StartIndex, firstIntegerIdx)) { roadBuffer.Add(SplineUtility.LerpTransform( splineBuffer[firstIntegerIdx - 1], splineBuffer[firstIntegerIdx], range.StartIndex - (firstIntegerIdx - 1))); } // Intermediate points for (var i = firstIntegerIdx; i <= lastIntegerIdx; i++) { roadBuffer.Add(splineBuffer[i]); } // Add last point if between spline indices if (!Utilities.GeometryUtility.ApproximatelyEqual(range.EndIndex, lastIntegerIdx)) { roadBuffer.Add(SplineUtility.LerpTransform( splineBuffer[lastIntegerIdx], splineBuffer[lastIntegerIdx + 1], range.EndIndex - lastIntegerIdx)); } }
static Entity GetIntersection(RoadCenterLineData data, IntersectionRoadDirection direction) { return(direction == IntersectionRoadDirection.Outgoing ? data.EndIntersection : data.StartIntersection); }