123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- import { BattleBase } from "../base/BattleBase";
- import { BattleEventManager } from "../base/BattleEventManager";
- import { BattleEventData_EnemyBuff, BattleEventData_EnemyDie, BattleEventData_EnemyHurt, BattleEventData_EnemyMove, BattleEventTarget, BattleEventType, BuffEventState, HurtEventState } from "../base/BattleEventUtil";
- import { BuffType } from "../data/BattleEnum";
- import { BattleUtil } from "../data/BattleUtil";
- import { BuffData ,BuffDataPool} from "../data/BuffData";
- import { DataBase } from "../data/DataBase";
- import { EnemyData } from "../data/EnemyData";
- import { HeroData } from "../data/HeroData";
- import { MapData } from "../data/MapData";
- //子弹控制类
- export class BuffControl extends BattleBase{
-
- map:MapData = null
- buffMap:Map<number,BuffData> = null;
- battleEventManager: BattleEventManager = null;
- init(){
- this.battleEventManager = BattleEventManager.instance
- this.map = MapData.GetInstance()
- this.buffMap = this.map.buffMap
- }
- //每次加一帧
- update(){
- this.buffMap.forEach((buff:BuffData)=>{
- buff.duration--
- buff.lifeTime++
- this.updateTimeBuff(buff)
- if(buff.duration <= 0){
- let eventData:BattleEventData_EnemyBuff = {
- eventType: BattleEventType.EnemyBuff,
- ID: buff.targetDataBaseID,
- buffID: buff.ID,
- eventState: BuffEventState.Remove
- }
- this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
- this.map.removeBuff(buff.ID)
- }
- })
- }
- //处理新加buff
- updateNewBuff(){
- this.map.buffMap.forEach((buff:BuffData)=>{
- if(buff.lifeTime == 0){
- let eventData:BattleEventData_EnemyBuff = {
- eventType: BattleEventType.EnemyBuff,
- ID: buff.targetDataBaseID,
- buffID: buff.ID,
- eventState: BuffEventState.Add
- }
- this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
- this.updateAddBuff(buff)
- }
- })
- }
- //时间变化引起的buff计算
- updateTimeBuff(buff:BuffData){
- switch(buff.typeID){
- case BuffType.Poison:{//中毒
- let target = buff.targetDataBase as EnemyData
- let src = buff.srcDataBase as HeroData
- if(buff.lifeTime%BattleUtil.FrameRate == 1){
- target.life -= buff.valueList[0];
- let eventData:BattleEventData_EnemyHurt = {
- eventType: BattleEventType.EnemyHurt,
- targetID: target.ID,
- hurt: buff.valueList[0],
- status: HurtEventState.Poison,
- typeID:src.typeID
- }
- this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
-
- }
- }
- break;
- }
-
-
- }
- //处理加buff时,有影响的buff
- updateAddBuff(buff:BuffData){
- let src = buff.srcDataBase
- let target = buff.targetDataBase
- if(target instanceof HeroData){
- this.updateHeroAddBuff(buff,target)
- }else if(target instanceof EnemyData){
- this.updateEnemyAddBuff(buff,target)
- }
- }
- private updateEnemyAddBuff(buff: BuffData, target: EnemyData) {
- switch(buff.typeID){
- case BuffType.Snow://减速 目前只有一种不做过渡计算
- target.speedCur = target.speedBase*buff.valueList[0];
- // console.log("减速:",target.ID)
- break;
- case BuffType.Ice://冰冻
- target.speedCur = 0;
- // console.log("冰冻:",target.ID)
- break;
- }
- }
- private updateHeroAddBuff(buff: BuffData, target: HeroData) {
- throw new Error("Method not implemented.");
- }
- //处理结算时有影响的buff
- updateRemoveBuff(buff:BuffData){
- let src = buff.srcDataBase
- let target = buff.targetDataBase
- if(target instanceof HeroData){
- this.updateHeroRemoveBuff(buff,target)
- }else if(target instanceof EnemyData){
- this.updateEnemyRemoveBuff(buff,target)
- }
-
- }
-
- private updateEnemyRemoveBuff(buff: BuffData,target: EnemyData) {
- switch(buff.typeID){
- case 2:{//减速 目前只有一种不做过渡计算
- target.speedCur = target.speedBase;
- break;
- }
- case 3:{//冰冻
- target.speedCur = target.speedBase;
- break;
- }
- }
- }
- //英雄暂时无buff
- private updateHeroRemoveBuff(buff: BuffData,target: HeroData) {
- throw new Error("Method not implemented.");
- }
- }
|