Пример #1
0
        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]);
            }
        }
Пример #2
0
        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]);
            }
        }
Пример #3
0
 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);
     }
 }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
 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);
     }
 }
Пример #6
0
 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);
     }
 }
Пример #7
0
 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);
     }
 }
Пример #8
0
 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);
     }
 }
Пример #9
0
 /// <summary>
 /// 检测演员是否在范围内
 /// </summary>
 /// <param name="aoeObj"></param>
 /// <param name="actor"></param>
 /// <returns></returns>
 public abstract bool CheckActorInRange(AoeObj aoeObj, ActorObj actor);
Пример #10
0
 /// <summary>
 /// 获取Aoe范围内的演员
 /// </summary>
 /// <param name="aoeObj"></param>
 /// <returns></returns>
 public abstract List <ActorObj> GetActorsInRange(AoeObj aoeObj);
Пример #11
0
 /// <summary>
 /// 执行函数
 /// </summary>
 /// <param name="aoe">aoe对象</param>
 /// <param name="bullets">离开的子弹</param>
 public abstract void Execute(AoeObj aoe, List <BulletObj> bullets);
Пример #12
0
 /// <summary>
 /// 执行函数
 /// </summary>
 /// <param name="aoe">aoe对象</param>
 /// <param name="actors">离开的演员</param>
 public abstract void Execute(AoeObj aoe, List <ActorObj> actors);
Пример #13
0
 /// <summary>
 /// 执行函数
 /// </summary>
 /// <param name="aoe">aoe对象</param>
 /// <param name="moveTime">已经移动时间</param>
 public abstract AoeMoveInfo Execute(AoeObj aoe, float moveTime);
Пример #14
0
 public override void Execute(AoeObj aoe)
 {
 }
Пример #15
0
 private void DestroyAoe(AoeObj aoeObj)
 {
     Debug.LogWarning("目前Aoe直接销毁》》》》!!!!");
 }
Пример #16
0
 /// <summary>
 /// 获取Aoe范围内的子弹
 /// </summary>
 /// <param name="aoeObj"></param>
 /// <returns></returns>
 public abstract List <BulletObj> GetBulletsInRange(AoeObj aoeObj);
Пример #17
0
 /// <summary>
 /// 检测子弹是否在范围内
 /// </summary>
 /// <param name="bulletObj"></param>
 /// <param name="actor"></param>
 /// <returns></returns>
 public abstract bool CheckBulletInRange(AoeObj aoeObj, BulletObj bullet);
Пример #18
0
 /// <summary>
 /// 执行函数
 /// </summary>
 /// <param name="aoe">aoe对象</param>
 public abstract void Execute(AoeObj aoe);
Пример #19
0
 public override void Execute(AoeObj aoe, List <ActorObj> actors)
 {
 }
Пример #20
0
 public override void Execute(AoeObj aoe)
 {
     SkillLocate.Damage.AddDamage(aoe.ower, aoe.ower, damage);
 }