void TraverseNodeImportar( NodoUI nodo, XmlNode XmlNode)
    {
      //essa função tem um erro, por algum motivo um nodo adiciona dois links ao importar arvores maiores que 4
        //tentando criar uma estrutura pra arvore :S
        NodoUI novoNodo = AdicionarNodo();
        novoNodo.AdicionarPorta();
        if (nodo != null)
        {
           
            AdicionarLink(nodo.PortaSaida(), novoNodo.PortaEntrada());
        }
        else
            Debug.Log("nodo null");
        novoNodo.name = "Nodo" + novoNodo.id.ToString();
        novoNodo.nome = XmlNode.Attributes["Nome"].Value;
     //   Debug.Log("adicionando nodo" + novoNodo.nome);
        novoNodo.IniciarNome();

        for (int i = 0; i < XmlNode.ChildNodes.Count; i++)
        {
            XmlNode ChildXml=XmlNode.ChildNodes[i];

            if (ChildXml.Name=="Propriedades")
            {
                foreach( XmlNode prop in ChildXml.ChildNodes)
                {
                    var propUI = novoNodo.AdicionarPropriedade();
                    propUI.gameObject.SetActive(true);
                    propUI.nome = prop.Attributes["Nome"].Value;
                    propUI.Valor = prop.Attributes["Valor"].Value;
                    propUI.SetarNome();
                    propUI.SetarValor();
                    propUI.gameObject.SetActive(false);
                   // Debug.Log("adicionando " + propUI.nome);
                }
            }
            if (ChildXml.Name == "PortaSaida")
            {
               // Debug.Log("chegou no nodo de saida");
                if(ChildXml.ChildNodes.Count>0)
                {
                  //  Debug.Log("adicionando porta numero de filhos:" + ChildXml.ChildNodes.Count);
                   // novoNodo.AdicionarPorta();
                }
                foreach (XmlNode xmlNodeChild in ChildXml.ChildNodes)
                {              
 
                    TraverseNodeImportar(novoNodo, xmlNodeChild);
                }
            }
      
        }

    }
    void TraverseNodeExportar( NodoUI nodo,  XmlElement nodoXMLPai,  XmlDocument xml)
    {
        XmlElement novoNodoXML = xml.CreateElement("Nodo");
        novoNodoXML.SetAttribute("Nome", nodo.nome);

        //serializar novas propriedades?
        XmlElement propriedades = xml.CreateElement("Propriedades");
        for (int i = 0; i < nodo.listaDePropriedades.Count; i++)
        {
            XmlElement propriedade = xml.CreateElement("propriedade");
            propriedade.SetAttribute("Nome", nodo.listaDePropriedades[i].nome);
            propriedade.SetAttribute( "Valor",nodo.listaDePropriedades[i].Valor);        
            propriedades.AppendChild(propriedade);
        }

        novoNodoXML.AppendChild(propriedades);
        nodoXMLPai.AppendChild(novoNodoXML);
             
        foreach(var porta in nodo.listaDePortas)
        {
            if (porta.tipoDePorta == TipoDePorta.Saida)
            {
                XmlElement NovaportaXml = null ;
                if(porta.listaDeLinks.Count>0)
                {
                     NovaportaXml = xml.CreateElement("PortaSaida");
                    novoNodoXML.AppendChild(NovaportaXml);
                }             
                foreach (var link in porta.listaDeLinks)
                {
                    //Debug.Log(link.entrada.transform.parent.name);                   
                    TraverseNodeExportar(link.entrada.transform.parent.GetComponent<NodoUI>(), NovaportaXml, xml);
                }
            }
        }
    }
 void FocusOnNodoSelecionado()
 {
    if(nodoSelecionadoAtualmente==null)
    {
        //nodoSelecionadoAtualmente = DicionarioDeNodos[IdNodoMaisAEsquerda()];
        nodoSelecionadoAtualmente = ArrayDeNodos[IdNodoMaisAEsquerda()];
        if (nodoSelecionadoAtualmente == null)
            return;
    }
    CameraGameObjct.transform.position = new Vector3(nodoSelecionadoAtualmente.transform.position.x, nodoSelecionadoAtualmente.transform.position.y, CameraGameObjct.transform.position.z);
 }
 public void CancelarNodoSelecionado()
 {
     if (nodoSelecionadoAtualmente != null)
     {
         nodoSelecionadoAtualmente.GetComponent<NodoUI>().DesSelecionar();
         nodoSelecionadoAtualmente = null;
     }
     if(PortaSelecionadaAtualmente!=null)
     {
         PortaSelecionadaAtualmente.GetComponent<PortaUI>().DesSelecionar();
     }
 }
 public void RemoverTodosNodos() 
 {
  //   foreach (var id in new List<int>(DicionarioDeNodos.Keys))
     for (int id = 0; id < ArrayDeNodos.Length;id++ )
     {
         if (ArrayDeNodos[id] != null)
         {
             //   nodoSelecionadoAtualmente = DicionarioDeNodos[id];
             nodoSelecionadoAtualmente = ArrayDeNodos[id];
             RemoverNodo();
         }
     }
 }
 public void RemoverNodo()
 {
     if(nodoSelecionadoAtualmente==null)
     {
         Debug.Log("nada a apagar");
         return;
     }
     int id = nodoSelecionadoAtualmente.id;
   //  Debug.Log("id a ser removido=" + id);
   //  Debug.Log(DicionarioDeNodos.Count);
  //   DicionarioDeNodos[id].GetComponent<NodoUI>().RemoverTodasAsPortas();
     ArrayDeNodos[id].RemoverTodasAsPortas();
    // GameObject.Destroy(DicionarioDeNodos[id]);
     GameObject.Destroy(ArrayDeNodos[id].gameObject);
     Debug.Log("nodo destruido");
    // DicionarioDeNodos.Remove(id);
     ArrayDeNodos[id] = null;
     nodoSelecionadoAtualmente = null;
 }