123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- using System;
- using System.Collections.Generic;
- using System.Text;
- using CommonLang.Property;
- using CommonAI.Zone.Attributes;
- using CommonAI.Zone;
- using CommonAI.Zone.ZoneEditor;
- using CommonAI.RTS; using CommonLang.Vector;
- using CommonAI.Zone.Instance;
- using CommonAI.Zone.EventTrigger;
- using CommonLang;
- namespace CommonAI.Zone.ZoneEditor.EventTrigger
- {
- [DescAttribute("添加物品", "物品")]
- public class AddItemAction : AbstractAction
- {
- [DescAttribute("物品模板ID")]
- [TemplateIDAttribute(typeof(ItemTemplate))]
- public int ItemTemplateID = 0;
- [DescAttribute("名字")]
- public string Name = "";
- [DescAttribute("阵营")]
- public IntegerValue TargetForce = new IntegerValue.VALUE(0);
- [DescAttribute("位置")]
- public PositionValue Position = new PositionValue.VALUE();
- [DescAttribute("方向")]
- public RealValue Direction = new RealValue.VALUE();
- public override string ToString()
- {
- return string.Format("添加物品({0}-{1})到({2})", ItemTemplateID, Name, Position);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- Vector2 pos = Position.GetValue(api, args);
- ItemTemplate temp = api.Templates.getItem(ItemTemplateID);
- if (pos != null && temp != null)
- {
- byte force = (byte)TargetForce.GetValue(api, args);
- float direction = Direction.GetValue(api, args);
- api.ZoneAPI.AddItem(temp, Name, pos.X, pos.Y, direction, force, null, null);
- }
- }
- }
- [DescAttribute("直接移除物品", "物品")]
- public class RemoveItemAction : AbstractAction
- {
- [DescAttribute("物品")]
- public ItemValue Item = new ItemValue.NamedItem();
- public override string ToString()
- {
- return string.Format("直接移除({0})", Item);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- InstanceItem item = Item.GetValue(api, args);
- if (item != null)
- {
- api.ZoneAPI.RemoveObject(item);
- }
- }
- }
- #region __物品组__
- [DescAttribute("遍历坐标半径范围内所有物品", "遍历物品组")]
- public class EveryRangedItemDoAction : AbstractAction
- {
- [DescAttribute("坐标")]
- public PositionValue Position = new PositionValue.VALUE();
- [DescAttribute("半径")]
- public float Range = 10f;
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历坐标({0})半径({1})范围内的物品 DO {2}", Position, Range, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- Vector2 pos = Position.GetValue(api, args);
- if (pos != null)
- {
- using(var units = ListObjectPool<InstanceItem>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- api.ZoneAPI.getObjectsRoundRange<InstanceItem>(
- Collider.Object_Pos_IncludeInRound, pos.X, pos.Y, Range,
- units , null);
- foreach (InstanceItem u in units)
- {
- args2.IteratingItem = (u);
- Action.DoAction(api, args2);
- args2.IteratingItem = (null);
- }
- }
- }
- }
- }
- [DescAttribute("遍历区域内所有物品", "遍历物品组")]
- public class EveryItemInRegionDoAction : AbstractAction
- {
- [DescAttribute("区域")]
- public FlagValue Region = new FlagValue.EditorRegion();
- [DescAttribute("动作")]
- public AbstractAction Action = new DoNoting();
- public override string ToString()
- {
- return string.Format("遍历区域({0})内的物品 DO {1}", Region, Action);
- }
- override public void DoAction(EventTriggerAdapter api, EventArguments args)
- {
- ZoneRegion region = Region.GetValue(api, args) as ZoneRegion;
- if (region != null)
- {
- using (var list = ListObjectPool<InstanceItem>.AllocAutoRelease())
- {
- var args2 = args.Clone();
- region.getObjectsInRegion<InstanceItem>(list);
- foreach (InstanceItem u in list)
- {
- args2.IteratingItem = (u);
- Action.DoAction(api, args2);
- args2.IteratingItem = (null);
- }
- }
- }
- }
- }
- #endregion
- }
|