Actions.Flags.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using CommonLang.Property;
  5. using CommonAI.Zone.Attributes;
  6. using CommonAI.Zone;
  7. using CommonAI.Zone.ZoneEditor;
  8. using CommonAI.RTS; using CommonLang.Vector;
  9. using CommonAI.Zone.Instance;
  10. using CommonAI.Zone.EventTrigger;
  11. namespace CommonAI.Zone.ZoneEditor.EventTrigger
  12. {
  13. [DescAttribute("关闭Flag(包括空气墙)", "Flag")]
  14. public class FlagCloseAction : AbstractAction
  15. {
  16. [DescAttribute("Flag")]
  17. public FlagValue Flag = new FlagValue.EditorPoint();
  18. public override string ToString()
  19. {
  20. return string.Format("关闭({0})", Flag);
  21. }
  22. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  23. {
  24. InstanceFlag flag = Flag.GetValue(api, args);
  25. if (flag != null)
  26. {
  27. flag.set_enable(false);
  28. }
  29. }
  30. }
  31. [DescAttribute("开启Flag(包括空气墙)", "Flag")]
  32. public class FlagOpenAction : AbstractAction
  33. {
  34. [DescAttribute("Flag")]
  35. public FlagValue Flag = new FlagValue.EditorPoint();
  36. public override string ToString()
  37. {
  38. return string.Format("开启({0})", Flag);
  39. }
  40. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  41. {
  42. InstanceFlag flag = Flag.GetValue(api, args);
  43. if (flag != null)
  44. {
  45. flag.set_enable(true);
  46. }
  47. }
  48. }
  49. [DescAttribute("设置Flag的Tag", "Flag")]
  50. public class FlagTagAction : AbstractAction
  51. {
  52. [DescAttribute("Flag")]
  53. public FlagValue Flag = new FlagValue.EditorPoint();
  54. [DescAttribute("Tag")]
  55. public StringValue Tag = new StringValue.NULL();
  56. public override string ToString()
  57. {
  58. return string.Format("{0}.Tag={1}", Flag, Tag);
  59. }
  60. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  61. {
  62. var flag = Flag.GetValue(api, args);
  63. var tag = Tag.GetValue(api, args);
  64. if (flag != null)
  65. {
  66. flag.Tag = tag;
  67. }
  68. }
  69. }
  70. [DescAttribute("当指定单位进入区域一次DO", "Flag")]
  71. public class WhenUnitEnterRegionOnceDo : AbstractAction
  72. {
  73. [DescAttribute("单位")]
  74. public UnitValue Unit = new UnitValue.Trigging();
  75. [DescAttribute("区域")]
  76. public FlagValue Region = new FlagValue.EditorRegion();
  77. [DescAttribute("动作")]
  78. public AbstractAction Action = new DoNoting();
  79. public override string ToString()
  80. {
  81. return string.Format("WHEN ({0})进入({1})一次 DO ({2})", Unit, Region, Action);
  82. }
  83. public override void DoAction(EventTriggerAdapter api, EventArguments args)
  84. {
  85. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  86. InstanceUnit unit = Unit.GetValue(api, args);
  87. if (region != null && unit != null)
  88. {
  89. var args2 = args.Clone();
  90. region.ListenUnitEnterOnce(unit, (r, u) =>
  91. {
  92. args2.TriggingFlag = r;
  93. args2.TriggingUnit = u;
  94. Action.DoAction(api, args2);
  95. });
  96. }
  97. }
  98. }
  99. [DescAttribute("当指定单位离开区域一次DO", "Flag")]
  100. public class WhenUnitLeaveRegionOnceDo : AbstractAction
  101. {
  102. [DescAttribute("单位")]
  103. public UnitValue Unit = new UnitValue.Trigging();
  104. [DescAttribute("区域")]
  105. public FlagValue Region = new FlagValue.EditorRegion();
  106. [DescAttribute("动作")]
  107. public AbstractAction Action = new DoNoting();
  108. public override string ToString()
  109. {
  110. return string.Format("WHEN ({0})离开({1})一次 DO ({2})", Unit, Region, Action);
  111. }
  112. public override void DoAction(EventTriggerAdapter api, EventArguments args)
  113. {
  114. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  115. InstanceUnit unit = Unit.GetValue(api, args);
  116. if (region != null && unit != null)
  117. {
  118. var args2 = args.Clone();
  119. region.ListenUnitLeaveOnce(unit, (r, u) =>
  120. {
  121. args2.TriggingFlag = r;
  122. args2.TriggingUnit = u;
  123. Action.DoAction(api, args2);
  124. });
  125. }
  126. }
  127. }
  128. [DescAttribute("当指定单位进入Area一次DO", "Flag")]
  129. public class WhenUnitEnterAreaOnceDo : AbstractAction
  130. {
  131. [DescAttribute("单位")]
  132. public UnitValue Unit = new UnitValue.Trigging();
  133. [DescAttribute("Area")]
  134. public FlagValue Area = new FlagValue.EditorArea();
  135. [DescAttribute("动作")]
  136. public AbstractAction Action = new DoNoting();
  137. public override string ToString()
  138. {
  139. return string.Format("WHEN ({0})进入({1})一次 DO ({2})", Unit, Area, Action);
  140. }
  141. public override void DoAction(EventTriggerAdapter api, EventArguments args)
  142. {
  143. var area = Area.GetValue(api, args) as ZoneArea;
  144. var unit = Unit.GetValue(api, args);
  145. if (area != null && unit != null)
  146. {
  147. var args2 = args.Clone();
  148. area.ListenUnitEnterOnce(unit, (r, u) =>
  149. {
  150. args2.TriggingFlag = r;
  151. args2.TriggingUnit = u;
  152. Action.DoAction(api, args2);
  153. });
  154. }
  155. }
  156. }
  157. [DescAttribute("当指定单位离开Area一次DO", "Flag")]
  158. public class WhenUnitLeaveAreaOnceDo : AbstractAction
  159. {
  160. [DescAttribute("单位")]
  161. public UnitValue Unit = new UnitValue.Trigging();
  162. [DescAttribute("Area")]
  163. public FlagValue Area = new FlagValue.EditorArea();
  164. [DescAttribute("动作")]
  165. public AbstractAction Action = new DoNoting();
  166. public override string ToString()
  167. {
  168. return string.Format("WHEN ({0})离开({1})一次 DO ({2})", Unit, Area, Action);
  169. }
  170. public override void DoAction(EventTriggerAdapter api, EventArguments args)
  171. {
  172. var area = Area.GetValue(api, args) as ZoneArea;
  173. var unit = Unit.GetValue(api, args);
  174. if (area != null && unit != null)
  175. {
  176. var args2 = args.Clone();
  177. area.ListenUnitLeaveOnce(unit, (r, u) =>
  178. {
  179. args2.TriggingFlag = r;
  180. args2.TriggingUnit = u;
  181. Action.DoAction(api, args2);
  182. });
  183. }
  184. }
  185. }
  186. }