// Update is called once per frame void Update() { // Checking for changes in the selected curve's gizmos if (m_selectedCaveCurve != null) { List <CaveCubicBezier> updates = new List <CaveCubicBezier> (); for (int i = 0; i < 4; ++i) { if (m_selectedCaveCurve.m_gizmos[i].transform.hasChanged) { switch (i) { case 0: if (m_selectedCaveCurve.transform.parent.GetComponent <CaveCubicBezier> () != null) { // Set parent end to new node pos m_selectedCaveCurve.transform.parent.GetComponent <CaveCubicBezier> ().SetEnd(m_selectedCaveCurve.m_gizmos [i].position); // Add parent to update updates.Add(m_selectedCaveCurve.transform.parent.GetComponent <CaveCubicBezier> ()); // Set all children of parent to node pos (including this node start) foreach (Transform child in m_selectedCaveCurve.transform.parent.transform) { child.GetComponent <CaveCubicBezier> ().SetStart(m_selectedCaveCurve.m_gizmos [i].position); // Add all children to update updates.Add(child.GetComponent <CaveCubicBezier> ()); } } break; case 1: m_selectedCaveCurve.SetStartControl(m_selectedCaveCurve.m_gizmos[i].position); break; case 2: m_selectedCaveCurve.SetEndControl(m_selectedCaveCurve.m_gizmos[i].position); break; case 3: m_selectedCaveCurve.SetEnd(m_selectedCaveCurve.m_gizmos [i].position); foreach (Transform child in m_selectedCaveCurve.transform) { child.GetComponent <CaveCubicBezier> ().SetStart(m_selectedCaveCurve.m_gizmos [i].position); updates.Add(child.GetComponent <CaveCubicBezier> ()); } break; } updates.Add(m_selectedCaveCurve); m_selectedCaveCurve.m_gizmos[i].transform.hasChanged = false; } } foreach (CaveCubicBezier up in updates) { up.UpdateMesh(m_allLinkedAttributes.GetAttribute <int> ("CaveDivRes"), m_allLinkedAttributes.GetAttribute <int> ("CaveRoundRes")); } } // Deleting caves with the delete key if (Input.GetKeyDown(KeyCode.Delete)) { if (m_selectedCaveCurve != null) { Cave cave = m_selectedCaveCurve.transform.root.GetComponent <Cave> ().GetComponent <Cave> (); if (m_selectedCaveCurve.transform.root != m_selectedCaveCurve.transform.parent) { cave.m_curveLists.Remove(m_selectedCaveCurve.gameObject); // If that was the last cave in the hierarchy, destroy the cave container if (cave.GetComponent <Cave> ().m_curveLists.Count == 0) { m_caveObjects.Remove(cave.gameObject); Destroy(cave.gameObject); } // Collect the children List <Transform> moves = new List <Transform> (); foreach (Transform child in m_selectedCaveCurve.transform) { moves.Add(child); child.GetComponent <CaveCubicBezier> ().SetStart(m_selectedCaveCurve.transform.parent.GetComponent <CaveCubicBezier> ().GetEnd()); child.GetComponent <CaveCubicBezier> ().UpdateMesh(m_allLinkedAttributes.GetAttribute <int> ("CaveDivRes"), m_allLinkedAttributes.GetAttribute <int> ("CaveRoundRes")); } // Move the children, non destructively foreach (Transform move in moves) { move.SetParent(m_selectedCaveCurve.transform.parent); } // Destroy the selected game object Destroy(m_selectedCaveCurve.gameObject); // Make certain the selected is null DeSelectCaveBezier(); } else { m_caveObjects.Remove(cave.gameObject); DeSelectCaveBezier(); Destroy(cave.gameObject); } } } // Should be offset currently if (m_mapHandler.oddMod == 1 && m_mapHandler.oddModChunk == 1) { m_halfOffset = true; } }