Exemplo n.º 1
0
    //

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        EditorGUILayout.BeginVertical();

        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("LoadXmlDialog"))
        {
            DialogWriter dialogWriter = XMLUtility.LoadXMLEvent();
            m_monoDialogWriter.m_dialogWriter = XMLUtility.LoadXMLEvent();
            UpdateWriterTree(m_dialogWriter.m_dialogEventList);
        }
        if (GUILayout.Button("SaveXmlDialog"))
        {
            XMLUtility.SaveXMLEvent();
        }


        if (GUILayout.Button("RefreshDialogTree"))
        {
            //手动refresh
            UpdateWriterTree(m_dialogWriter.m_dialogEventList);
        }

        EditorGUILayout.EndHorizontal();

        eventName = (string)EditorGUILayout.TextField("New Event Name", eventName);
        if (GUILayout.Button("Add New Event"))
        {
            if (eventName != "")
            {
                m_dialogWriter.m_dialogEventList.Add(new DialogEvent(eventName));
                UpdateWriterTree(m_dialogWriter.m_dialogEventList);
            }
            else
            {
                EditorUtility.DisplayDialog("Add New Event Fail", "Event name is empty", "Redo");
            }
        }

        EditorGUILayout.TextField("Event Number ", m_dialogWriter.m_dialogEventList.Count.ToString());
        for (int i = 0; i < m_dialogWriter.m_dialogEventList.Count; i++)
        {
            EditorGUILayout.BeginHorizontal();

            EditorGUILayout.TextField(i + "-" + m_dialogWriter.m_dialogEventList [i].m_name);
            if (GUILayout.Button("Delete Event"))
            {
                m_dialogWriter.m_dialogEventList.RemoveAt(i);
                UpdateWriterTree(m_dialogWriter.m_dialogEventList);
            }
            EditorGUILayout.EndHorizontal();
        }


        EditorGUILayout.EndVertical();
    }
Exemplo n.º 2
0
    private void OnEnable()
    {
        m_monoDialogWriter = target as MonoDialogWriter;

        m_dialogWriter = m_monoDialogWriter.m_dialogWriter;

        Debug.Log(m_dialogWriter.m_dialogEventList);
        //UpdateWriterTree (m_dialogWriter.m_dialogEventList);
    }
Exemplo n.º 3
0
    //从hierarchy生成新的DialogWriter
    public static DialogWriter ProduceWriter()
    {
        GameObject writerGo = GameObject.Find("Dialog Writer");

        writer = new DialogWriter();
        for (int i = 0; i < writerGo.transform.childCount; i++)
        {
            Transform t1 = writerGo.transform.GetChild(i);
            WriteDialogEvent(t1, i);

            for (int j = 0; j < t1.childCount; j++)
            {
                Transform t2 = t1.GetChild(j);
                if (t2.GetComponent <MonoTalkNode> () != null)
                {
                    WriteTalkNode(t2);

                    for (int k = 0; k < t2.childCount; k++)
                    {
                        Transform t3 = t2.GetChild(k);
                        WriteTalkContent(t3);
                    }
                }
                else
                {
                    WriteSelectionNode(t2);

                    for (int k = 0; k < t2.childCount; k++)
                    {
                        Transform t3 = t2.GetChild(k);
                        WriteSelectionTalkNode(t3);

                        for (int l = 0; l < t3.childCount; l++)
                        {
                            Transform t4 = t3.GetChild(l);
                            WriteTalkContent(t4);
                        }
                    }
                }
            }
        }
        return(writer);
    }
Exemplo n.º 4
0
 public void Init(DialogWriter DialogWriter)
 {
     m_dialogWriter = DialogWriter;
 }
Exemplo n.º 5
0
 //初始化
 static void Init()
 {
     dialogWriter = new DialogWriter();
     dialogWriter = XMLUtility.LoadXMLEvent();
 }
Exemplo n.º 6
0
    //保存为xml
    public static void SaveXMLEvent()
    {
        DialogWriter dialogWriter = ProduceWriter();

        //保存路径

        path = Application.dataPath + "/OutputXml/" + dialogWriter.GetType() + ".xml";
        FileInfo fi = new FileInfo(path);

        if (fi.Exists)
        {
            //fi.MoveTo ("./backup");
            fi.Delete();
        }

        List <DialogEvent> dialogEventLsit = dialogWriter.m_dialogEventList;

        XmlDocument doc = new XmlDocument();
        XmlElement  dialogWriterElem = doc.CreateElement("DialogWriter");

        for (int i = 0; i < dialogEventLsit.Count; i++)
        {
            XmlElement  eve         = doc.CreateElement("Event");
            DialogEvent dialogEvent = dialogEventLsit [i];
            eve.SetAttribute("Name", dialogEvent.m_name);
            eve.SetAttribute("EvenOrder", dialogEvent.m_eventOrder.ToString());
            for (int j = 0; j < dialogEvent.m_nodeList.Count; j++)
            {
                //判断是否为talk节点
                if (dialogEvent.m_nodeList [j].m_dialogType == DialogNode.NodeType.Talk)
                {
                    XmlElement node     = doc.CreateElement("TalkNode");
                    TalkNode   talkNode = (TalkNode)dialogEvent.m_nodeList [j];
                    node.SetAttribute("Name", talkNode.m_name);
                    node.SetAttribute("NodeType", talkNode.m_dialogType.ToString());
                    for (int k = 0; k < talkNode.m_background.Count; k++)
                    {
                        //node.SetAttribute ("Background"+k, );
                        XmlElement background = doc.CreateElement("Background");
                        background.SetAttribute("Name", talkNode.m_background [k]);
                        node.AppendChild(background);
                    }
                    for (int k = 0; k < talkNode.m_tachie.Count; k++)
                    {
                        XmlElement tachie = doc.CreateElement("Tachie");
                        tachie.SetAttribute("Name", talkNode.m_tachie [k]);
                        node.AppendChild(tachie);
                        //node.SetAttribute ("Tachie"+k, talkNode.m_tachie [k]);
                    }
                    for (int k = 0; k < talkNode.m_talkContents.Count; k++)
                    {
                        XmlElement  content     = doc.CreateElement("TalkContent");
                        TalkContent talkContent = talkNode.m_talkContents [k];
                        content.SetAttribute("Background", talkContent.m_backGround.ToString());
                        content.SetAttribute("Tachie", talkContent.m_tachie.ToString());
                        content.SetAttribute("Name", talkContent.m_name);
                        content.SetAttribute("Content", talkContent.m_content);
                        node.AppendChild(content);
                    }
                    eve.AppendChild(node);
                }
                else
                {
                    XmlElement    node          = doc.CreateElement("SelectionNode");
                    SelectionNode selectionNode = (SelectionNode)dialogEvent.m_nodeList [j];
                    node.SetAttribute("Name", selectionNode.m_name);
                    node.SetAttribute("NodeType", selectionNode.m_dialogType.ToString());

                    //分为两个select节点
                    foreach (string s in selectionNode.m_selection.Keys)
                    {
                        XmlElement select = doc.CreateElement("Select");
                        select.SetAttribute("Select", s);

                        XmlElement talk     = doc.CreateElement("TalkNode");
                        TalkNode   talkNode = selectionNode.m_selection [s];

                        talk.SetAttribute("Name", talkNode.m_name);
                        talk.SetAttribute("NodeType", talkNode.m_dialogType.ToString());
                        for (int k = 0; k < talkNode.m_background.Count; k++)
                        {
                            //node.SetAttribute ("Background"+k, );
                            XmlElement background = doc.CreateElement("Background");
                            background.SetAttribute("Name", talkNode.m_background [k]);
                            talk.AppendChild(background);
                        }
                        for (int k = 0; k < talkNode.m_tachie.Count; k++)
                        {
                            XmlElement tachie = doc.CreateElement("Tachie");
                            tachie.SetAttribute("Name", talkNode.m_tachie [k]);
                            talk.AppendChild(tachie);
                            //node.SetAttribute ("Tachie"+k, talkNode.m_tachie [k]);
                        }
                        for (int k = 0; k < talkNode.m_talkContents.Count; k++)
                        {
                            XmlElement  content     = doc.CreateElement("TalkContent");
                            TalkContent talkContent = talkNode.m_talkContents [k];
                            content.SetAttribute("Background", talkContent.m_backGround.ToString());
                            content.SetAttribute("Tachie", talkContent.m_tachie.ToString());
                            content.SetAttribute("Name", talkContent.m_name);
                            content.SetAttribute("Content", talkContent.m_content);
                            talk.AppendChild(content);
                        }

                        select.AppendChild(talk);
                        node.AppendChild(select);
                    }

                    eve.AppendChild(node);
                }
            }
            dialogWriterElem.AppendChild(eve);
        }
        doc.AppendChild(dialogWriterElem);

        doc.Save(path);
    }
Exemplo n.º 7
0
    //加载xm文件
    public static DialogWriter LoadXMLEvent()
    {
        bool m_isTalkNode = true;


        if (Application.platform == RuntimePlatform.OSXPlayer)
        {
            Console.Log("sfdbdfsdgsfdgsfdds");
            path = Application.dataPath + "/Resources/Data/StreamingAssets/dialogWriter.xml";
            Console.Log(path);
        }
        else if (Application.platform == RuntimePlatform.IPhonePlayer)
        {
            path = Application.dataPath + "/Raw/";
        }
        else if (Application.platform == RuntimePlatform.Android)
        {
            path = "jar:file//" + Application.dataPath + "!/assets/";
        }
        //} else if(Application.platform == RuntimePlatform.){
        //	path = Application.dataPath + "/StreamingAssets/";
        //}


        XmlReader reader = new XmlTextReader(path);

        //提前设置的变量,用于保存读取文件时的各个子节点
        DialogWriter  newDialogWriter  = null;
        DialogEvent   newDialogEvent   = null;
        TalkNode      newTalkNode      = null;
        SelectionNode newSelectionNode = null;
        TalkContent   newTalkContent   = null;
        string        newSelect        = "";

        newDialogWriter = new DialogWriter();
        while (reader.Read())
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                if (reader.LocalName == "DialogWriter")
                {
                    if (newDialogWriter != null)
                    {
                    }
                    //不会执行
                }
                else if (reader.LocalName == "Event")
                {
                    newDialogEvent = new DialogEvent("");
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Name")
                        {
                            newDialogEvent.m_name = reader.Value;
                        }
                        else if (reader.Name == "EventOrder")
                        {
                            newDialogEvent.m_eventOrder = int.Parse(reader.Value);
                        }
                    }

                    if (newDialogWriter != null)
                    {
                        newDialogWriter.m_dialogEventList.Add(newDialogEvent);
                    }
                }
                else if (reader.LocalName == "TalkNode")
                {
                    newTalkNode = new TalkNode("");


                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Name")
                        {
                            newTalkNode.m_name = reader.Value;
                        }
                        else if (reader.Name == "NodeType")
                        {
                            newTalkNode.m_dialogType = (DialogNode.NodeType)System.Enum.Parse(typeof(DialogNode.NodeType), reader.Value);
                        }
                    }

                    //不是选择分支下的对话节点
                    if (m_isTalkNode)
                    {
                        if (newDialogEvent != null)
                        {
                            newDialogEvent.m_nodeList.Add(newTalkNode);
                        }
                    }
                    else
                    {
                        if (newSelectionNode != null)
                        {
                            newSelectionNode.m_selection [newSelect] = newTalkNode;
                            //每次都重新设为true
                            m_isTalkNode = true;
                        }
                    }
                }
                else if (reader.LocalName == "Background")
                {
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);

                        if (reader.Name == "Name")
                        {
                            newTalkNode.m_background.Add(reader.Value);
                        }
                    }
                }
                else if (reader.LocalName == "Tachie")
                {
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Name")
                        {
                            newTalkNode.m_tachie.Add(reader.Value);
                        }
                    }
                }
                else if (reader.LocalName == "TalkContent")
                {
                    newTalkContent = new TalkContent();
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Background")
                        {
                            newTalkContent.m_backGround = int.Parse(reader.Value);
                        }
                        else if (reader.Name == "Tachie")
                        {
                            newTalkContent.m_tachie = int.Parse(reader.Value);
                        }
                        else if (reader.Name == "Name")
                        {
                            newTalkContent.m_name = reader.Value;
                        }
                        else if (reader.Name == "Content")
                        {
                            newTalkContent.m_content = reader.Value;
                        }
                    }

                    if (newTalkNode != null)
                    {
                        newTalkNode.m_talkContents.Add(newTalkContent);
                    }
                }
                else if (reader.LocalName == "SelectionNode")
                {
                    newSelectionNode = new SelectionNode("");
                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Name")
                        {
                            newSelectionNode.m_name = reader.Value;
                        }
                    }

                    if (newDialogEvent != null)
                    {
                        newDialogEvent.m_nodeList.Add(newSelectionNode);
                    }
                }
                else if (reader.LocalName == "Select")
                {
                    m_isTalkNode = false;

                    for (int i = 0; i < reader.AttributeCount; i++)
                    {
                        reader.MoveToAttribute(i);
                        if (reader.Name == "Select")
                        {
                            //把数值临时保存
                            newSelect = reader.Value;
                            newSelectionNode.m_selection.Add(reader.Value, new TalkNode(""));
                        }
                    }
                }
            }
        }


        return(newDialogWriter);
    }
Exemplo n.º 8
0
 private void Start()
 {
     DialogWriterWindow = GameManager_Singleton.Instance.MessageWindow;
 }