private void SaveConversation() { BaseScriptableObject lastNode = null; for (int i = 0; i < windows.Count; i++) { if (windows[i] is StartNode) { StartNode nodeNew = (StartNode)windows[i]; Dialogue start = ScriptableObjectUtility.CreateAsset <Dialogue>(); //start.name = "Start"; start.start = true; start.windowPos = nodeNew.windowRect; lastNode = start; ScriptToDelete.Add((BaseScriptableObject)start); } if (windows[i] is DialogueNode) { DialogueNode nodeNew = (DialogueNode)windows[i]; Dialogue npcDialogue = ScriptableObjectUtility.CreateAsset <Dialogue>(); npcDialogue.dialogue = nodeNew.text; npcDialogue.windowPos = nodeNew.windowRect; if (lastNode != null) { lastNode.next = npcDialogue; } lastNode = npcDialogue; ScriptToDelete.Add((BaseScriptableObject)npcDialogue); } if (windows[i] is EventNode) { EventNode nodeNew = (EventNode)windows[i]; EventDialogue npcDialogue = ScriptableObjectUtility.CreateAsset <EventDialogue>(); npcDialogue.dialogue = nodeNew.text; npcDialogue.rewardToRecieve = nodeNew.reward; if (nodeNew.healthPoints != 0) { npcDialogue.goldOrHp = nodeNew.healthPoints; } else if (nodeNew.gold != 0) { npcDialogue.goldOrHp = nodeNew.gold; } else { npcDialogue.item = nodeNew.itemId; } npcDialogue.windowPos = nodeNew.windowRect; if (lastNode != null) { lastNode.next = npcDialogue; } lastNode = npcDialogue; ScriptToDelete.Add((BaseScriptableObject)npcDialogue); } if (windows[i] is EndNode) { EndNode endNode = (EndNode)windows[i]; BaseScriptableObject end = ScriptableObjectUtility.CreateAsset <BaseScriptableObject>(); //end.name = "End"; end.dialogue = "Finished"; end.windowPos = endNode.windowRect; lastNode.next = end; //lastNode = end; ScriptToDelete.Add((BaseScriptableObject)end); } if (windows[i] is DiceRollNode) { DiceRollNode nodeNew = (DiceRollNode)windows[i]; DiceDialogue npcDialogue = ScriptableObjectUtility.CreateAsset <DiceDialogue>(); npcDialogue.roll = nodeNew.rollType; npcDialogue.difficulty = nodeNew.difficulty; npcDialogue.windowPos = nodeNew.windowRect; ScriptToDelete.Add((BaseScriptableObject)npcDialogue); if (lastNode != null) { lastNode.next = npcDialogue; } i++; EndNode endNode = (EndNode)windows[i]; BaseScriptableObject end = ScriptableObjectUtility.CreateAsset <BaseScriptableObject>(); //end.name = "End"; end.dialogue = endNode.finished; end.windowPos = endNode.windowRect; npcDialogue.fail = end; lastNode = npcDialogue; ScriptToDelete.Add((BaseScriptableObject)end); } } }
//Dibuja los botones propios de la ventana del editor private void DrawButtons() { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Add Start")) { foreach (var item in windows) { //TIRA ERROR //if (item.GetType().Equals(typeof(StartNode))) { // return; //} if (item.windowTittle == "Start") { return; } StartNode startNode = new StartNode(); startNode.windowRect = new Rect(50, 100, 200, 50); windows.Add(startNode); } } if (GUILayout.Button("Add Dialogue")) { DialogueNode dialogueNode = new DialogueNode(); dialogueNode.windowRect = new Rect(200, 100, 200, 150); windows.Add(dialogueNode); } if (GUILayout.Button("Add Choice")) { ChoiceNode choiceNode = new ChoiceNode(); choiceNode.windowRect = new Rect(400, 100, 200, 150); windows.Add(choiceNode); } if (GUILayout.Button("Add Roll")) { DiceRollNode diceRollNode = new DiceRollNode(); diceRollNode.windowRect = new Rect(600, 100, 200, 150); windows.Add(diceRollNode); } if (GUILayout.Button("Add Event")) { EventNode eventNode = new EventNode(); eventNode.windowRect = new Rect(800, 100, 200, 150); windows.Add(eventNode); } if (GUILayout.Button("Add End")) { EndNode endNode = new EndNode(); endNode.windowRect = new Rect(1000, 100, 200, 50); windows.Add(endNode); } EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate Conversation")) { if (ScriptToDelete.Count > 0) { EraseScriptObj(); } SaveConversation(); } }
//Contiene las funciones para las opciones del menu contextual void ContextCallBack(object obj) { string clb = obj.ToString(); if (clb.Equals("startNode")) { foreach (var item in windows) { //TIRA ERROR //if (item.GetType().Equals(typeof(StartNode))) { // return; //} if (item.windowTittle == "Start") { return; } StartNode startNode = new StartNode(); startNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 50); windows.Add(startNode); } } if (clb.Equals("dialogueNode")) { DialogueNode dialogueNode = new DialogueNode(); dialogueNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); windows.Add(dialogueNode); } if (clb.Equals("choiceNode")) { ChoiceNode choiceNode = new ChoiceNode(); choiceNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); windows.Add(choiceNode); } if (clb.Equals("eventNode")) { EventNode eventNode = new EventNode(); eventNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); windows.Add(eventNode); } if (clb.Equals("diceRollNode")) { DiceRollNode diceRollNode = new DiceRollNode(); diceRollNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 150); windows.Add(diceRollNode); } if (clb.Equals("endNode")) { EndNode endNode = new EndNode(); endNode.windowRect = new Rect(mousePos.x, mousePos.y, 200, 50); windows.Add(endNode); } else if (clb.Equals("makeTransition")) { bool clickedOnWindow = false; int selectIndex = -1; for (int i = 0; i < windows.Count; i++) { if (windows[i].windowRect.Contains(mousePos)) { selectIndex = i; clickedOnWindow = true; break; } } if (clickedOnWindow) { selectedNode = windows[selectIndex]; makeTransitionMode = true; } } else if (clb.Equals("deleteNode")) { bool clickedOnWindow = false; int selectIndex = -1; for (int i = 0; i < windows.Count; i++) { if (windows[i].windowRect.Contains(mousePos)) { selectIndex = i; clickedOnWindow = true; break; } } if (clickedOnWindow) { BaseNode selNode = windows[selectIndex]; windows.RemoveAt(selectIndex); foreach (BaseNode n in windows) { n.NodeDeleted(selNode); } } } }
public void ReloadConversation(Object dragged) { /* BaseNode selNode = windows[0]; * windows.RemoveAt(0); * * foreach (BaseNode n in windows) * { * n.NodeDeleted(selNode); * }*/ BaseScriptableObject dialogue = (BaseScriptableObject)dragged; BaseInputNode lastDiag; Dialogue start = (Dialogue)dialogue; StartNode startNode = (StartNode)windows[0]; startNode.windowRect = start.windowPos; lastDiag = startNode; BaseScriptableObject lastDiagScriptObj = start; while (dialogue.next != null) { ScriptToDelete.Add(dialogue); if (dialogue is Dialogue) { Dialogue npcDialogue = (Dialogue)dialogue; if (!npcDialogue.start) { DialogueNode newNode = new DialogueNode(); newNode.windowRect = npcDialogue.windowPos; newNode.text = npcDialogue.dialogue; newNode.hasInput = true; newNode.input1 = lastDiag; newNode.input1Rect = lastDiag.windowRect; lastDiag = newNode; windows.Add(newNode); } // dialogue = dialogue.next; } else if (dialogue is EventDialogue) { EventDialogue npcDialogue = (EventDialogue)dialogue; EventNode newNode = new EventNode(); newNode.windowRect = npcDialogue.windowPos; newNode.text = npcDialogue.dialogue; newNode.reward = npcDialogue.rewardToRecieve; if (newNode.reward == DialogueEventType.EventReward.gold) { newNode.gold = npcDialogue.goldOrHp; } else if (newNode.reward == DialogueEventType.EventReward.life) { newNode.healthPoints = npcDialogue.goldOrHp; } else { newNode.itemId = npcDialogue.item; } newNode.hasInput = true; newNode.input1 = lastDiag; newNode.input1Rect = lastDiag.windowRect; lastDiag = newNode; windows.Add(newNode); } else if (dialogue is DiceDialogue) { DiceDialogue diceRoll = (DiceDialogue)dialogue; DiceRollNode newNode = new DiceRollNode(); newNode.windowRect = diceRoll.windowPos; newNode.rollType = diceRoll.roll; newNode.difficulty = diceRoll.difficulty; newNode.hasInput = true; newNode.input1 = lastDiag; newNode.input1Rect = lastDiag.windowRect; //BaseScriptableObject endObj = diceRoll.fail; EndNode newEnd = new EndNode(); newEnd.windowRect = diceRoll.fail.windowPos; newEnd.finished = diceRoll.fail.dialogue; newEnd.hasInput = true; newEnd.inputNode = newNode; newEnd.inputNodeRect = newNode.windowRect; ScriptToDelete.Add(diceRoll.fail); lastDiag = newNode; windows.Add(newNode); windows.Add(newEnd); } lastDiagScriptObj = dialogue; Debug.Log("asdasd"); dialogue = dialogue.next; } EndNode lastEnd = new EndNode(); lastEnd.windowRect = lastDiagScriptObj.next.windowPos; lastEnd.finished = lastDiagScriptObj.next.dialogue; lastEnd.hasInput = true; lastEnd.inputNode = lastDiag; lastEnd.inputNodeRect = lastDiag.windowRect; ScriptToDelete.Add(lastDiagScriptObj.next); windows.Add(lastEnd); Debug.Log("ultimo alcanzado"); Repaint(); }