Beispiel #1
0
    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);
            }
        }
    }
Beispiel #2
0
    //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();
        }
    }
Beispiel #3
0
    //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);
                }
            }
        }
    }
Beispiel #4
0
    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();
    }