Ejemplo n.º 1
0
 private void GenerateNodeFromContainer(DialogueData dialogueContainer)
 {
     foreach (var node in dialogueContainer.Nodes)
     {
         if (node.isEntryPoint)
         {
             var entryPoint = Nodes.Find(n => n.isEntryPoint);
             entryPoint.Guid = node.Guid;
             (entryPoint.outputContainer.Q <Port>() as DialoguePort).Next = node.Next;
             continue;
         }
         if (node.isChoiceNode)
         {
             ChoiceNode temp = ChoiceNode.Create("Choice Node");
             temp.Guid = node.Guid;
             foreach (var choice in node.Choices)
             {
                 ChoiceNode.AddChoicePort(temp, choice.Question, choice.Next);
             }
             temp.SetPosition(new Rect(JsonUtility.FromJson <Vector2>(node.JsonData), graph.nodeSize));
             graph.AddElement(temp);
         }
         else
         {
             var properties = new DialogueProperties
             {
                 Text                = node.Properties.Text,
                 Speaker             = node.Properties.Speaker,
                 speakerPosition     = node.Properties.speakerPosition,
                 Conversant1         = node.Properties.Conversant1,
                 conversant1Position = node.Properties.conversant1Position,
                 Conversant2         = node.Properties.Conversant2,
                 conversant2Position = node.Properties.conversant2Position
             };
             DialogueNode temp = DialogueNode.Create("Dialogue Node", properties, node.Next);
             temp.Guid = node.Guid;
             temp.SetPosition(new Rect(JsonUtility.FromJson <Vector2>(node.JsonData), graph.nodeSize));
             graph.AddElement(temp);
         }
     }
 }
Ejemplo n.º 2
0
        public void GetGraphData()
        {
            if (Edges.Count == 0)
            {
                EditorUtility.DisplayDialog("No Dialogue Connection", "Make Sure You Have at Least 1 Connection Between Dialogues", "OK");
                return;
            }
            foreach (var node in Nodes)
            {
                var json = JsonUtility.ToJson(node.GetPosition().position);
                if (!node.isEntryPoint)
                {
                    var data = new NodeData
                    {
                        Guid     = node.Guid,
                        JsonData = json,
                        Next     = (node.outputContainer.Q <Port>() as DialoguePort).Next
                    };
                    if (node is DialogueNode)
                    {
                        data.Text      = (node as DialogueNode).Text;
                        data.Character = (node as DialogueNode).Character;

                        //New Dialogue Properties System
                        var properties = new DialogueProperties
                        {
                            Text                = (node as DialogueNode).Properties.Text,
                            Speaker             = (node as DialogueNode).Properties.Speaker,
                            speakerPosition     = (node as DialogueNode).Properties.speakerPosition,
                            Conversant1         = (node as DialogueNode).Properties.Conversant1,
                            conversant1Position = (node as DialogueNode).Properties.conversant1Position,
                            Conversant2         = (node as DialogueNode).Properties.Conversant2,
                            conversant2Position = (node as DialogueNode).Properties.conversant2Position
                        };
                        data.Properties = properties;
                    }
                    else
                    {
                        var listPort = node.outputContainer.Query <Port>().ToList();
                        foreach (var port in listPort)
                        {
                            var        outputPort = port as DialoguePort;
                            ChoiceData tmpChoice  = new ChoiceData
                            {
                                Next     = outputPort.Next,
                                Question = outputPort.Question
                            };
                            data.Choices.Add(tmpChoice);
                        }

                        data.isChoiceNode = true;
                    }

                    dataContainer.Nodes.Add(data);
                }
                else if (node.isEntryPoint)
                {
                    var tmp = new NodeData
                    {
                        Guid         = node.Guid,
                        isEntryPoint = true,
                        Next         = (node.outputContainer.Q <Port>() as DialoguePort).Next
                    };
                    dataContainer.Nodes.Add(tmp);
                }
            }
        }
Ejemplo n.º 3
0
        public static DialogueNode Create(string title, DialogueProperties properties, string next = "")
        {
            var node = new DialogueNode
            {
                title      = title,
                Guid       = System.Guid.NewGuid().ToString(),
                name       = "CustomNode",
                Properties = properties,
            };


            var inputPort = DialoguePort.Create(Direction.Input, Port.Capacity.Multi);

            inputPort.portName = "Prev";
            inputPort.name     = "Port";

            var outputPort = DialoguePort.Create(Direction.Output, Port.Capacity.Single);

            outputPort.portName = "Next";
            outputPort.name     = "Port";
            (outputPort as DialoguePort).Next = next;

            var propertiesFoldout = new Foldout
            {
                text = "Dialogue Properties"
            };

            //Dialogue Background
            var bgField = new ObjectField
            {
                objectType = typeof(Sprite),
                value      = properties.Speaker,
                label      = "Background"
            };

            bgField.RegisterValueChangedCallback(e => {
                node.Properties.Background = e.newValue as Sprite;
            });
            node.Properties.Background = bgField.value as Sprite;

            //Create Dialogue Properties
            var sentenceTextfield = new TextField
            {
                value     = properties.Text,
                multiline = true,
            };

            node.Properties.Text = sentenceTextfield.value;
            sentenceTextfield.RegisterValueChangedCallback(e => {
                node.Properties.Text = e.newValue;
            });

            //Create Speaker
            var speakerField = new ObjectField
            {
                objectType = typeof(Character),
                value      = properties.Speaker,
                label      = "Speaker"
            };

            speakerField.RegisterValueChangedCallback(e => {
                node.Properties.Speaker = e.newValue as Character;
            });
            node.Properties.Speaker = speakerField.value as Character;
            var speakerPositionEnum = new EnumField();

            speakerPositionEnum.label = "Speaker On-Screen Position";
            speakerPositionEnum.Init(CharacterScreenPosition.Middle);
            speakerPositionEnum.value = CharacterScreenPosition.Middle;
            speakerPositionEnum.RegisterValueChangedCallback(e => {
                node.Properties.speakerPosition = (CharacterScreenPosition)e.newValue;
            });


            //Create Conversant1
            var conversant1Field = new ObjectField
            {
                objectType = typeof(Character),
                value      = properties.Conversant1,
                label      = "Conversant1"
            };

            conversant1Field.RegisterValueChangedCallback(e => {
                node.Properties.Conversant1 = e.newValue as Character;
            });
            node.Properties.Conversant1 = conversant1Field.value as Character;
            var conversant1PositionEnum = new EnumField();

            conversant1PositionEnum.label = "Conversant1 On-Screen Position";
            conversant1PositionEnum.Init(properties.conversant1Position);
            conversant1PositionEnum.value = properties.conversant1Position;
            conversant1PositionEnum.RegisterValueChangedCallback(e => {
                node.Properties.conversant1Position = (CharacterScreenPosition)e.newValue;
            });
            //Create Conversant2
            var conversant2Field = new ObjectField
            {
                objectType = typeof(Character),
                value      = properties.Conversant2,
                label      = "Conversant2"
            };

            conversant2Field.RegisterValueChangedCallback(e => {
                node.Properties.Conversant2 = e.newValue as Character;
            });
            node.Properties.Conversant2 = conversant2Field.value as Character;
            var conversant2PositionEnum = new EnumField();

            conversant2PositionEnum.label = "Conversant2 On-Screen Position";
            conversant2PositionEnum.Init(properties.conversant2Position);
            conversant2PositionEnum.value = properties.conversant2Position;
            conversant2PositionEnum.RegisterValueChangedCallback(e => {
                node.Properties.conversant2Position = (CharacterScreenPosition)e.newValue;
            });



            node.mainContainer.Add(propertiesFoldout);

            propertiesFoldout.contentContainer.Add(bgField);
            propertiesFoldout.contentContainer.Add(speakerField);
            propertiesFoldout.contentContainer.Add(speakerPositionEnum);
            propertiesFoldout.contentContainer.Add(conversant1Field);
            propertiesFoldout.contentContainer.Add(conversant1PositionEnum);
            propertiesFoldout.contentContainer.Add(conversant2Field);
            propertiesFoldout.contentContainer.Add(conversant2PositionEnum);



            node.mainContainer.Add(sentenceTextfield);

            node.inputContainer.Add(inputPort);

            node.outputContainer.Add(outputPort);
            node.RefreshPorts();
            node.RefreshExpandedState();
            node.SetPosition(new Rect(Vector2.zero, nodeSize));


            return(node);
        }