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.AllocAutoRelease()) { var args2 = args.Clone(); api.ZoneAPI.getObjectsRoundRange( 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.AllocAutoRelease()) { var args2 = args.Clone(); region.getObjectsInRegion(list); foreach (InstanceItem u in list) { args2.IteratingItem = (u); Action.DoAction(api, args2); args2.IteratingItem = (null); } } } } } #endregion }