using System; using System.Collections.Generic; using System.Text; using CommonLang.Property; using CommonAI.Zone.ZoneEditor; using CommonAI.Zone.Instance; using CommonAI.Zone.Attributes; using CommonAI.Zone.EventTrigger; namespace CommonAI.Zone.ZoneEditor.EventTrigger { [DescAttribute("Flag开启(包括空气墙)", "Flag")] public class FlagOpenedTrigger : AbstractTrigger { [DescAttribute("Flag")] public FlagValue Flag = new FlagValue.NA(); public override string ToString() { return string.Format("当({0})开启时", Flag); } public override void Listen(EventTriggerAdapter api, EventArguments args) { InstanceFlag flag = Flag.GetValue(api, args); if (flag != null) { //flag.OnFlagEnabled += api.onFlagOpened; api.listen_FlagOpened(args, flag); } } } [DescAttribute("Flag关闭(包括空气墙)", "Flag")] public class FlagClosedTrigger : AbstractTrigger { [DescAttribute("Flag")] public FlagValue Flag = new FlagValue.NA(); public override string ToString() { return string.Format("当({0})关闭时", Flag); } public override void Listen(EventTriggerAdapter api, EventArguments args) { InstanceFlag flag = Flag.GetValue(api, args); if (flag != null) { //flag.OnFlagEnabled += api.onFlagClosed; api.listen_FlagClosed(args, flag); } } } //------------------------------------------------------------------------------------------- #region __区域事件__ [DescAttribute("单位进入区域", "区域")] public class UnitEnterRegion : AbstractTrigger { [DescAttribute("区域")] public FlagValue.EditorRegion Region = new FlagValue.EditorRegion(); public override string ToString() { return string.Format("当单位进入({0})", Region); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; if (region != null) { api.listen_RegionEntered(args, region); } } } [DescAttribute("单位离开区域", "区域")] public class UnitLeaveRegion : AbstractTrigger { [DescAttribute("区域")] public FlagValue.EditorRegion Region = new FlagValue.EditorRegion(); public override string ToString() { return string.Format("当单位离开({0})", Region); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; if (region != null) { api.listen_RegionLeft(args, region); } } } [DescAttribute("区域刷新单位结束", "区域 - 刷新点")] public class SpawnUnitRegionIsDone : AbstractTrigger { [DescAttribute("区域")] public FlagValue.EditorRegion Region = new FlagValue.EditorRegion(); public override string ToString() { return string.Format("当({0})单位刷新结束时", Region); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; if (region != null) { api.listen_RegionSpawnOver(args, region); } } } [DescAttribute("指定单位进入区域一次", "区域")] public class UnitEnterRegionOnce : AbstractTrigger { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("区域")] public FlagValue.EditorRegion Region = new FlagValue.EditorRegion(); public override string ToString() { return string.Format("({0})进入({1})一次", Unit, Region); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; InstanceUnit unit = Unit.GetValue(api, args); if (region != null && unit != null) { args = args.Clone(); region.ListenUnitEnterOnce(unit, (r, u) => { args.TriggingFlag = r; args.TriggingUnit = u; api.TestAndDoAction(args); }); } } } [DescAttribute("指定单位离开区域一次", "区域")] public class UnitLeaveRegionOnce : AbstractTrigger { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("区域")] public FlagValue.EditorRegion Region = new FlagValue.EditorRegion(); public override string ToString() { return string.Format("({0})离开({1})一次", Unit, Region); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneRegion region = Region.GetValue(api, args) as ZoneRegion; InstanceUnit unit = Unit.GetValue(api, args); if (region != null && unit != null) { args = args.Clone(); region.ListenUnitLeaveOnce(unit, (r, u) => { args.TriggingFlag = r; args.TriggingUnit = u; api.TestAndDoAction(args); }); } } } #endregion //------------------------------------------------------------------------------------------- #region __Area事件__ [DescAttribute("单位进入Area", "Area")] public class UnitEnterArea : AbstractTrigger { [DescAttribute("Area")] public FlagValue.EditorArea Area = new FlagValue.EditorArea(); public override string ToString() { return string.Format("当单位进入({0})", Area); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneArea region = Area.GetValue(api, args) as ZoneArea; if (region != null) { api.listen_AreaEntered(args, region); } } } [DescAttribute("单位离开Area", "Area")] public class UnitLeaveArea : AbstractTrigger { [DescAttribute("Area")] public FlagValue.EditorArea Area = new FlagValue.EditorArea(); public override string ToString() { return string.Format("当单位离开({0})", Area); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneArea region = Area.GetValue(api, args) as ZoneArea; if (region != null) { api.listen_AreaLeft(args, region); } } } [DescAttribute("指定单位进入Area一次", "区域")] public class UnitEnterAreaOnce : AbstractTrigger { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("Area")] public FlagValue.EditorArea Area = new FlagValue.EditorArea(); public override string ToString() { return string.Format("({0})进入({1})一次", Unit, Area); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneArea area = Area.GetValue(api, args) as ZoneArea; InstanceUnit unit = Unit.GetValue(api, args); if (area != null && unit != null) { args = args.Clone(); area.ListenUnitEnterOnce(unit, (r, u) => { args.TriggingFlag = r; args.TriggingUnit = u; api.TestAndDoAction(args); }); } } } [DescAttribute("指定单位离开Area一次", "区域")] public class UnitLeaveAreaOnce : AbstractTrigger { [DescAttribute("单位")] public UnitValue Unit = new UnitValue.Trigging(); [DescAttribute("Area")] public FlagValue.EditorArea Area = new FlagValue.EditorArea(); public override string ToString() { return string.Format("({0})离开({1})一次", Unit, Area); } public override void Listen(EventTriggerAdapter api, EventArguments args) { ZoneArea area = Area.GetValue(api, args) as ZoneArea; InstanceUnit unit = Unit.GetValue(api, args); if (area != null && unit != null) { args = args.Clone(); area.ListenUnitLeaveOnce(unit, (r, u) => { args.TriggingFlag = r; args.TriggingUnit = u; api.TestAndDoAction(args); }); } } } #endregion //------------------------------------------------------------------------------------------- }