import { BattleBase } from "../base/BattleBase"; import { BattleEventManager } from "../base/BattleEventManager"; import { BattleEventData_EnemyHurt, BattleEventData_HeroAction, BattleEventData_HeroAttack, BattleEventData_HeroAttackBullet, BattleEventHeroAction, BattleEventTarget, BattleEventType, HeroActionType, HurtEventState } from "../base/BattleEventUtil"; import { BulletType } from "../data/BattleEnum"; import { BattleUtil } from "../data/BattleUtil"; import { BuffData } from "../data/BuffData"; import { BulletData } from "../data/BulletData"; import { EnemyData } from "../data/EnemyData"; import { HeroData } from "../data/HeroData"; import { MapData, PosData } from "../data/MapData"; import { SkillControl } from "./SkillControl"; //英雄控制类 export class HeroControl extends BattleBase{ map:MapData = null attackPosDataMap:Map = null; enemyDataList:Array = null; skillControl:SkillControl = null; battleEventManager: BattleEventManager; actionList:Array = [] constructor(){ super(); this.battleEventManager = BattleEventManager.instance BattleEventManager.instance.addEvent(BattleEventTarget.HeroAction, this.heroActionEvent.bind(this), -1); } init(){ this.map = MapData.GetInstance() this.attackPosDataMap = this.map.attackPosDataMap this.enemyDataList = this.map.enemyDataList this.skillControl = SkillControl.GetInstance() } //每次加一帧 update(){ this.actionList.forEach(actionData=>{ let hero = this.attackPosDataMap.get(this.map.attackPosition[actionData.posIndex]).hero if(hero){ this.checkAttack(hero) } }) this.actionList = [] this.attackPosDataMap.forEach((posData:PosData)=>{ let hero = posData.hero if(hero){ hero.coolDown -= 1 if(hero.coolDown <= 0){ let targetID = -1 for(let i = 0;i = [] for(let i = 0;i { addBuffData = this.skillControl.useSkill(hero, enemy, skillID) }) } //攻击打出子弹 attackBullet(hero: HeroData, enemy: EnemyData,bulletData:BulletData) { let eventData:BattleEventData_HeroAttackBullet = { eventType: BattleEventType.HeroAttackBullet, posID: hero.posID, targetID: enemy.ID, bulletID: bulletData.ID } this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData) let addBuffData:BuffData[] = null //在加技能攻击 hero.skillList.forEach(skillID => { addBuffData = this.skillControl.useSkill(hero, enemy, skillID) }) bulletData.buffDataList = addBuffData } isInRadius(position: BattleUtil.Vector2, position1: BattleUtil.Vector2, attackRadius: number) { return BattleUtil.Vector2.Sub(position, position1).length() <= attackRadius // return true } heroActionEvent(eventData:BattleEventHeroAction){ this.actionList.push(eventData) } }