public GameObject AddPrev() { GameObject dup = (GameObject)GameObject.Instantiate(gameObject); //Start by copying me //For some reason, all children are active on duplication. We just need to deactivate all of the children, and reactivate the parent dup.SetActiveRecursively(false); dup.active = true; if (transform.parent) { dup.transform.parent = transform.parent; //If I have a parent, add it to the new node } dup.transform.position = transform.position + Vector3.left * addOffset; dup.transform.localScale = transform.localScale; dup.name = "Node"; SplineNode dupNode = dup.GetComponent <SplineNode>(); dupNode.spanCollider = null; if (dupNode) { if (previous) { previous.next = dupNode; //My previous node now points to the new node dupNode.previous = previous; //The new node points back to my old previous } previous = dupNode; //The dup is now my previous node dupNode.next = this; //I'm the dup's next node } dupNode.AddCollider(); if (spline) { spline.AddVert(dupNode); } return(dup); }
public GameObject AddNext() { //New Node GameObject dup = (GameObject)GameObject.Instantiate(gameObject); dup.SetActive(false); dup.SetActive(true); if (transform.parent) { dup.transform.parent = transform.parent; } dup.transform.position = transform.position + Vector3.right * addOffset; dup.transform.rotation = Quaternion.FromToRotation(Vector3.forward, Vector3.right); dup.transform.localScale = transform.localScale; dup.name = "Node"; SplineNode dupNode = dup.GetComponent <SplineNode>(); dupNode.spanCollider = null; if (next) { next.previous = dupNode; dupNode.next = next; dupNode.AddCollider(); } next = dupNode; //The dup is now my previous node dupNode.previous = this; //I'm the dup's next node AddCollider(); if (spline) { spline.AddVert(dupNode); } return(dup); }
public override void OnInspectorGUI() { DrawDefaultInspector(); Spline spline = (Spline)target; if (spline) { if (spline.begin) { EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Set Speed")) { SplineNode begin = spline.begin; do { begin.speed = spline.setSpeed; begin = begin.next; } while(begin && begin != spline.begin); } if (GUILayout.Button("Set Pause Time")) { SplineNode begin = spline.begin; do { begin.pauseTime = spline.setPauseTime; begin = begin.next; } while(begin && begin != spline.begin); } if (GUILayout.Button("Toggle handles")) { SplineNode begin = spline.begin; spline.handlesOn = !spline.handlesOn; do { begin.hideHandles = spline.handlesOn; begin.RefreshModel(); begin = begin.next; } while(begin && begin != spline.begin); } if (GUILayout.Button("Toggle nodes")) { SplineNode begin = spline.begin; spline.nodesOn = !spline.nodesOn; do { begin.GetComponent <Renderer>().enabled = spline.nodesOn; begin = begin.next; } while(begin && begin != spline.begin); } EditorGUILayout.EndHorizontal(); } spline.colliderRadius = EditorGUILayout.Slider("Global Collider Radius", spline.colliderRadius, Mathf.Epsilon, spline.maxColliderRadius); SplineNode node = spline.begin; do { if (!node.colliderFreedom) { node.colliderRadius = spline.colliderRadius; node.ReOrient(); } node = node.next; } while(node && node != spline.begin); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Toggle colliders")) { spline.collidersOn = !spline.collidersOn; SplineColliderDraw[] colliders = spline.GetComponentsInChildren <SplineColliderDraw>(); foreach (SplineColliderDraw draw in colliders) { draw.draw = spline.collidersOn; } } if (GUILayout.Button("Reset Colliders")) { node = spline.begin; do { node.colliderType = spline.globalColliderType; node.AddCollider(); node = node.next; } while(node && node != spline.begin); SplineColliderDraw[] colliders = spline.GetComponentsInChildren <SplineColliderDraw>(); foreach (SplineColliderDraw draw in colliders) { draw.draw = spline.collidersOn; } } if (GUILayout.Button("Lock Ornaments")) { node = spline.begin; spline.locked = !spline.locked; do { node.Locked = spline.locked; node = node.next; } while(node && node != spline.begin); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } }