using System; using System.Collections.Generic; using System.Text; using System.Reflection; using CommonLang.Property; using CommonAI.Zone.Instance; using CommonAI.Zone.ZoneEditor.EventTrigger; using CommonLang.IO.Attribute; using CommonLang.IO; using CommonLang.Xml; using System.Xml; using CommonAI.Zone.EventTrigger; namespace CommonAI.Zone.ZoneEditor { /// /// 事件动作触发器 /// [MessageType(0x4501)] [TableClassAttribute("Name")] public class ZoneEvent : ICloneable, IEventDataNode, IExternalizable { public string EventName { get { return this.Name; } set { this.Name = value; } } public string EventTreePath { get { return this.SavePath; } set { this.SavePath = value; } } public bool EventIsActive { get { return this.Active; } set { this.Active = value; } } public string EventComment { get { return this.Comment; } set { this.Comment = value; } } public int EventDelayTimeMS { get { return this.DelayTimeMS; } set { this.DelayTimeMS = value; } } public List EventLocalVars { get { return this.LocalVars.Datas; } } public List EventTriggers { get { return this.Triggers.Datas; } } public List EventConditions { get { return this.Conditions.Datas; } } public List EventActions { get { return this.Actions.Datas; } } /// /// 触发器名字 /// public string Name = "Unnamed"; /// /// 启用 /// public bool Active = true; /// /// 注释 /// public string Comment = ""; /// /// 保存 /// public string SavePath; /// /// 延迟执行 /// public int DelayTimeMS; /// /// 临时变量 /// public EventLocalVars LocalVars = new EventLocalVars(); /// /// 事件触发 /// public EventTriggers Triggers = new EventTriggers(); /// /// 条件 /// public EventConditions Conditions = new EventConditions(); /// /// 动作 /// public EventActions Actions = new EventActions(); public ZoneEvent() { Triggers.Datas.Add(new SceneInitialized()); Conditions.Datas.Add(new AlwaysTrue()); Actions.Datas.Add(new DoNoting()); } public override string ToString() { return Name + ""; } public string FunctionText() { StringBuilder sb = new StringBuilder(); sb.Append(Triggers.ToString()); sb.Append(",\n"); sb.Append("满足条件:").Append(Conditions.ToString()); sb.Append(",\n"); sb.Append("执行动作:").Append(Actions.ToString()); sb.Append("。"); return sb.ToString(); } public object Clone() { return IOUtil.CloneIExternalizable(TemplateManager.MessageCodec, this); } public void WriteExternal(IOutputStream output) { output.PutUTF(this.Name); output.PutBool(this.Active); output.PutUTF(this.Comment); output.PutUTF(this.SavePath); output.PutS32(this.DelayTimeMS); output.PutObj2Xml(this.LocalVars); output.PutObj2Xml(this.Triggers); output.PutObj2Xml(this.Conditions); output.PutObj2Xml(this.Actions); } public void ReadExternal(IInputStream input) { this.Name = input.GetUTF(); this.Active = input.GetBool(); this.Comment = input.GetUTF(); this.SavePath = input.GetUTF(); this.DelayTimeMS = input.GetS32(); this.LocalVars = input.GetXml2Obj(); this.Triggers = input.GetXml2Obj(); this.Conditions = input.GetXml2Obj(); this.Actions = input.GetXml2Obj(); } } // ---------------------------------------------------------------------- public class EventLocalVars { public List Datas = new List(); public override string ToString() { StringBuilder sb = new StringBuilder(); if (Datas.Count > 0) { for (int i = 0; i < Datas.Count; i++) { sb.AppendLine(Datas[i].ToString()); } } return sb.ToString(); } } public class EventTriggers { public List Datas = new List(); public override string ToString() { StringBuilder sb = new StringBuilder(); if (Datas.Count > 0) { for (int i = 0; i < Datas.Count; i++) { sb.Append(Datas[i]); if (i < Datas.Count - 1) { sb.Append(" 或者 "); } } } else { sb.Append("(无起因)"); } return sb.ToString(); } } public class EventConditions { public List Datas = new List(); public override string ToString() { StringBuilder sb = new StringBuilder(); if (Datas.Count > 0) { for (int i = 0; i < Datas.Count; i++) { sb.Append(Datas[i]); if (i < Datas.Count - 1) { sb.Append(" 并且 "); } } } else { sb.Append("(无条件)"); } return sb.ToString(); } } public class EventActions { public List Datas = new List(); public override string ToString() { StringBuilder sb = new StringBuilder(); if (Datas.Count > 0) { for (int i = 0; i < Datas.Count; i++) { sb.Append(Datas[i]); if (i < Datas.Count - 1) { sb.Append(" 并且 "); } } } else { sb.Append("(无动作)"); } return sb.ToString(); } } // ---------------------------------------------------------------------- }