EditorData.Events.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Reflection;
  5. using CommonLang.Property;
  6. using CommonAI.Zone.Instance;
  7. using CommonAI.Zone.ZoneEditor.EventTrigger;
  8. using CommonLang.IO.Attribute;
  9. using CommonLang.IO;
  10. using CommonLang.Xml;
  11. using System.Xml;
  12. using CommonAI.Zone.EventTrigger;
  13. namespace CommonAI.Zone.ZoneEditor
  14. {
  15. /// <summary>
  16. /// 事件动作触发器
  17. /// </summary>
  18. [MessageType(0x4501)]
  19. [TableClassAttribute("Name")]
  20. public class ZoneEvent : ICloneable, IEventDataNode, IExternalizable
  21. {
  22. public string EventName { get { return this.Name; } set { this.Name = value; } }
  23. public string EventTreePath { get { return this.SavePath; } set { this.SavePath = value; } }
  24. public bool EventIsActive { get { return this.Active; } set { this.Active = value; } }
  25. public string EventComment { get { return this.Comment; } set { this.Comment = value; } }
  26. public int EventDelayTimeMS { get { return this.DelayTimeMS; } set { this.DelayTimeMS = value; } }
  27. public List<LocalVar> EventLocalVars { get { return this.LocalVars.Datas; } }
  28. public List<AbstractTrigger> EventTriggers { get { return this.Triggers.Datas; } }
  29. public List<AbstractCondition> EventConditions { get { return this.Conditions.Datas; } }
  30. public List<AbstractAction> EventActions { get { return this.Actions.Datas; } }
  31. /// <summary>
  32. /// 触发器名字
  33. /// </summary>
  34. public string Name = "Unnamed";
  35. /// <summary>
  36. /// 启用
  37. /// </summary>
  38. public bool Active = true;
  39. /// <summary>
  40. /// 注释
  41. /// </summary>
  42. public string Comment = "";
  43. /// <summary>
  44. /// 保存
  45. /// </summary>
  46. public string SavePath;
  47. /// <summary>
  48. /// 延迟执行
  49. /// </summary>
  50. public int DelayTimeMS;
  51. /// <summary>
  52. /// 临时变量
  53. /// </summary>
  54. public EventLocalVars LocalVars = new EventLocalVars();
  55. /// <summary>
  56. /// 事件触发
  57. /// </summary>
  58. public EventTriggers Triggers = new EventTriggers();
  59. /// <summary>
  60. /// 条件
  61. /// </summary>
  62. public EventConditions Conditions = new EventConditions();
  63. /// <summary>
  64. /// 动作
  65. /// </summary>
  66. public EventActions Actions = new EventActions();
  67. public ZoneEvent()
  68. {
  69. Triggers.Datas.Add(new SceneInitialized());
  70. Conditions.Datas.Add(new AlwaysTrue());
  71. Actions.Datas.Add(new DoNoting());
  72. }
  73. public override string ToString()
  74. {
  75. return Name + "";
  76. }
  77. public string FunctionText()
  78. {
  79. StringBuilder sb = new StringBuilder();
  80. sb.Append(Triggers.ToString());
  81. sb.Append(",\n");
  82. sb.Append("满足条件:").Append(Conditions.ToString());
  83. sb.Append(",\n");
  84. sb.Append("执行动作:").Append(Actions.ToString());
  85. sb.Append("。");
  86. return sb.ToString();
  87. }
  88. public object Clone()
  89. {
  90. return IOUtil.CloneIExternalizable<ZoneEvent>(TemplateManager.MessageCodec, this);
  91. }
  92. public void WriteExternal(IOutputStream output)
  93. {
  94. output.PutUTF(this.Name);
  95. output.PutBool(this.Active);
  96. output.PutUTF(this.Comment);
  97. output.PutUTF(this.SavePath);
  98. output.PutS32(this.DelayTimeMS);
  99. output.PutObj2Xml(this.LocalVars);
  100. output.PutObj2Xml(this.Triggers);
  101. output.PutObj2Xml(this.Conditions);
  102. output.PutObj2Xml(this.Actions);
  103. }
  104. public void ReadExternal(IInputStream input)
  105. {
  106. this.Name = input.GetUTF();
  107. this.Active = input.GetBool();
  108. this.Comment = input.GetUTF();
  109. this.SavePath = input.GetUTF();
  110. this.DelayTimeMS = input.GetS32();
  111. this.LocalVars = input.GetXml2Obj<EventLocalVars>();
  112. this.Triggers = input.GetXml2Obj<EventTriggers>();
  113. this.Conditions = input.GetXml2Obj<EventConditions>();
  114. this.Actions = input.GetXml2Obj<EventActions>();
  115. }
  116. }
  117. // ----------------------------------------------------------------------
  118. public class EventLocalVars
  119. {
  120. public List<LocalVar> Datas = new List<LocalVar>();
  121. public override string ToString()
  122. {
  123. StringBuilder sb = new StringBuilder();
  124. if (Datas.Count > 0)
  125. {
  126. for (int i = 0; i < Datas.Count; i++)
  127. {
  128. sb.AppendLine(Datas[i].ToString());
  129. }
  130. }
  131. return sb.ToString();
  132. }
  133. }
  134. public class EventTriggers
  135. {
  136. public List<AbstractTrigger> Datas = new List<AbstractTrigger>();
  137. public override string ToString()
  138. {
  139. StringBuilder sb = new StringBuilder();
  140. if (Datas.Count > 0)
  141. {
  142. for (int i = 0; i < Datas.Count; i++)
  143. {
  144. sb.Append(Datas[i]);
  145. if (i < Datas.Count - 1)
  146. {
  147. sb.Append(" 或者 ");
  148. }
  149. }
  150. }
  151. else
  152. {
  153. sb.Append("(无起因)");
  154. }
  155. return sb.ToString();
  156. }
  157. }
  158. public class EventConditions
  159. {
  160. public List<AbstractCondition> Datas = new List<AbstractCondition>();
  161. public override string ToString()
  162. {
  163. StringBuilder sb = new StringBuilder();
  164. if (Datas.Count > 0)
  165. {
  166. for (int i = 0; i < Datas.Count; i++)
  167. {
  168. sb.Append(Datas[i]);
  169. if (i < Datas.Count - 1)
  170. {
  171. sb.Append(" 并且 ");
  172. }
  173. }
  174. }
  175. else
  176. {
  177. sb.Append("(无条件)");
  178. }
  179. return sb.ToString();
  180. }
  181. }
  182. public class EventActions
  183. {
  184. public List<AbstractAction> Datas = new List<AbstractAction>();
  185. public override string ToString()
  186. {
  187. StringBuilder sb = new StringBuilder();
  188. if (Datas.Count > 0)
  189. {
  190. for (int i = 0; i < Datas.Count; i++)
  191. {
  192. sb.Append(Datas[i]);
  193. if (i < Datas.Count - 1)
  194. {
  195. sb.Append(" 并且 ");
  196. }
  197. }
  198. }
  199. else
  200. {
  201. sb.Append("(无动作)");
  202. }
  203. return sb.ToString();
  204. }
  205. }
  206. // ----------------------------------------------------------------------
  207. }