示例#1
0
        /// <summary> initialize the mission. Get all triggers and event listeners </summary>
        internal void Init()
        {
            m_EventListeners = new List <EventListener>(16);
            m_Triggers       = new Trigger[m_Raw.triggers.Length];

            for (int i = 0; i < m_Raw.triggers.Length; i++)
            {
                TriggerRaw tr = m_Raw.triggers[i];
                m_Triggers[i] = new Trigger(m_Raw.triggers[i], this, i);

                List <EventListener> list = new List <EventListener>();
                for (int j = 0; j < tr.events.Length; ++j)
                {
                    EventListener listener = Asm.CreateEventListenerInstance(tr.events[j].classname);

                    if (listener == null)
                    {
                        continue;
                    }

                    listener.Init(m_Triggers[i], tr.events[j]);

                    m_EventListeners.Add(listener);
                    list.Add(listener);
                }
                m_Triggers[i].eventListeners = list;
            }

            // Sort by order
            m_EventListeners.Sort((lhs, rhs) => { return(lhs.order - rhs.order); });
        }
示例#2
0
 public Trigger(TriggerRaw _raw, Mission _mission, int _idx)
 {
     m_Raw   = _raw;
     mission = _mission;
     index   = _idx;
     repeat  = _raw.repeat;
     enabled = true;
 }
示例#3
0
            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);
            }
示例#4
0
            public static TriggerRaw Create(XmlElement elem)
            {
                TriggerRaw raw = new TriggerRaw();

                raw.name   = System.Uri.UnescapeDataString(elem.Attributes["name"].Value);
                raw.repeat = XmlConvert.ToInt32(elem.Attributes["repeat"].Value);
                if (elem.HasAttribute("multi_threaded"))
                {
                    raw.multiThreaded = (elem.Attributes["multi_threaded"].Value.ToLower()) == "true";
                }
                else
                {
                    raw.multiThreaded = false;
                }
                if (elem.HasAttribute("owner"))
                {
                    raw.owner = System.Uri.UnescapeDataString(elem.Attributes["owner"].Value);
                }
                else
                {
                    raw.owner = "-";
                }

                XmlElement e_elem = elem["EVENTS"];
                XmlElement c_elem = elem["CONDITIONS"];
                XmlElement a_elem = elem["ACTIONS"];

                int ecnt = e_elem.ChildNodes.Count;

                raw.events = new StatementRaw[ecnt];
                for (int i = 0; i < ecnt; ++i)
                {
                    raw.events[i] = StatementRaw.Create(e_elem.ChildNodes[i] as XmlElement);
                }

                int g_cnt = c_elem.ChildNodes.Count;

                raw.conditions = new List <StatementRaw[]> ();
                for (int i = 0; i < g_cnt; ++i)
                {
                    XmlElement     g_elem = c_elem.ChildNodes[i] as XmlElement;
                    int            cnt    = g_elem.ChildNodes.Count;
                    StatementRaw[] stmts  = new StatementRaw[cnt];
                    for (int j = 0; j < cnt; ++j)
                    {
                        stmts[j] = StatementRaw.Create(g_elem.ChildNodes[j] as XmlElement);
                    }
                    raw.conditions.Add(stmts);
                }

                g_cnt       = a_elem.ChildNodes.Count;
                raw.actions = new List <StatementRaw[]> ();
                for (int i = 0; i < g_cnt; ++i)
                {
                    XmlElement     g_elem = a_elem.ChildNodes[i] as XmlElement;
                    int            cnt    = g_elem.ChildNodes.Count;
                    StatementRaw[] stmts  = new StatementRaw[cnt];
                    for (int j = 0; j < cnt; ++j)
                    {
                        stmts[j] = StatementRaw.Create(g_elem.ChildNodes[j] as XmlElement);
                    }
                    raw.actions.Add(stmts);
                }

                return(raw);
            }