/// <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); }); }
public Trigger(TriggerRaw _raw, Mission _mission, int _idx) { m_Raw = _raw; mission = _mission; index = _idx; repeat = _raw.repeat; enabled = true; }
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); }
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); }