| | |
| | | |
| | | protected override void Update() |
| | | { |
| | | |
| | | if (_emit) |
| | | { |
| | | _distanceMoved += Vector3.Distance(_t.position, _lastPosition); |
| | |
| | | |
| | | base.Update(); |
| | | } |
| | | |
| | | /* |
| | | void OnDrawGizmos() |
| | | { |
| | | if (Application.isPlaying && _controlPoints != null) |
| | | { |
| | | for (int i = 0; i < _controlPoints.Count; i++) |
| | | { |
| | | Gizmos.color = Color.red; |
| | | Gizmos.DrawSphere(_controlPoints[i].p, 0.01f); |
| | | |
| | | if (i < _controlPoints.Count - 1) |
| | | { |
| | | Vector3 Handle1, Handle2; |
| | | float distanceBetween = Vector3.Distance(_controlPoints[i].p, _controlPoints[i + 1].p) / 2; |
| | | if (i == 0) |
| | | { |
| | | Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i].p).normalized * distanceBetween; |
| | | } |
| | | else |
| | | { |
| | | Handle1 = _controlPoints[i].p + (_controlPoints[i + 1].p - _controlPoints[i - 1].p).normalized * distanceBetween; |
| | | } |
| | | |
| | | int nextI = i + 1; |
| | | |
| | | if (nextI == _controlPoints.Count - 1) |
| | | { |
| | | Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI].p).normalized * distanceBetween; |
| | | } |
| | | else |
| | | { |
| | | Handle2 = _controlPoints[nextI].p + (_controlPoints[nextI - 1].p - _controlPoints[nextI + 1].p).normalized * distanceBetween; |
| | | } |
| | | |
| | | Gizmos.color = Color.green; |
| | | Gizmos.DrawSphere(Handle1, 0.01f); |
| | | Gizmos.DrawLine(_controlPoints[i].p, Handle1); |
| | | Gizmos.color = Color.blue; |
| | | Gizmos.DrawSphere(Handle2, 0.01f); |
| | | Gizmos.DrawLine(_controlPoints[nextI].p, Handle2); |
| | | |
| | | |
| | | Vector3 current = _controlPoints[i].p; |
| | | |
| | | for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++) |
| | | { |
| | | Vector3 next = GetPointAlongCurve(_controlPoints[i].p, Handle1, _controlPoints[i + 1].p, Handle2, ((pointBetween + 1) / ((float)PointsBetweenControlPoints + 1f)), 0.3f); |
| | | |
| | | Gizmos.DrawLine(current, next); |
| | | |
| | | Gizmos.color = Color.yellow; |
| | | Gizmos.DrawSphere(next, 0.01f); |
| | | |
| | | current = next; |
| | | } |
| | | |
| | | Gizmos.color = Color.blue; |
| | | Gizmos.DrawLine(current, _controlPoints[i + 1].p); |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | */ |
| | | |
| | | protected override void OnStartEmit() |
| | | { |
| | |
| | | int lastControlPointPointIndex = ((_controlPoints.Count - 1) + ((_controlPoints.Count - 1) * PointsBetweenControlPoints)); |
| | | int prevControlPointPointIndex = lastControlPointPointIndex - PointsBetweenControlPoints - 1; |
| | | int activePointCount = lastControlPointPointIndex + 1; |
| | | |
| | | |
| | | /* |
| | | * |
| | | * This is that optimisation mentioned above..sort of works, but smoothing isn't working right so i am leaving it out for now |
| | | * |
| | | * |
| | | |
| | | int lastControlPointIndex = _controlPoints.Count - 1; |
| | | int prevControlPointIndex = _controlPoints.Count - 2; |
| | | |
| | | Vector3 Handle1, Handle2; |
| | | float distanceBetween = Vector3.Distance(_controlPoints[lastControlPointIndex].p, _controlPoints[prevControlPointIndex].p) / 2; |
| | | |
| | | if (prevControlPointIndex == 0) |
| | | Handle1 = _controlPoints[prevControlPointIndex].p + (_controlPoints[lastControlPointIndex].p - _controlPoints[prevControlPointIndex].p).normalized * distanceBetween; |
| | | else |
| | | Handle1 = _controlPoints[prevControlPointIndex].p + (_controlPoints[lastControlPointIndex].p - _controlPoints[prevControlPointIndex - 1].p).normalized * distanceBetween; |
| | | |
| | | |
| | | Handle2 = _controlPoints[lastControlPointIndex].p + (_controlPoints[prevControlPointIndex].p - _controlPoints[lastControlPointIndex].p).normalized * distanceBetween; |
| | | |
| | | |
| | | float timeActiveLastControlPoint = trail.Points[lastControlPointPointIndex].TimeActive(); |
| | | float timeActivePrevControlPoint = trail.Points[prevControlPointPointIndex].TimeActive(); |
| | | |
| | | for (int pointBetween = 0; pointBetween < PointsBetweenControlPoints; pointBetween++) |
| | | { |
| | | float t= (((float)pointBetween + 1f) / ((float)PointsBetweenControlPoints + 1f)); |
| | | trail.Points[prevControlPointPointIndex + pointBetween + 1].Position = GetPointAlongCurve(_controlPoints[prevControlPointIndex].p, Handle1, _controlPoints[lastControlPointIndex].p, Handle2, t, 0.3f); |
| | | trail.Points[prevControlPointPointIndex + pointBetween + 1].SetTimeActive(Mathf.Lerp(timeActivePrevControlPoint, timeActiveLastControlPoint, t)); |
| | | } |
| | | trail.Points[lastControlPointPointIndex].Position = _controlPoints[lastControlPointIndex].p; |
| | | */ |
| | | |
| | | float distanceFromStart = trail.Points[prevControlPointPointIndex].GetDistanceFromStart(); |
| | | for (int i = prevControlPointPointIndex + 1; i < activePointCount; i++) |