Exemple #1
0
        private void DealBullet(BulletCom bulletCom)
        {
            float timePassed = SkillLocate.DeltaTime;

            if (bulletCom.Bullets == null || bulletCom.Bullets.Count <= 0)
            {
                return;
            }
            for (int i = 0; i < bulletCom.Bullets.Count; i++)
            {
                BulletObj bulletObj = bulletCom.Bullets[i];

                //创建函数
                if (bulletObj.timeElapsed <= 0)
                {
                    ExecuteCreateFunc(bulletObj);
                }

                //处理命中纪录
                UpdateHitRecords(bulletObj, timePassed);

                //移动
                if (bulletObj.duration > 0 && bulletObj.model.moveFunc != null)
                {
                    BulletMoveInfo bulletMoveInfo = bulletObj.model.moveFunc.Execute(bulletObj, bulletObj.timeElapsed, bulletObj.followActor);
                    bulletObj.SetMoveInfo(bulletMoveInfo);
                }

                //碰撞
                if (bulletObj.canHitAfterCreated > 0)
                {
                    bulletObj.canHitAfterCreated -= timePassed;
                }
                else
                {
                    List <ActorObj> hitActors = Sensor.GetHitActors(bulletObj);
                    for (int a = 0; a < hitActors.Count; a++)
                    {
                        if (CheckInHitRecord(bulletObj, hitActors[a]))
                        {
                            continue;
                        }
                        //次数减一
                        bulletObj.model.hitTimes -= 1;

                        //执行击中函数
                        ActorObj hitActor = hitActors[a];
                        ExecuteHitActorFunc(bulletObj, hitActor);

                        //记录击中记录
                        bulletObj.hitRecords.Add(new BulletHitRecord(hitActor, bulletObj.model.sameTargetDelay));
                    }
                }

                //生命周期计算
                bulletObj.duration    -= timePassed;
                bulletObj.timeElapsed += timePassed;
                if (bulletObj.duration <= 0 || bulletObj.model.hitTimes <= 0)
                {
                    ExecuteRemoveFunc(bulletObj);
                    bulletCom.RemoveBullet(bulletObj);
                    DestroyBullet(bulletObj);
                }
            }
        }
Exemple #2
0
 public void SetMoveInfo(BulletMoveInfo moveInfo)
 {
     CurrMoveInfo = moveInfo;
 }