/* En esta función se deserealiza el archivo "DialogueNodeMap". Se llama desde el archivo
     * DialogueNodeMapEditor Ese archivo se encarga de mostrar el botón para abrir la ventana de
     * nodos de ese archivo en particular, por lo tanto es el que contiene la referencia al archivo.
     * En esta función se agarra la lista de "DialogueMapSerializedObject" que contiene cada nodo en
     * un modo que no es legible por el editor de nodos pero que sirve para que le guste al sistema de
     * serializado de unity (el sistema no admite clases abstractas ni recursión). Esta función hace de
     * interprete, pasando de DialogueMapSerializedObject a el tipo de nodo que corresponda
     * (basenode, startnode, endnode, etc)
     */
    public void LoadAssetFile(DialogueNodeMap assetFile)
    {
        _assetFile = assetFile;

        //Se borran las listas en caso de que haya información anterior no deseada
        _nodes.Clear();
        _idList.Clear();

        //Interpreto en base al título que clase de nodo se guardó y lo genero en la ventana
        foreach (var map in assetFile.nodes)
        {
            //Guardo el ID de cada uno en la lista de ID's, para que al crear nuevos no se superpongan
            _idList.Add(map.id);

            if (map.windowTitle == "Start")
            {
                AddStartNode(map.windowRect, map.id);
            }
            else if (map.windowTitle == "End")
            {
                AddEndNode(map.windowRect, map.id);
            }
            else if (map.windowTitle == "Dialogue")
            {
                /* En este caso "AddDialogueNode" devuelve el nodo que crea, por lo tanto,
                 * utilizando el nodo que devuelve puedo usar su función SetNodeData() y pasarle la varialbe
                 * jsonObject para que el nodo se encargue de interpretarla y rellenar el contenido del nodo */
                AddDialogueNode(map.windowRect, map.id).SetNodeData(map.data);
            }
            else if (map.windowTitle == "Option")
            {
                AddOptionNode(map.windowRect, map.id).SetNodeData(map.data);
            }
        }

        /* Una vez que están todos creados por separado les asigno sus padres a cada uno
         * Por cada "DialogueMapSerializedObject" (detro de el archivo serializado)
         */
        foreach (var map in assetFile.nodes)
        {
            //Por cada Nodo (no serializado, sino dentro del editor)
            foreach (var node in _nodes)
            {
                /* Busco la coincidencia, es decir que estoy parado en el mismo nodo
                 * tanto en el foreach de DialogueMapSerializedObject como en el de los Nodos
                 */
                if (node.id == map.id)
                {
                    /* Si hay coincidencia recorro cada parentId del DialogueMapSerializedObject
                     * Ya que lo necesito para luego buscar la coincidencia entre el ID y el nodo
                     * generado y así finalmente asignarle el padre a su hijo
                     */
                    foreach (var parentId in map.parentIds)
                    {
                        /* Vuelvo a hacer un recorrido de cada uno de los nodos ya
                         * generados para encontrar el nodo que contenga el parentId
                         */
                        foreach (var n in _nodes)
                        {
                            if (n.id == parentId)
                            {
                                /* Si hubo coincidencia seteo al nodo que se encontró recorriendo los parentId del objeto serializado
                                 * como padre del nodo que se encontró recorriendo los id del objeto serializado
                                 */
                                node.SetParent(n);
                            }
                        }
                    }
                }
            }
        }
    }
 private void OnEnable()
 {
     //Cargo la referencia al archivo
     _target = (DialogueNodeMap)target;
 }