DESKTOP-5RP3AKU\Jisol 05777799a3 提交开宝箱
2024-01-11 02:46:36 +08:00

126 lines
3.8 KiB
TypeScript

import { app } from "../App";
import { API, PlayerInfoOV, PlayerPetOV } from "../consts/API";
import BaseData from "./BaseData";
import { GBattleDataEnum } from "./GBattleData";
import GOnHookData from "./GOnHookData";
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);
}
//获取上阵的宠物
getTacticalData():PlayerPetOV[]{
return this.datas.filter(data => PlayerTacticalData.getIns().getTacticalInfo().indexOf(data.petId) >= 0);
}
//更新玩家宠物
async UpdatePlayerPet(){
//获取全部宠物
this.datas = await API.GetPlayerPets();
app.event.emit(GBattleDataEnum.UPDARE_ATTRIBUTE); //刷新属性
}
//选择宠物
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)
}
}
}