/* 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; }