Actions.Items.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. using CommonLang;
  12. namespace CommonAI.Zone.ZoneEditor.EventTrigger
  13. {
  14. [DescAttribute("添加物品", "物品")]
  15. public class AddItemAction : AbstractAction
  16. {
  17. [DescAttribute("物品模板ID")]
  18. [TemplateIDAttribute(typeof(ItemTemplate))]
  19. public int ItemTemplateID = 0;
  20. [DescAttribute("名字")]
  21. public string Name = "";
  22. [DescAttribute("阵营")]
  23. public IntegerValue TargetForce = new IntegerValue.VALUE(0);
  24. [DescAttribute("位置")]
  25. public PositionValue Position = new PositionValue.VALUE();
  26. [DescAttribute("方向")]
  27. public RealValue Direction = new RealValue.VALUE();
  28. public override string ToString()
  29. {
  30. return string.Format("添加物品({0}-{1})到({2})", ItemTemplateID, Name, Position);
  31. }
  32. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  33. {
  34. Vector2 pos = Position.GetValue(api, args);
  35. ItemTemplate temp = api.Templates.getItem(ItemTemplateID);
  36. if (pos != null && temp != null)
  37. {
  38. byte force = (byte)TargetForce.GetValue(api, args);
  39. float direction = Direction.GetValue(api, args);
  40. api.ZoneAPI.AddItem(temp, Name, pos.X, pos.Y, direction, force, null, null);
  41. }
  42. }
  43. }
  44. [DescAttribute("直接移除物品", "物品")]
  45. public class RemoveItemAction : AbstractAction
  46. {
  47. [DescAttribute("物品")]
  48. public ItemValue Item = new ItemValue.NamedItem();
  49. public override string ToString()
  50. {
  51. return string.Format("直接移除({0})", Item);
  52. }
  53. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  54. {
  55. InstanceItem item = Item.GetValue(api, args);
  56. if (item != null)
  57. {
  58. api.ZoneAPI.RemoveObject(item);
  59. }
  60. }
  61. }
  62. #region __物品组__
  63. [DescAttribute("遍历坐标半径范围内所有物品", "遍历物品组")]
  64. public class EveryRangedItemDoAction : AbstractAction
  65. {
  66. [DescAttribute("坐标")]
  67. public PositionValue Position = new PositionValue.VALUE();
  68. [DescAttribute("半径")]
  69. public float Range = 10f;
  70. [DescAttribute("动作")]
  71. public AbstractAction Action = new DoNoting();
  72. public override string ToString()
  73. {
  74. return string.Format("遍历坐标({0})半径({1})范围内的物品 DO {2}", Position, Range, Action);
  75. }
  76. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  77. {
  78. Vector2 pos = Position.GetValue(api, args);
  79. if (pos != null)
  80. {
  81. using(var units = ListObjectPool<InstanceItem>.AllocAutoRelease())
  82. {
  83. var args2 = args.Clone();
  84. api.ZoneAPI.getObjectsRoundRange<InstanceItem>(
  85. Collider.Object_Pos_IncludeInRound, pos.X, pos.Y, Range,
  86. units , null);
  87. foreach (InstanceItem u in units)
  88. {
  89. args2.IteratingItem = (u);
  90. Action.DoAction(api, args2);
  91. args2.IteratingItem = (null);
  92. }
  93. }
  94. }
  95. }
  96. }
  97. [DescAttribute("遍历区域内所有物品", "遍历物品组")]
  98. public class EveryItemInRegionDoAction : AbstractAction
  99. {
  100. [DescAttribute("区域")]
  101. public FlagValue Region = new FlagValue.EditorRegion();
  102. [DescAttribute("动作")]
  103. public AbstractAction Action = new DoNoting();
  104. public override string ToString()
  105. {
  106. return string.Format("遍历区域({0})内的物品 DO {1}", Region, Action);
  107. }
  108. override public void DoAction(EventTriggerAdapter api, EventArguments args)
  109. {
  110. ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
  111. if (region != null)
  112. {
  113. using (var list = ListObjectPool<InstanceItem>.AllocAutoRelease())
  114. {
  115. var args2 = args.Clone();
  116. region.getObjectsInRegion<InstanceItem>(list);
  117. foreach (InstanceItem u in list)
  118. {
  119. args2.IteratingItem = (u);
  120. Action.DoAction(api, args2);
  121. args2.IteratingItem = (null);
  122. }
  123. }
  124. }
  125. }
  126. }
  127. #endregion
  128. }