using CommonAI.Zone.EventTrigger; using CommonAI.Zone.ZoneEditor.EventTrigger; using CommonLang.IO; using CommonLang.IO.Attribute; using CommonLang.Property; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CommonAI.Zone { /// 事件动作触发器 /// [MessageType(0x4502)] [TableClassAttribute("Name")] public class UnitEvent : 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 UnitLocalVars LocalVars = new UnitLocalVars(); /// /// 事件触发 /// public UnitTriggers Triggers = new UnitTriggers(); /// /// 条件 /// public UnitConditions Conditions = new UnitConditions(); /// /// 动作 /// public UnitActions Actions = new UnitActions(); public UnitEvent() { Triggers.Datas.Add(new BindingUnitDamaged()); Conditions.Datas.Add(new AlwaysTrue()); Actions.Datas.Add(new UnitAddBuffAction()); } public object Clone() { UnitEvent ret = new UnitEvent(); ret.Name = this.Name; ret.Active = this.Active; ret.Comment = this.Comment; ret.SavePath = this.SavePath; ret.DelayTimeMS = this.DelayTimeMS; this.LocalVars.Clone(ret.LocalVars); this.Triggers.Clone(ret.Triggers); this.Conditions.Clone(ret.Conditions); this.Actions.Clone(ret.Actions); return ret; //return IOUtil.CloneIExternalizable(TemplateManager.MessageCodec, this); } 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 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 UnitLocalVars { 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 void Clone(UnitLocalVars data) { data.Datas.Clear(); for (int i = 0; i < Datas.Count; i++) { data.Datas.Add(this.Datas[i]); } } } public class UnitTriggers { public List Datas = new List(); public void Clone(UnitTriggers data) { data.Datas.Clear(); for (int i = 0; i < Datas.Count; i++) { data.Datas.Add(this.Datas[i]); } } 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 UnitConditions { public List Datas = new List(); public void Clone(UnitConditions data) { data.Datas.Clear(); for (int i = 0; i < Datas.Count; i++) { data.Datas.Add(this.Datas[i]); } } 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 UnitActions { public List Datas = new List(); public void Clone(UnitActions data) { data.Datas.Clear(); for (int i = 0; i < Datas.Count; i++) { data.Datas.Add(this.Datas[i]); } } 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(); } } // ---------------------------------------------------------------------- } }