示例#1
0
    // 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;
        }
    }