public static void UpdateFarseerPhysics(RageSpline spline) { #if !UNITY_FLASH var fsConcave = spline.GetComponent <FSConcaveShapeComponent>(); if (fsConcave == null) { fsConcave = spline.gameObject.AddComponent <FSConcaveShapeComponent>(); } var fsBody = spline.GetComponent <FSBodyComponent>(); if (fsBody == null) { spline.gameObject.AddComponent <FSBodyComponent>(); } fsConcave.PointInput = FSShapePointInput.Vector2List; var points = new List <Vector2>(); if (spline.FarseerPhysicsPointsOnly) { for (int i = 0; i < spline.GetPointCount(); i++) { points.Add(spline.GetPosition(i)); } } else { int splitCount = spline.LockPhysicsToAppearence ? spline.GetVertexCount() : spline.GetPhysicsColliderCount(); for (int i = 0; i < splitCount; i++) { float splinePos = (float)i / (float)splitCount; Vector3 normal = spline.GetNormal(splinePos); points.Add(spline.GetPosition(splinePos) + normal * spline.GetPhysicsNormalOffset()); } } fsConcave.PointsCoordinates = points.ToArray(); fsConcave.ConvertToConvex(); #endif }
public RageSplinePreviewData(RageSpline spline) { _points = new List <RageSplinePreviewPointData>(); for (int i = 0; i <= spline.GetPointCount() - 1; i++) { var pointPosition = spline.GetPosition(i); if (i == 0) { _boundary = new Rect(pointPosition.x, pointPosition.y, 0, 0); } else { if (_boundary.xMin > pointPosition.x) { _boundary.xMin = pointPosition.x; } if (_boundary.xMax < pointPosition.x) { _boundary.xMax = pointPosition.x; } if (_boundary.yMin > pointPosition.y) { _boundary.yMin = pointPosition.y; } if (_boundary.yMax < pointPosition.y) { _boundary.yMax = pointPosition.y; } } _points.Add(new RageSplinePreviewPointData { Position = pointPosition, StartTangent = spline.GetInControlPosition(i), EndTangent = spline.GetOutControlPosition(i) }); } }