import { app } from "../App"; import { API, PlayerInfoOV, PlayerPetOV } from "../consts/API"; import BaseData from "./BaseData"; import PlayerTacticalData from "./PlayerTacticalData"; import { ResourceUpdateType } from "./ResourceData"; export enum PlayerPetEvent{ UPDATE = "PlayerPetEvent_UPDATE", //刷新宠物 UPDATE_INFO = "PlayerPetEvent_UPDATE_INFO", //刷新宠物信息 UPDATE_ADD = "PlayerPetEvent_UPDATE_ADD", //添加宠物 UPDATE_MINUS = "PlayerPetEvent_UPDATE_MINUS", //减少宠物 } //玩家宠物数据 export default class PlayerPetData extends BaseData{ //玩家宠物列表 datas:PlayerPetOV[] = []; async onInit() { //更新玩家宠物 await this.UpdatePlayerPet(); } //获取全部宠物 getData():PlayerPetOV[]{ return this.datas; } //获取指定宠物 getPetIdData(petTbId:number,datas:PlayerPetOV[] = this.datas):PlayerPetOV[]{ return datas.filter(data => data.petTbId == petTbId); } //获取未上阵的宠物 getNoTacticalData():PlayerPetOV[]{ return this.datas.filter(data => PlayerTacticalData.getIns().getTacticalInfo().indexOf(data.petId) < 0); } //更新玩家宠物 async UpdatePlayerPet(){ //获取全部宠物 this.datas = await API.GetPlayerPets(); } //选择宠物 async SelectNovicePet(petId:number){ await API.SelectNovicePet(petId); //更新玩家宠物列表 await this.UpdatePlayerPet(); } //通过宠物Id找到宠物 petIdQueryPetInfo(petId:number):PlayerPetOV{ return this.datas.filter(item => item.petId == petId)[0] } //添加宠物 addPet(pet:PlayerPetOV){ this.datas.push(pet); } //刷新返回宠物 onUpdateOV(operation:number,resource:PlayerPetOV){ //如果没有刷新的宠物 则 返回 if(!resource) return; if(operation == ResourceUpdateType.UPDATE){ //更新资源 //找到需要被刷新的宠物 然后刷新 找不到则添加 let pet = this.datas.filter(pet => pet.petId == resource.petId)[0]; if(pet){ //更新数据 Object.assign(pet,resource); app.event.emit(PlayerPetEvent.UPDATE_INFO,pet) }else{ operation = ResourceUpdateType.ADD; this.onUpdateOV(operation,resource); } }else if(operation == ResourceUpdateType.ADD){ //查询如果没有这个宠物则添加 负责 刷新 let pet = this.datas.filter(pet => pet.petId != resource.petId)[0]; if(!pet){ //没有则添加 this.datas.push(resource); app.event.emit(PlayerPetEvent.UPDATE) app.event.emit(PlayerPetEvent.UPDATE_ADD,pet) }else{ operation = ResourceUpdateType.UPDATE; this.onUpdateOV(operation,resource); } }else if(operation == ResourceUpdateType.MINUS){ //删除的宠物 let delPet; //删除指定的宠物 this.datas = this.datas.filter(pet => { if(pet.petId == resource.petId){ delPet = pet; return false; } return true; }); app.event.emit(PlayerPetEvent.UPDATE) delPet && app.event.emit(PlayerPetEvent.UPDATE_MINUS,delPet) } } }