BulletControl.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { BattleBase } from "../base/BattleBase";
  2. import { BattleEventManager } from "../base/BattleEventManager";
  3. import { BattleEventData_BulletAttack, BattleEventData_BulletMove, BattleEventTarget, BattleEventType, HurtEventState } from "../base/BattleEventUtil";
  4. import { BulletType } from "../data/BattleEnum";
  5. import { BattleUtil } from "../data/BattleUtil";
  6. import { BuffData } from "../data/BuffData";
  7. import { BulletData } from "../data/BulletData";
  8. import { EnemyData } from "../data/EnemyData";
  9. import { HeroData } from "../data/HeroData";
  10. import { MapData,PosData } from "../data/MapData";
  11. import { SkillControl } from "./SkillControl";
  12. //子弹控制类
  13. export class BulletControl extends BattleBase{
  14. map:MapData = null
  15. attackPosDataMap:Map<number,PosData> = null;
  16. enemyDataList:Array<EnemyData> = null;
  17. skillControl:SkillControl = null;
  18. battleEventManager: BattleEventManager;
  19. init(){
  20. this.battleEventManager = BattleEventManager.instance
  21. this.map = MapData.GetInstance()
  22. this.attackPosDataMap = this.map.attackPosDataMap
  23. this.enemyDataList = this.map.enemyDataList
  24. this.skillControl = SkillControl.GetInstance()
  25. }
  26. //每帧更新一次
  27. update(){
  28. // this.attackPosList = this.map.attackPosDataList
  29. let bulletList = this.map.bulletList
  30. for(let i = 0; i < bulletList.length; i++){
  31. let bullet = bulletList[i];
  32. let hero = bullet.srcHero
  33. let enemy = bullet.targetEnemy
  34. if(hero && enemy && hero.ID == bullet.srcHeroID && enemy.ID == bullet.targetEnemyID){
  35. let direction = BattleUtil.Vector2.Sub(bullet.position,enemy.position)
  36. direction.normalize()
  37. direction.multiply(bullet.speedCur)
  38. let eventData:BattleEventData_BulletMove = {
  39. eventType: BattleEventType.BulletMove,
  40. ID: bullet.ID,
  41. speedVector: direction
  42. }
  43. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  44. bullet.position = BattleUtil.Vector2.Add(bullet.position,bullet.speedVector);
  45. if(BattleUtil.Vector2.Sub(bullet.position,enemy.position).length() < bullet.boxRadius){
  46. this.attack(hero,enemy)
  47. if(hero.attackType == BulletType.GroupBullet){
  48. this.enemyDataList.forEach(enemyOther => {
  49. if(enemyOther.ID != bullet.targetEnemyID){
  50. if(BattleUtil.Vector2.Sub(bullet.position,enemyOther.position).length() < bullet.attackRadius){
  51. enemy.life -= hero.attackDamage
  52. let eventData:BattleEventData_BulletAttack = {
  53. eventType: BattleEventType.BulletAttack,
  54. typeID: hero.typeID,
  55. hurt: hero.attackDamage,
  56. targetID: enemy.ID,
  57. status: HurtEventState.Normal
  58. }
  59. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  60. }
  61. }
  62. })
  63. }
  64. }
  65. }
  66. else{
  67. this.map.removeBullet(bullet)
  68. i--
  69. }
  70. }
  71. }
  72. //攻击直接伤害
  73. attack(hero: HeroData, enemy: EnemyData) {
  74. //先普通攻击
  75. enemy.life -= hero.attackDamage
  76. let eventData:BattleEventData_BulletAttack = {
  77. eventType: BattleEventType.BulletAttack,
  78. typeID: hero.typeID,
  79. hurt: hero.attackDamage,
  80. targetID: enemy.ID,
  81. status: HurtEventState.Normal
  82. }
  83. let addBuffData:BuffData[] = null
  84. //在加技能攻击
  85. hero.skillBulletList.forEach(skillID => {
  86. let buffDataList = this.skillControl.useSkill(hero, enemy, skillID)
  87. buffDataList.forEach(buffData => {
  88. if(addBuffData == null){
  89. addBuffData = []
  90. }
  91. addBuffData.push(buffData)
  92. })
  93. })
  94. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  95. }
  96. }