using CommonAI.RTS; using CommonLang.Vector; using CommonAI.Zone.Helper; using CommonLang; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CommonAI.Zone.Instance { //-------------------------------------------------------------------------------------------------------- /// /// 场景内机关 /// public class InstanceTriggerUnit : InstanceUnit { private Vector2 target = new Vector2(); public InstanceTriggerUnit(InstanceZone zone, UnitInfo info, string name, int force, int level) : base(zone, info, name, force, level) { } public override bool IsActive { get { return false; } } public override bool IsAttackable { get { return false; } } public override bool IntersectMap { get { return false; } } public override bool IntersectObj { get { return false; } } public override bool Moveable { get { return false; } } override protected void onUpdate(bool slowRefresh) { base.onUpdate(slowRefresh); this.target.SetX(X); this.target.SetY(Y); if (!IsPaused && !IsNoneSkill) { if (CurrentState is StateIdle) { if (!doSomething2()) { launchRandomSkillForAll(new InstanceUnit.LaunchSkillParam(0, target)); } } } } private bool doSomething2() { if (Info.GuardRange > 0) { using (var list = ListObjectPool.AllocAutoRelease()) { //随机找个目标施法// Parent.getObjectsRoundRange(Collider.Object_Pos_IncludeInRound, X, Y, Info.GuardRange, list , this.AoiStatus); DoAndRemoveCollection.UpdateAndRemove(list, (InstanceUnit u) => { return !u.IsActive; }); CUtils.RandomList(Parent.RandomN, list); foreach (SkillState skill in SkillStatus) { if (skill.TryLaunch()) { foreach (InstanceUnit u in list) { if (Parent.IsAttackable(this, u, skill.Data.ExpectTarget, AttackReason.Look, Info)) { //检测是否有可释放技能// if (tryAutoLaunch(skill, u)) { return true; } } } } } } } return false; } private bool tryAutoLaunch(SkillState st, InstanceUnit target) { if (st != null) { if (launchSkill(st.ID, new LaunchSkillParam(target.ID, new Vector2(target.X, target.Y), false)) != null) { return true; } } return false; } } }