void OnEnable() { points = serializedObject.FindProperty("points"); step = serializedObject.FindProperty("step"); bezierCollider = (BezierCollider2D)target; edgeCollider = bezierCollider.GetComponent <EdgeCollider2D> (); }
void CreateSlope(Vector2 p0, float density, bool Pitfall = false, float length = 0) { GameObject newSlope; if (Pitfall) { newSlope = Instantiate(pitfallPrefab, p0, Quaternion.identity); } else { newSlope = Instantiate(slopePrefab, p0, Quaternion.identity); } BezierCollider2D bezier = newSlope.GetComponent <BezierCollider2D>(); BezierCollider2D previousBezier = slopes[slopes.Count - 1].GetComponent <BezierCollider2D>(); Vector2 d00 = previousBezier.getLastDerivative(); float decline = slopeDeclineFactor * Random.Range(.5f, 2f); if (length == 0) { length = slopeLengthFactor * Random.Range(.25f, 2); decline = slopeDeclineFactor * Random.Range(-.2f, 2f); } float turbulence = slopeTurbulenceFactor * Random.Range(0, 2); float deviation1 = Random.Range(.2f, .7f); float deviation2 = Random.Range(deviation1, .8f); float regressive2 = Random.Range(-length * turbulence, length * turbulence); bezier.firstPoint = new Vector2(0, 0); bezier.handlerFirstPoint = deviation1 * length * d00.normalized; bezier.handlerSecondPoint = new Vector2(length * deviation2, length * decline * deviation2 + regressive2); bezier.secondPoint = new Vector2(length, decline * length); bezier.pointsQuantity = (int)(density * (length)); Vector2[] points = newSlope.GetComponent <BezierCollider2D>().calculate2DPoints(); newSlope.GetComponent <EdgeCollider2D>().points = points; slopes.Add(newSlope.transform); List <int> pointIndeces = new List <int>(); for (int i = 0; i < bezier.pointsQuantity; i += 25) { pointIndeces.Add(i); } if (!Pitfall) { SpawnThings(newSlope.transform.position, pointIndeces, points); } }
public new void OnInspectorGUI() { bezierCollider = (BezierCollider2D)target; edgeCollider = bezierCollider.GetComponent <EdgeCollider2D>(); if (edgeCollider.hideFlags != HideFlags.HideInInspector) { edgeCollider.hideFlags = HideFlags.HideInInspector; } if (edgeCollider != null) { //bezierCollider.PhysicsMaterial2D = EditorGUILayout.ObjectField("curve points", bezierCollider.PhysicsMaterial2D, PhysicsMaterial2D, GUILayout.MinWidth(100)); GUILayout.BeginHorizontal(); bezierCollider.PhysicsMaterial2D = (PhysicsMaterial2D)EditorGUILayout.ObjectField("PhysicsMaterial2D", bezierCollider.PhysicsMaterial2D, typeof(PhysicsMaterial2D)); GUILayout.EndHorizontal(); bezierCollider.pointsQuantity = EditorGUILayout.IntField("curve points", bezierCollider.pointsQuantity, GUILayout.MinWidth(100)); bezierCollider.firstPoint = EditorGUILayout.Vector2Field("first point", bezierCollider.firstPoint, GUILayout.MinWidth(100)); bezierCollider.handlerFirstPoint = EditorGUILayout.Vector2Field("handler first Point", bezierCollider.handlerFirstPoint, GUILayout.MinWidth(100)); bezierCollider.secondPoint = EditorGUILayout.Vector2Field("second point", bezierCollider.secondPoint, GUILayout.MinWidth(100)); bezierCollider.handlerSecondPoint = EditorGUILayout.Vector2Field("handler secondPoint", bezierCollider.handlerSecondPoint, GUILayout.MinWidth(100)); EditorUtility.SetDirty(bezierCollider); if (bezierCollider.pointsQuantity > 0 && !bezierCollider.firstPoint.Equals(bezierCollider.secondPoint) && ( lastPointsQuantity != bezierCollider.pointsQuantity || lastFirstPoint != bezierCollider.firstPoint || lastHandlerFirstPoint != bezierCollider.handlerFirstPoint || lastSecondPoint != bezierCollider.secondPoint || lastHandlerSecondPoint != bezierCollider.handlerSecondPoint )) { lastPointsQuantity = bezierCollider.pointsQuantity; lastFirstPoint = bezierCollider.firstPoint; lastHandlerFirstPoint = bezierCollider.handlerFirstPoint; lastSecondPoint = bezierCollider.secondPoint; lastHandlerSecondPoint = bezierCollider.handlerSecondPoint; edgeCollider.points = bezierCollider.calculate2DPoints(); edgeCollider.sharedMaterial = bezierCollider.PhysicsMaterial2D; } } }
public override void OnInspectorGUI() { _bezierCollider = (BezierCollider2D)target; _edgeCollider = _bezierCollider.GetComponent <EdgeCollider2D>(); if (_edgeCollider.hideFlags != HideFlags.HideInInspector) { _edgeCollider.hideFlags = HideFlags.HideInInspector; } if (_edgeCollider != null) { _bezierCollider.pointsQuantity = EditorGUILayout.IntField("curve points", _bezierCollider.pointsQuantity, GUILayout.MinWidth(100)); _bezierCollider.firstPoint = EditorGUILayout.Vector2Field("first point", _bezierCollider.firstPoint, GUILayout.MinWidth(100)); _bezierCollider.handlerFirstPoint = EditorGUILayout.Vector2Field("handler first Point", _bezierCollider.handlerFirstPoint, GUILayout.MinWidth(100)); _bezierCollider.secondPoint = EditorGUILayout.Vector2Field("second point", _bezierCollider.secondPoint, GUILayout.MinWidth(100)); _bezierCollider.handlerSecondPoint = EditorGUILayout.Vector2Field("handler secondPoint", _bezierCollider.handlerSecondPoint, GUILayout.MinWidth(100)); EditorUtility.SetDirty(_bezierCollider); if (_bezierCollider.pointsQuantity > 0 && !_bezierCollider.firstPoint.Equals(_bezierCollider.secondPoint) && ( _lastPointsQuantity != _bezierCollider.pointsQuantity || _lastFirstPoint != _bezierCollider.firstPoint || _lastHandlerFirstPoint != _bezierCollider.handlerFirstPoint || _lastSecondPoint != _bezierCollider.secondPoint || _lastHandlerSecondPoint != _bezierCollider.handlerSecondPoint )) { _lastPointsQuantity = _bezierCollider.pointsQuantity; _lastFirstPoint = _bezierCollider.firstPoint; _lastHandlerFirstPoint = _bezierCollider.handlerFirstPoint; _lastSecondPoint = _bezierCollider.secondPoint; _lastHandlerSecondPoint = _bezierCollider.handlerSecondPoint; _edgeCollider.points = _bezierCollider.Calculate2DPoints(); } } }
public override void OnInspectorGUI() { bezierCollider = (BezierCollider2D)target; edgeCollider = bezierCollider.GetComponent <EdgeCollider2D>(); lineRenderer = bezierCollider.GetComponent <LineRenderer>(); edgeCollider.hideFlags = HideFlags.None; if (edgeCollider != null) { bezierCollider.pointsQuantity = EditorGUILayout.IntField("Curve Points", bezierCollider.pointsQuantity, GUILayout.MinWidth(100)); bezierCollider.firstPoint = EditorGUILayout.Vector2Field("First Point", bezierCollider.firstPoint, GUILayout.MinWidth(100)); bezierCollider.handlerFirstPoint = EditorGUILayout.Vector2Field("Handler First Point", bezierCollider.handlerFirstPoint, GUILayout.MinWidth(100)); bezierCollider.secondPoint = EditorGUILayout.Vector2Field("Second Point", bezierCollider.secondPoint, GUILayout.MinWidth(100)); bezierCollider.handlerSecondPoint = EditorGUILayout.Vector2Field("Handler SecondPoint", bezierCollider.handlerSecondPoint, GUILayout.MinWidth(100)); EditorUtility.SetDirty(bezierCollider); if (bezierCollider.pointsQuantity > 0 && !bezierCollider.firstPoint.Equals(bezierCollider.secondPoint) && ( lastPointsQuantity != bezierCollider.pointsQuantity || lastFirstPoint != bezierCollider.firstPoint || lastHandlerFirstPoint != bezierCollider.handlerFirstPoint || lastSecondPoint != bezierCollider.secondPoint || lastHandlerSecondPoint != bezierCollider.handlerSecondPoint )) { lastPointsQuantity = bezierCollider.pointsQuantity; lastFirstPoint = bezierCollider.firstPoint; lastHandlerFirstPoint = bezierCollider.handlerFirstPoint; lastSecondPoint = bezierCollider.secondPoint; lastHandlerSecondPoint = bezierCollider.handlerSecondPoint; Vector2[] points = bezierCollider.calculate2DPoints(); edgeCollider.points = points; lineRenderer.positionCount = points.Count(); lineRenderer.SetPositions(points.ToList().ConvertAll(v2 => (Vector3)v2).ToArray()); } } }
public override void OnInspectorGUI() { bezierCollider = (BezierCollider2D)target; edgeCollider = bezierCollider.GetComponent <EdgeCollider2D>(); if (edgeCollider.hideFlags != HideFlags.HideInInspector) { // edgeCollider.hideFlags = HideFlags.HideInInspector; } if (edgeCollider != null) { bezierCollider.pointsQuantity = EditorGUILayout.IntField("curve points", bezierCollider.pointsQuantity, GUILayout.MinWidth(100)); bezierCollider.firstPoint = EditorGUILayout.Vector2Field("first point", bezierCollider.firstPoint, GUILayout.MinWidth(100)); bezierCollider.handlerFirstPoint = EditorGUILayout.Vector2Field("handler first Point", bezierCollider.handlerFirstPoint, GUILayout.MinWidth(100)); bezierCollider.secondPoint = EditorGUILayout.Vector2Field("second point", bezierCollider.secondPoint, GUILayout.MinWidth(100)); bezierCollider.handlerSecondPoint = EditorGUILayout.Vector2Field("handler secondPoint", bezierCollider.handlerSecondPoint, GUILayout.MinWidth(100)); EditorUtility.SetDirty(bezierCollider); if (bezierCollider.pointsQuantity > 0 && !bezierCollider.firstPoint.Equals(bezierCollider.secondPoint) && ( lastPointsQuantity != bezierCollider.pointsQuantity || lastFirstPoint != bezierCollider.firstPoint || lastHandlerFirstPoint != bezierCollider.handlerFirstPoint || lastSecondPoint != bezierCollider.secondPoint || lastHandlerSecondPoint != bezierCollider.handlerSecondPoint )) { lastPointsQuantity = bezierCollider.pointsQuantity; lastFirstPoint = bezierCollider.firstPoint; lastHandlerFirstPoint = bezierCollider.handlerFirstPoint; lastSecondPoint = bezierCollider.secondPoint; lastHandlerSecondPoint = bezierCollider.handlerSecondPoint; //the important line edgeCollider.points = bezierCollider.calculate2DPoints(); } } }