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); } } }
protected override void HandleComs(List <BaseCom> comList) { BulletCom bulletCom = GetCom <BulletCom>(comList[0]); DealBullet(bulletCom); }