public override bool Filter(params object[] param) { if (1 != param.Length) { return(false); } PsScript script = param[0] as PsScript; if (null == script) { return(false); } int scriptId = (int)mScriptIdRef.Value; //self if (0 == scriptId) { scriptId = mTrigger.Parent.Id; } if (script.Id != scriptId) { return(false); } return(true); }
void ScriptBegin(PsScript script) { if (null == script) { return; } Emit(script); }
void ScriptEnd(PsScript script) { if (null == script) { return; } Emit(script); }
public static PsScriptMgr Deserialize(Factory factory, byte[] data) { if (null == data) { return(null); } factory.Init(); PsScriptMgr scriptMgr = new PsScriptMgr(factory); MemoryStream sm = new MemoryStream(data, false); using (BinaryReader r = new BinaryReader(sm)) { int varDatalength = r.ReadInt32(); byte[] varData = r.ReadBytes(varDatalength); scriptMgr.mVarMgr = VariableMgr.Import(varData); int count = r.ReadInt32(); for (int i = 0; i < count; i++) { int id = r.ReadInt32(); PsScript script = PsScript.Load(scriptMgr, id); if (null == script) { continue; } if (!script.Init()) { continue; } scriptMgr.mScriptList.Add(script); script.Restore(r); } DeserializeList(scriptMgr.mScriptLoadList, r); DeserializeList(scriptMgr.mScriptRemoveList, r); } return(scriptMgr); }
protected override bool Exec() { VarRef scriptIdRef = PatheaScript.Util.GetVarRefOrValue(mInfo, "mission", VarValue.EType.Int, mTrigger); int scriptId = (int)scriptIdRef.Value; PatheaScript.PsScript.EResult result = PatheaScript.Util.GetScriptResult(mInfo); if (scriptId >= 0) { PsScript script = null; if (0 == scriptId) { script = mTrigger.Parent; } else { script = mTrigger.Parent.Parent.FindScriptById(scriptId); } if (null != script) { script.RequireStop(result); return(true); } } else { List <PsScript> curScript = new List <PsScript>(mTrigger.Parent.Parent.CurScript); if (-2 == scriptId) { curScript.Remove(mTrigger.Parent); } if (curScript.Count > 0) { foreach (PsScript q in curScript) { q.RequireStop(result); } } } return(false); }
public static PsScript Load(PsScriptMgr mgr, int id) { string path = mgr.Factory.GetScriptPath(id); try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode scriptNode = doc.SelectSingleNode("//MISSION"); if (scriptNode == null) { return(null); } PsScript script = new PsScript(mgr); script.Id = id; script.Name = Util.GetString(scriptNode, "name"); TriggerGroup triggerGroup = new TriggerGroup(script); triggerGroup.SetInfo(mgr.Factory, scriptNode); if (false == triggerGroup.Parse()) { return(null); } else { script.mTriggerGroup = triggerGroup; } return(script); } catch (System.Exception e) { Debug.LogError(e.ToString()); return(null); } }
void LoadScript() { if (mScriptLoadList.Count <= 0) { return; } int[] loadArray = mScriptLoadList.ToArray(); foreach (int id in loadArray) { PsScript q = FindScriptById(id); if (null != q) { Debug.LogError("Duplicated Script:" + q); continue; } PsScript script = PsScript.Load(this, id); if (null == script) { continue; } if (!script.Init()) { continue; } mScriptList.Add(script); mScriptLoadList.Remove(id); Debug.Log("begin script:" + script.Id); //脚本开始事件发生后,可能会loadscript。导致向mScriptLoadList添加新元素而发生异常。 //所以改为遍历数组。 InternalEvent.Instance.EmitScriptBegin(script); } }
void RemoveScript() { if (mScriptRemoveList.Count <= 0) { return; } foreach (int scriptId in mScriptRemoveList) { PsScript q = FindScriptById(scriptId); if (null == q) { Debug.Log("no script with id:" + scriptId + " found to terminat"); continue; } Debug.Log(q + " terminated"); q.Reset(); mScriptList.Remove(q); } mScriptRemoveList.Clear(); }
public TriggerGroup(PsScript script) { mScript = script; }
public Trigger(PsScript script) { mScript = script; mStep = EStep.Max; mVarMgr = new VariableMgr(); }