/// <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); }); }
string CustomEvent(string param) { param = param.Trim(); if (string.IsNullOrEmpty(param)) { return("parameters needed"); } string[] ss = param.Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries); string classname = ss[0]; ScenarioRTL.EventListener evt = ScenarioRTL.Asm.CreateEventListenerInstance(classname); ScenarioRTL.IO.StatementRaw raw = new ScenarioRTL.IO.StatementRaw(); if (evt == null) { return("cannot create statement"); } raw.classname = classname; raw.order = 0; raw.parameters = new ScenarioRTL.IO.ParamRaw(ss.Length - 1); for (int i = 1; i < ss.Length; ++i) { string paramstr = ss[i]; string[] nv = paramstr.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); if (nv.Length == 2) { raw.parameters.Set(i - 1, nv[0], nv[1]); } else { raw.parameters.Set(i - 1, "null", "0"); } } evt.Init(null, raw); evt.OnPost += OnCustomEventPost; evt.Listen(); return("[" + classname + "] is listening"); }