import { GOnHookPet } from "../../../../../extensions/ngame/assets/ngame/message/proto"; import Singleton from "../../../../../extensions/ngame/assets/ngame/util/Singleton"; import { app } from "../../../App"; import GBattleModeManager, { BattleMode } from "../../../battle/GBattleModeManager"; import { PlayerPetOV } from "../../../consts/API"; import { GAPI } from "../../../consts/GAPI"; import GOnHookData from "../../../data/GOnHookData"; import PlayerPetData from "../../../data/PlayerPetData"; import { GUI } from "../../../ui/UIConfig"; export enum GOnHookManagerEvent{ //添加死亡野怪 ADD_KILL_SREEP = "GOnHookManagerEvent_ADD_KILL_SREEP", //删除死亡野怪 DEL_KILL_SREEP = "GOnHookManagerEvent_DEL_KILL_SREEP", //重置数据 RESET_DATA = "GOnHookManagerEvent_RESET_DATA", //删除死亡野怪 UPDATE_MAP = "GOnHookManagerEvent_UPDATE_MAP" } //游戏模式 OnHook 管理器 export default class GOnHookManager extends Singleton{ //野怪列表 _sreeps:Map = new Map(); get sreeps(){ //如果没有野怪了 则 向服务器生成 if(!this._sreeps || !(this._sreeps.size)){ //生成 this.onSpawnSreeps(); return new Map(); } return this._sreeps; } set sreeps(data:Map){ this._sreeps = data; } //已经死亡的野怪列表 killSreeps:GOnHookPet[] = []; //生成野怪 onSpawnSreeps(){ GAPI.GOnHookSpawnCreeps().then(data => { data.pets.forEach(pet => { this._sreeps.set(pet.key,pet as GOnHookPet); }) }); } //获取下一只野怪 getNextCreeps(){ if(!this.sreeps) return; let creeps = this.sreeps.get(this.sreeps.keys().next()?.value) return creeps; } //野怪死亡 onKillSreeps(creeps:GOnHookPet){ this.sreeps.delete(creeps.key); //记入死亡 //判断是否在死亡中如果在则跳出 if(this.killSreeps.indexOf(creeps) > -1){ return; } this.killSreeps.push(creeps); //通知添加死亡野怪 app.event.emit(GOnHookManagerEvent.ADD_KILL_SREEP,creeps); console.log(`GOnHookManager : ${creeps.key} 宠物死亡 可进行捕捉 出售`); } //捕捉野怪 async onCatchCreeps(creeps:GOnHookPet):Promise{ let index; if((index = this.killSreeps.indexOf(creeps)) < 0){ app.layer.Open(GUI.Tips,{text:"不可捕捉该野怪"}); return false; } //删除 this.killSreeps.splice(index,1); //通知添加野怪被删除 app.event.emit(GOnHookManagerEvent.DEL_KILL_SREEP,creeps); let pet:PlayerPetOV = await GAPI.GOnHookCatchCreeps(creeps.key); //保存宠物 if(pet){ PlayerPetData.getIns().addPet(pet); } return !!pet; } //出售野怪 async onSellCreeps(creeps:GOnHookPet):Promise{ let index; if((index = this.killSreeps.indexOf(creeps)) < 0){ app.layer.Open(GUI.Tips,{text:"不可出售当前野怪"}); return false; } //删除 this.killSreeps.splice(index,1); app.event.emit(GOnHookManagerEvent.DEL_KILL_SREEP,creeps); // //通知添加野怪被删除 // if(await GAPI.GOnHookSellCreeps(creeps.key)){ // return true; // }else{ // } return await GAPI.GOnHookSellCreeps(creeps.key); } //重置数据 onResetData(){ this._sreeps = new Map(); this.killSreeps = []; app.event.emit(GOnHookManagerEvent.RESET_DATA); } //切换场景 async setMap(mapId:number){ await GOnHookData.getIns().setMap(mapId); //通知地图已切换 app.event.emit(GOnHookManagerEvent.UPDATE_MAP); //重置数据 this.onResetData(); //重置场景 GBattleModeManager.getIns().Open(BattleMode.OnHook,true); } }