public void RecalculateCurve() { switch (method) { case 0: CollectBezierPoints(); break; case 1: CollectBezierPoints2(); break; default: CollectBezierPoints(); break; } this.arcLength = CalculateLength(bezierPoints); this.midPoint = P(0.5f); this.transform.position = this.midPoint; if (left != null) { Vector3 offsetVector = -GetOrthogonalNormalizedVector(bezierPoints[0], bezierPoints[1]) * leftStartOffset; left.startPosition = this.startPosition + offsetVector; left.startTangentPosition = left.startPosition + this.startTangentVector; offsetVector = -GetOrthogonalNormalizedVector(bezierPoints[bezierPoints.Count - 2], bezierPoints[bezierPoints.Count - 1]) * leftEndOffset; left.endPosition = this.endPosition + offsetVector; left.endTangentPosition = left.endPosition - this.endTangentVector; left.RecalculateCurve(); } GenerateMesh(); }
public override void OnInspectorGUI() { DrawDefaultInspector(); bool changed = false; int old = this.cubicBezier.segments; this.cubicBezier.segments = EditorGUILayout.IntSlider(this.cubicBezier.segments, 1, 1000); if (old != this.cubicBezier.segments) { changed = true; } newOffset = EditorGUILayout.FloatField("New Offset Value", newOffset); newHeightOffset = EditorGUILayout.FloatField("New Offset Value", newHeightOffset); if (GUILayout.Button("Add new Offset")) { this.cubicBezier.offsets.Add(new Vector2(newOffset, newHeightOffset)); } float oldValue = cubicBezier.width; float newValue = GUILayout.HorizontalSlider(cubicBezier.width, 0f, 20f); if (oldValue != newValue) { cubicBezier.width = newValue; cubicBezier.offsets.Clear(); cubicBezier.offsets.Add(new Vector2(-cubicBezier.width * 0.5f, 0f)); cubicBezier.offsets.Add(new Vector2(cubicBezier.width * 0.5f, 0f)); cubicBezier.GenerateMesh(); } bool oldBoolValue = cubicBezier.isLine; bool newBoolValue = EditorGUILayout.Toggle("Is Line", oldBoolValue); if (oldBoolValue != newBoolValue) { cubicBezier.isLine = newBoolValue; if (cubicBezier.isLine) { cubicBezier.offsets.Clear(); cubicBezier.offsets.Add(new Vector2(-cubicBezier.width * 0.5f, 0f)); cubicBezier.offsets.Add(new Vector2(cubicBezier.width * 0.5f, 0f)); } cubicBezier.GenerateMesh(); } if (GUILayout.Button("Make Street")) { this.cubicBezier.offsets.Clear(); float akku = 0; // Mittelstreifen this.cubicBezier.offsets.Add(new Vector2(akku, 0.4f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.4f, 0.35f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.7f, 0.12f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.12f, 0.12f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.03f, 0.00f)); //Straße this.cubicBezier.offsets.Add(new Vector2(akku += 0.25f, 0.04f)); this.cubicBezier.offsets.Add(new Vector2(akku += 2.5f, 0.1f)); this.cubicBezier.offsets.Add(new Vector2(akku += 2.5f, 0.04f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.25f, 0.0f)); // Parkstreifen mit Bordstein this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.05f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.06f)); this.cubicBezier.offsets.Add(new Vector2(akku += 1.85f, 0.06f)); // Zwischenstreifen mit Bordstein this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.16f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.18f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.60f, 0.18f)); // Radweg this.cubicBezier.offsets.Add(new Vector2(akku += 1.6f, 0.2f)); // Fußgänger this.cubicBezier.offsets.Add(new Vector2(akku += 4f, 0.3f)); //Downward this.cubicBezier.offsets.Add(new Vector2(akku, -3f)); akku = -akku; this.cubicBezier.offsets.Add(new Vector2(akku, -3f)); this.cubicBezier.offsets.Add(new Vector2(akku, 0.3f)); // Fußgänger this.cubicBezier.offsets.Add(new Vector2(akku += 4f, 0.2f)); // Radweg this.cubicBezier.offsets.Add(new Vector2(akku += 1.6f, 0.18f)); // Zwischenstreifen mit Bordstein this.cubicBezier.offsets.Add(new Vector2(akku += 0.60f, 0.18f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.16f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.06f)); // Parkstreifen mit Bordstein this.cubicBezier.offsets.Add(new Vector2(akku += 1.85f, 0.06f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.05f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.075f, 0.0f)); //Straße this.cubicBezier.offsets.Add(new Vector2(akku += 0.25f, 0.04f)); this.cubicBezier.offsets.Add(new Vector2(akku += 2.5f, 0.1f)); this.cubicBezier.offsets.Add(new Vector2(akku += 2.5f, 0.04f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.25f, 0.00f)); // Mittelstreifen this.cubicBezier.offsets.Add(new Vector2(akku += 0.03f, 0.12f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.12f, 0.12f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.7f, 0.35f)); this.cubicBezier.offsets.Add(new Vector2(akku += 0.4f, 0.4f)); //this.cubicBezier.offsets.Add(new Vector2(akku, 0.0f)); changed = true; } if (changed) { cubicBezier.RecalculateCurve(); } // if(GUILayout.Button("")) { // // } if (GUI.changed) { EditorUtility.SetDirty(cubicBezier); } }