private void UpdateActors(AoeObj aoeObj) { //离开的演员 List <ActorObj> leaveActors = new List <ActorObj>(); for (int i = 0; i < aoeObj.actorInRange.Count; i++) { ActorObj actor = aoeObj.actorInRange[i]; if (!Sensor.CheckActorInRange(aoeObj, actor)) { leaveActors.Add(actor); } } for (int a = 0; a < leaveActors.Count; a++) { aoeObj.actorInRange.Remove(leaveActors[a]); } ExecuteActorLeaveFunc(aoeObj, leaveActors); //新进入的演员 List <ActorObj> enterActors = new List <ActorObj>(); foreach (var item in Sensor.GetActorsInRange(aoeObj)) { if (aoeObj.actorInRange.IndexOf(item) < 0) { enterActors.Add(item); } } ExecuteActorEnterFunc(aoeObj, enterActors); for (int a = 0; a < enterActors.Count; a++) { aoeObj.actorInRange.Add(enterActors[a]); } }
private void UpdateBullets(AoeObj aoeObj) { //离开的演员 List <BulletObj> leaveBullets = new List <BulletObj>(); for (int i = 0; i < aoeObj.bulletInRange.Count; i++) { BulletObj bullet = aoeObj.bulletInRange[i]; if (!Sensor.CheckBulletInRange(aoeObj, bullet)) { leaveBullets.Add(bullet); } } for (int a = 0; a < leaveBullets.Count; a++) { aoeObj.bulletInRange.Remove(leaveBullets[a]); } ExecuteBulletLeaveFunc(aoeObj, leaveBullets); //新进入的演员 List <BulletObj> enterBullets = new List <BulletObj>(); foreach (var item in Sensor.GetBulletsInRange(aoeObj)) { if (aoeObj.bulletInRange.IndexOf(item) < 0) { enterBullets.Add(item); } } ExecuteBulletEnterFunc(aoeObj, enterBullets); for (int a = 0; a < enterBullets.Count; a++) { aoeObj.bulletInRange.Add(enterBullets[a]); } }
public override void Execute(AoeObj aoe, List <ActorObj> actors) { for (int i = 0; i < actors.Count; i++) { SkillCom targetCom = LCECS.ECSLocate.ECS.GetEntity(actors[i].Uid).GetCom <SkillCom>(); SkillLocate.Damage.AddDamage(aoe.ower, targetCom, damage); } }
private void DealAoe(AoeCom aoeCom) { float timePassed = SkillLocate.DeltaTime; if (aoeCom.Aoes == null || aoeCom.Aoes.Count <= 0) { return; } for (int i = 0; i < aoeCom.Aoes.Count; i++) { AoeObj aoeObj = aoeCom.Aoes[i]; //移动 if (aoeObj.duration > 0 && aoeObj.model.moveFunc != null) { AoeMoveInfo aoeMoveInfo = aoeObj.model.moveFunc.Execute(aoeObj, aoeObj.moveRunnedTime); aoeObj.moveRunnedTime += timePassed; aoeObj.SetMoveInfo(aoeMoveInfo); } if (aoeObj.justCreated) { aoeObj.justCreated = false; //检测进入的演员 var enterActors = Sensor.GetActorsInRange(aoeObj); ExecuteActorEnterFunc(aoeObj, enterActors); aoeObj.actorInRange.AddRange(enterActors); //检测进入的子弹 var enterBullets = Sensor.GetBulletsInRange(aoeObj); ExecuteBulletEnterFunc(aoeObj, enterBullets); aoeObj.bulletInRange.AddRange(enterBullets); //执行OnCreate ExecuteCreateFunc(aoeObj); } else { UpdateActors(aoeObj); UpdateBullets(aoeObj); } //Aoe生命周期 aoeObj.duration -= timePassed; aoeObj.timeElapsed += timePassed; if (aoeObj.duration <= 0) { ExecuteRemoveFunc(aoeObj); aoeCom.RemoveAoe(aoeObj); DestroyAoe(aoeObj); } else { ExecuteOnTickFunc(aoeObj); } } }
private void ExecuteBulletEnterFunc(AoeObj aoeObj, List <BulletObj> enterBullets) { if (aoeObj.model.onBulletEnterFunc == null || aoeObj.model.onBulletEnterFunc.Count <= 0) { return; } for (int i = 0; i < aoeObj.model.onBulletEnterFunc.Count; i++) { AoeBulletEnter func = aoeObj.model.onBulletEnterFunc[i]; func.Execute(aoeObj, enterBullets); } }
private void ExecuteActorEnterFunc(AoeObj aoeObj, List <ActorObj> enterActors) { if (aoeObj.model.onActorEnterFunc == null || aoeObj.model.onActorEnterFunc.Count <= 0) { return; } for (int i = 0; i < aoeObj.model.onActorEnterFunc.Count; i++) { AoeActorEnter func = aoeObj.model.onActorEnterFunc[i]; func.Execute(aoeObj, enterActors); } }
private void ExecuteCreateFunc(AoeObj aoeObj) { if (aoeObj.model.onCreateFunc == null || aoeObj.model.onCreateFunc.Count <= 0) { return; } for (int i = 0; i < aoeObj.model.onCreateFunc.Count; i++) { AoeLifeCycleFunc func = aoeObj.model.onCreateFunc[i]; func.Execute(aoeObj); } }
private void ExecuteOnTickFunc(AoeObj aoeObj) { if (aoeObj.model.tickTime <= 0) { return; } if (aoeObj.model.onTickFunc == null || aoeObj.model.onTickFunc.Count <= 0) { return; } if (Mathf.RoundToInt(aoeObj.duration * 1000) % Mathf.RoundToInt(aoeObj.model.tickTime * 1000) != 0) { return; } for (int i = 0; i < aoeObj.model.onTickFunc.Count; i++) { AoeLifeCycleFunc func = aoeObj.model.onTickFunc[i]; func.Execute(aoeObj); } }
/// <summary> /// 检测演员是否在范围内 /// </summary> /// <param name="aoeObj"></param> /// <param name="actor"></param> /// <returns></returns> public abstract bool CheckActorInRange(AoeObj aoeObj, ActorObj actor);
/// <summary> /// 获取Aoe范围内的演员 /// </summary> /// <param name="aoeObj"></param> /// <returns></returns> public abstract List <ActorObj> GetActorsInRange(AoeObj aoeObj);
/// <summary> /// 执行函数 /// </summary> /// <param name="aoe">aoe对象</param> /// <param name="bullets">离开的子弹</param> public abstract void Execute(AoeObj aoe, List <BulletObj> bullets);
/// <summary> /// 执行函数 /// </summary> /// <param name="aoe">aoe对象</param> /// <param name="actors">离开的演员</param> public abstract void Execute(AoeObj aoe, List <ActorObj> actors);
/// <summary> /// 执行函数 /// </summary> /// <param name="aoe">aoe对象</param> /// <param name="moveTime">已经移动时间</param> public abstract AoeMoveInfo Execute(AoeObj aoe, float moveTime);
public override void Execute(AoeObj aoe) { }
private void DestroyAoe(AoeObj aoeObj) { Debug.LogWarning("目前Aoe直接销毁》》》》!!!!"); }
/// <summary> /// 获取Aoe范围内的子弹 /// </summary> /// <param name="aoeObj"></param> /// <returns></returns> public abstract List <BulletObj> GetBulletsInRange(AoeObj aoeObj);
/// <summary> /// 检测子弹是否在范围内 /// </summary> /// <param name="bulletObj"></param> /// <param name="actor"></param> /// <returns></returns> public abstract bool CheckBulletInRange(AoeObj aoeObj, BulletObj bullet);
/// <summary> /// 执行函数 /// </summary> /// <param name="aoe">aoe对象</param> public abstract void Execute(AoeObj aoe);
public override void Execute(AoeObj aoe, List <ActorObj> actors) { }
public override void Execute(AoeObj aoe) { SkillLocate.Damage.AddDamage(aoe.ower, aoe.ower, damage); }