/// <summary> /// Adds a point to the trail. Points are added if they are minVertexDistance from the last point. /// </summary> /// <param name="point">Point.</param> public void AddPoint(Vector3 point, float pointTime, float currentTime) { // update trail? if (Vector3.Distance(point, lastPoint) < minVertexDistance) { return; } // add a time marker? if (timeMarkerPrefab != null) { if ((pointTime - lastTimeMark) > timeMarkInterval) { // add a time marker TimeMark mark = new TimeMark(); mark.marker = Instantiate(timeMarkerPrefab); if (ge.markerParent != null) { mark.marker.transform.SetParent(ge.markerParent.transform); } mark.marker.transform.position = point; mark.time = pointTime; timeMarks.Add(mark); lastTimeMark = pointTime; // align the game object so it's Z axis is along the trajectory Vector3 trajVector = point - lastPoint; mark.marker.transform.rotation = Quaternion.FromToRotation(Vector3.forward, trajVector); if (textPrefab != null && canvas != null) { mark.textObject = Instantiate(textPrefab); mark.textObject.transform.position = point; Text text = mark.textObject.GetComponent <Text>(); text.text = string.Format("{0:F1}", pointTime); mark.textObject.transform.SetParent(canvas.transform); if (rotateText) { mark.textObject.transform.rotation = mark.marker.transform.rotation; } } } } lastPoint = point; // add new point to traj TrajPoint tp = new TrajPoint(point, pointTime); points.Add(tp); }
/// <summary> /// Adds a point to the trail. Points are added if they are minVertexDistance from the last point. /// </summary> /// <param name="point">Point.</param> public void AddPoint(Vector3 point, float pointTime, float currentTime) { // remove any points older than current time while ((points.Count > 0) && (points[0].worldTime < currentTime)) { points.RemoveAt(0); } // add/remove a time marker? if (timeMarkerPrefab != null) { if ((pointTime - lastTimeMark) > timeMarkInterval) { // add a time marker TimeMark mark = new TimeMark(); mark.marker = Instantiate(timeMarkerPrefab); if (GravityEngine.Instance().markerParent != null) { mark.marker.transform.SetParent(GravityEngine.Instance().markerParent.transform); } mark.marker.transform.position = point; mark.time = pointTime; timeMarks.Add(mark); lastTimeMark = pointTime; // align the game object so it's Z axis is along the trajectory Vector3 trajVector = point - lastPoint; mark.marker.transform.rotation = Quaternion.FromToRotation(Vector3.forward, trajVector); if (textPrefab != null && canvas != null) { mark.textObject = Instantiate(textPrefab); mark.textObject.transform.position = point; Text text = mark.textObject.GetComponent <Text>(); text.text = string.Format("{0:F1}", pointTime); mark.textObject.transform.SetParent(canvas.transform); if (rotateText) { mark.textObject.transform.rotation = mark.marker.transform.rotation; } } // Mark need to keep an absolute reference // TODO: Add to some common object // mark.marker.transform.SetParent(something); } // remove any old time markers while ((timeMarks.Count > 0) && (timeMarks[0].time < currentTime)) { Destroy(timeMarks[0].marker); if (timeMarks[0].textObject != null) { Destroy(timeMarks[0].textObject); } timeMarks.RemoveAt(0); } } // update trail? if (Vector3.Distance(point, lastPoint) < minVertexDistance) { return; } lastPoint = point; // add new point to traj TrajPoint tp = new TrajPoint(point, pointTime); points.Add(tp); }