public void UpdatePoints() { for (int i = connections.Length - 1; i >= 0; i--) { if (!connections[i].isValid) { RemoveConnection(i); continue; } SplinePoint point = connections[i].spline.GetPoint(connections[i].pointIndex); point.SetPosition(transform.position); SetPoint(i, point, true); } }
private void UpdatePoints() { for (int i = connections.Length - 1; i >= 0; i--) { if (!connections[i].isValid) { RemoveConnection(i); continue; } SplinePoint point = connections[i].computer.GetPoint(connections[i].pointIndex); point.SetPosition(this.transform.position); SetPoint(i, point); } }
private void UpdatePoints() { for (int num = connections.Length - 1; num >= 0; num--) { if (!connections[num].isValid) { RemoveConnection(num); } else { SplinePoint point = connections[num].computer.GetPoint(connections[num].pointIndex); point.SetPosition(base.transform.position); SetPoint(num, point, swappedTangents: true); } } }
void SplitAtPercent(double percent, ref SplinePoint[] points) { Undo.RecordObject(computer, "Split At Percent "); EditorUtility.SetDirty(computer); float pointValue = (computer.pointCount - 1) * (float)percent; int lastPointIndex = Mathf.FloorToInt(pointValue); int nextPointIndex = Mathf.CeilToInt(pointValue); SplinePoint[] splitPoints = new SplinePoint[computer.pointCount - lastPointIndex]; float lerpPercent = Mathf.InverseLerp(lastPointIndex, nextPointIndex, pointValue); SplinePoint splitPoint = SplinePoint.Lerp(computer.GetPoint(lastPointIndex), computer.GetPoint(nextPointIndex), lerpPercent); splitPoint.SetPosition(computer.EvaluatePosition(percent)); splitPoints[0] = splitPoint; for (int i = 1; i < splitPoints.Length; i++) { splitPoints[i] = computer.GetPoint(lastPointIndex + i); } SplineComputer spline = CreateNewSpline(); spline.SetPoints(splitPoints); SplineUser[] users = spline.GetSubscribers(); for (int i = 0; i < users.Length; i++) { users[i].clipFrom = DMath.InverseLerp(percent, 1.0, users[i].clipFrom); users[i].clipTo = DMath.InverseLerp(percent, 1.0, users[i].clipTo); } splitPoints = new SplinePoint[lastPointIndex + 2]; for (int i = 0; i <= lastPointIndex; i++) { splitPoints[i] = computer.GetPoint(i); } splitPoints[splitPoints.Length - 1] = splitPoint; points = splitPoints; users = computer.GetSubscribers(); for (int i = 0; i < users.Length; i++) { users[i].clipFrom = DMath.InverseLerp(0.0, percent, users[i].clipFrom); users[i].clipTo = DMath.InverseLerp(0.0, percent, users[i].clipTo); } HandleNodes(spline, lastPointIndex); }
public virtual void AddConnection(SplineComputer computer, int pointIndex) { RemoveInvalidConnections(); Node connected = computer.GetNode(pointIndex); if (connected != null) { Debug.LogError(computer.name + " is already connected to node " + connected.name + " at point " + pointIndex); return; } SplinePoint point = computer.GetPoint(pointIndex); point.SetPosition(transform.position); ArrayUtility.Add(ref connections, new Connection(computer, pointIndex, PointToLocal(point))); if (connections.Length == 1) { SetPoint(connections.Length - 1, point, true); } UpdateConnectedComputers(); }
public virtual void AddConnection(SplineComputer computer, int pointIndex) { RemoveInvalidConnections(); for (int i = 0; i < computer.nodeLinks.Length; i++) { if (computer.nodeLinks[i].pointIndex == pointIndex) { Debug.LogError("Connection has been already added in " + computer.nodeLinks[i].node); return; } } SplinePoint point = computer.GetPoint(pointIndex); point.SetPosition(transform.position); Connection newConnection = new Connection(computer, pointIndex, PointToLocal(point)); Connection[] newConnections = new Connection[connections.Length + 1]; connections.CopyTo(newConnections, 0); newConnections[connections.Length] = newConnection; connections = newConnections; SetPoint(connections.Length - 1, point); computer.AddNodeLink(this, pointIndex); UpdateConnectedComputers(); }
public virtual void AddConnection(SplineComputer computer, int pointIndex) { RemoveInvalidConnections(); for (int i = 0; i < computer.nodeLinks.Length; i++) { if (computer.nodeLinks[i].pointIndex == pointIndex) { UnityEngine.Debug.LogError("Connection has been already added in " + computer.nodeLinks[i].node); return; } } SplinePoint point = computer.GetPoint(pointIndex); point.SetPosition(base.transform.position); Connection connection = new Connection(computer, pointIndex, PointToLocal(point)); Connection[] array = new Connection[connections.Length + 1]; connections.CopyTo(array, 0); array[connections.Length] = connection; connections = array; SetPoint(connections.Length - 1, point, swappedTangents: true); computer.AddNodeLink(this, pointIndex); UpdateConnectedComputers(); }
void MakeMiddlePoint(ref SplinePoint point) { point.type = SplinePoint.Type.Broken; point.position = computer.transform.InverseTransformPoint(point.position); point.tangent = computer.transform.InverseTransformPoint(point.tangent); point.tangent2 = computer.transform.InverseTransformPoint(point.tangent2); Vector3 newPos = point.position; Vector3 localCenter = computer.transform.InverseTransformPoint(center); switch (axis) { case Axis.X: newPos.x = localCenter.x; point.SetPosition(newPos); if ((point.tangent.x >= localCenter.x && flip) || (point.tangent.x <= localCenter.x && !flip)) { point.tangent2 = point.tangent; point.tangent2.x = point.position.x + (point.position.x - point.tangent.x); } else { point.tangent = point.tangent2; point.tangent.x = point.position.x + (point.position.x - point.tangent2.x); } break; case Axis.Y: newPos.y = localCenter.y; point.SetPosition(newPos); if ((point.tangent.y >= localCenter.y && flip) || (point.tangent.y <= localCenter.y && !flip)) { point.tangent2 = point.tangent; point.tangent2.y = point.position.y + (point.position.y - point.tangent.y); } else { point.tangent = point.tangent2; point.tangent.y = point.position.y + (point.position.y - point.tangent2.y); } break; case Axis.Z: newPos.z = localCenter.z; point.SetPosition(newPos); if ((point.tangent.z >= localCenter.z && flip) || (point.tangent.z <= localCenter.z && !flip)) { point.tangent2 = point.tangent; point.tangent2.z = point.position.z + (point.position.z - point.tangent.z); } else { point.tangent = point.tangent2; point.tangent.z = point.position.z + (point.position.z - point.tangent2.z); } break; } point.position = computer.transform.TransformPoint(point.position); point.tangent = computer.transform.TransformPoint(point.tangent); point.tangent2 = computer.transform.TransformPoint(point.tangent2); }