public static MissionRaw Create(string xmlpath)
            {
                XmlDocument doc = new XmlDocument();

                doc.Load(xmlpath);
                XmlElement elem = doc.DocumentElement;

                int        cnt = elem.Attributes.Count;
                MissionRaw raw = new MissionRaw();

                raw.properties = new ParamRaw(cnt - 2);

                for (int i = 0; i < cnt; ++i)
                {
                    if (i == 0)
                    {
                        raw.id = XmlConvert.ToInt32(elem.Attributes[i].Value);
                    }
                    else if (i == 1)
                    {
                        raw.name = System.Uri.UnescapeDataString(elem.Attributes[i].Value);
                    }
                    else
                    {
                        raw.properties.Set(i - 2, elem.Attributes[i].Name, System.Uri.UnescapeDataString(elem.Attributes[i].Value));
                    }
                }

                int tcnt = elem.ChildNodes.Count;

                raw.triggers = new TriggerRaw[tcnt];
                for (int i = 0; i < tcnt; ++i)
                {
                    raw.triggers[i] = TriggerRaw.Create(elem.ChildNodes[i] as XmlElement);
                }

                return(raw);
            }
Exemple #2
0
        /// <summary>Restore the scenario data from a opening stream</summary>
        public void Import(BinaryReader r)
        {
            int version = r.ReadInt32();

            switch (version)
            {
            case 0x00000001:
            {
                m_Pause = true;
                int count = r.ReadInt32();
                m_MaxMissionId = 0;
                for (int i = 0; i < count; i++)
                {
                    int  instId  = r.ReadInt32();
                    int  dataId  = r.ReadInt32();
                    bool enabled = r.ReadBoolean();

                    if (!m_MissionRaws.ContainsKey(dataId))
                    {
                        throw new System.Exception("Mission raw data of id [" + dataId.ToString() + "] is missing");
                    }

                    Mission mis = new Mission(instId, m_MissionRaws[dataId], this);
                    mis.Init();

                    int trg_cnt = r.ReadInt32();

                    if (trg_cnt != mis.triggers.Length)
                    {
                        throw new System.Exception("Trigger count is not correct");
                    }

                    for (int j = 0; j < trg_cnt; j++)
                    {
                        mis.triggers[j].Import(r);
                    }

                    VarScope vs = Variables.CreateChild();
                    vs.Import(r);
                    MissionVariables[mis] = vs;

                    m_MissionInsts.Add(instId, mis);
                    if (enabled)
                    {
                        //mis.Resume();
                        m_RunningMissions.Add(dataId, mis);
                    }

                    if (instId > m_MaxMissionId)
                    {
                        m_MaxMissionId = instId;
                    }
                }

                Variables.Import(r);

                // restore action thread
                count = r.ReadInt32();

                for (int i = 0; i < count; i++)
                {
                    int instId      = r.ReadInt32();
                    int dataId      = r.ReadInt32();
                    int trigger_idx = r.ReadInt32();
                    int group       = r.ReadInt32();
                    int cur_idx     = r.ReadInt32();

                    if (!m_MissionRaws.ContainsKey(dataId))
                    {
                        throw new System.Exception("Mission raw data of id [" + dataId.ToString() + "] is missing");
                    }

                    if (!m_MissionInsts.ContainsKey(instId))
                    {
                        throw new System.Exception("Mission instance of instId [" + dataId.ToString() + "] is missing");
                    }


                    MissionRaw   mis_raw = m_MissionRaws[dataId];
                    ActionThread thread  = null;
                    Mission      mis     = m_MissionInsts[instId];
                    mis.triggers[trigger_idx].FillActionCache(group);

                    thread = new ActionThread(mis.triggers[trigger_idx], trigger_idx, group,
                                              mis_raw.triggers[trigger_idx].actions[group], mis.triggers[trigger_idx].GetActionCache(group), cur_idx);

                    mis.triggers[trigger_idx].RegisterActionThreadEvent(thread);

                    AddActionThread(thread);

                    thread.CreateCurrAction();
                    if (thread.currAction != null)
                    {
                        thread.currAction.RestoreState(r);
                    }
                }
            }
            break;
            }
        }
Exemple #3
0
 public Mission(int instid, MissionRaw raw, Scenario scene)
 {
     instId   = instid;
     m_Raw    = raw;
     scenario = scene;
 }
Exemple #4
0
        /// <summary>Load a single xml file, and restore it as a mission raw data.</summary>
        /// <param name="xmlpath">Specify the path of xml file.</param>
        public void LoadFile(string xmlpath)
        {
            MissionRaw raw = MissionRaw.Create(xmlpath);

            m_MissionRaws[raw.id] = raw;
        }
    void OnGUI()
    {
        BeginContent();

        if (Scenario.debugTarget != null)
        {
            EditorGUILayout.BeginHorizontal();

            mission_sc = EditorGUILayout.BeginScrollView(mission_sc);
            EditorGUILayout.BeginVertical();
            TreeNode("Mission Instances", true);

            EditorGUI.indentLevel++;
            foreach (var kvp in Scenario.debugTarget.missionInsts)
            {
                MissionRaw raw = null;
                if (Scenario.debugTarget.missionRaws.ContainsKey(kvp.Value.dataId))
                {
                    raw = Scenario.debugTarget.missionRaws[kvp.Value.dataId];
                }
                if (raw != null)
                {
                    TreeNode(raw.name, true);
                }
                else
                {
                    GUI.contentColor = Color.red;
                    GUILayout.Label("     <No data>");
                    GUI.contentColor = Color.white;
                }
            }
            EditorGUI.indentLevel--;

            TreeNode("Scenario Variables", true);

            EditorGUI.indentLevel++;
            string[] names = Scenario.debugTarget.scenarioVars.declaredVars;
            foreach (var varname in names)
            {
                GUILayout.Label("     " + varname + " = " + Scenario.debugTarget.scenarioVars[varname].data);
            }
            EditorGUI.indentLevel--;

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndScrollView();

            threads_sc = EditorGUILayout.BeginScrollView(threads_sc);
            EditorGUILayout.BeginVertical();

            TreeNode("Action Threads", true);
            EditorGUI.indentLevel++;
            for (int i = 0; i < Scenario.debugTarget.actionThreads.Count; ++i)
            {
                TreeNode("Thread[" + i + "]", true);
            }
            EditorGUI.indentLevel--;

            EditorGUILayout.EndVertical();
            EditorGUILayout.EndScrollView();

            EditorGUILayout.EndHorizontal();
        }
        else
        {
            GUILayout.Label("No debug target.");
        }

        EndContent();
    }