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; namespace CommonAI.Zone.ZoneEditor.EventTrigger { [DescAttribute("关闭Flag(包括空气墙)", "Flag")] public class FlagCloseAction : AbstractAction { [DescAttribute("Flag")] public FlagValue Flag = new FlagValue.EditorPoint(); public override string ToString() { return string.Format("关闭({0})", Flag); } override public void DoAction(EventTriggerAdapter api, EventArguments args) { InstanceFlag flag = Flag.GetValue(api, args); if (flag != null) { flag.set_enable(false); } } } [DescAttribute("开启Flag(包括空气墙)", "Flag")] public class FlagOpenAction : AbstractAction { [DescAttribute("Flag")] public FlagValue Flag = new FlagValue.EditorPoint(); public override string ToString() { return string.Format("开启({0})", Flag); } override public void DoAction(EventTriggerAdapter api, EventArguments args) { InstanceFlag flag = Flag.GetValue(api, args); if (flag != null) { flag.set_enable(true); } } } [DescAttribute("设置Flag的Tag", "Flag")] public class FlagTagAction : AbstractAction { [DescAttribute("Flag")] public FlagValue Flag = new FlagValue.EditorPoint(); [DescAttribute("Tag")] public StringValue Tag = new StringValue.NULL(); public override string ToString() { return string.Format("{0}.Tag={1}", Flag, Tag); } override public void DoAction(EventTriggerAdapter api, EventArguments args) { var flag = Flag.GetValue(api, args); var tag = Tag.GetValue(api, args); if (flag != null) { flag.Tag = tag; } } } [DescAttribute("当指定单位进入区域一次DO", "Flag")] public class WhenUnitEnterRegionOnceDo : AbstractAction { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("区域")] public FlagValue Region = new FlagValue.EditorRegion(); [DescAttribute("动作")] public AbstractAction Action = new DoNoting(); public override string ToString() { return string.Format("WHEN ({0})进入({1})一次 DO ({2})", Unit, Region, Action); } public override void DoAction(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; InstanceUnit unit = Unit.GetValue(api, args); if (region != null && unit != null) { var args2 = args.Clone(); region.ListenUnitEnterOnce(unit, (r, u) => { args2.TriggingFlag = r; args2.TriggingUnit = u; Action.DoAction(api, args2); }); } } } [DescAttribute("当指定单位离开区域一次DO", "Flag")] public class WhenUnitLeaveRegionOnceDo : AbstractAction { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("区域")] public FlagValue Region = new FlagValue.EditorRegion(); [DescAttribute("动作")] public AbstractAction Action = new DoNoting(); public override string ToString() { return string.Format("WHEN ({0})离开({1})一次 DO ({2})", Unit, Region, Action); } public override void DoAction(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; InstanceUnit unit = Unit.GetValue(api, args); if (region != null && unit != null) { var args2 = args.Clone(); region.ListenUnitLeaveOnce(unit, (r, u) => { args2.TriggingFlag = r; args2.TriggingUnit = u; Action.DoAction(api, args2); }); } } } [DescAttribute("当指定单位进入Area一次DO", "Flag")] public class WhenUnitEnterAreaOnceDo : AbstractAction { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("Area")] public FlagValue Area = new FlagValue.EditorArea(); [DescAttribute("动作")] public AbstractAction Action = new DoNoting(); public override string ToString() { return string.Format("WHEN ({0})进入({1})一次 DO ({2})", Unit, Area, Action); } public override void DoAction(EventTriggerAdapter api, EventArguments args) { var area = Area.GetValue(api, args) as ZoneArea; var unit = Unit.GetValue(api, args); if (area != null && unit != null) { var args2 = args.Clone(); area.ListenUnitEnterOnce(unit, (r, u) => { args2.TriggingFlag = r; args2.TriggingUnit = u; Action.DoAction(api, args2); }); } } } [DescAttribute("当指定单位离开Area一次DO", "Flag")] public class WhenUnitLeaveAreaOnceDo : AbstractAction { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("Area")] public FlagValue Area = new FlagValue.EditorArea(); [DescAttribute("动作")] public AbstractAction Action = new DoNoting(); public override string ToString() { return string.Format("WHEN ({0})离开({1})一次 DO ({2})", Unit, Area, Action); } public override void DoAction(EventTriggerAdapter api, EventArguments args) { var area = Area.GetValue(api, args) as ZoneArea; var unit = Unit.GetValue(api, args); if (area != null && unit != null) { var args2 = args.Clone(); area.ListenUnitLeaveOnce(unit, (r, u) => { args2.TriggingFlag = r; args2.TriggingUnit = u; Action.DoAction(api, args2); }); } } } }