144 lines
4.5 KiB
TypeScript
Raw Permalink Normal View History

2023-11-27 02:10:42 +08:00
import { app } from "../App";
2023-11-13 02:37:29 +08:00
import { API, PlayerInfoOV, PlayerPetOV } from "../consts/API";
import BaseData from "./BaseData";
2024-01-11 02:46:36 +08:00
import { GBattleDataEnum } from "./GBattleData";
import GOnHookData from "./GOnHookData";
2024-01-15 18:45:45 +08:00
import PetEquipData, { PetEquipDataEnum } from "./PetEquipData";
2023-11-27 02:10:42 +08:00
import PlayerTacticalData from "./PlayerTacticalData";
import { ResourceUpdateType } from "./ResourceData";
2023-11-13 02:37:29 +08:00
2023-11-27 02:10:42 +08:00
export enum PlayerPetEvent{
UPDATE = "PlayerPetEvent_UPDATE", //刷新宠物
UPDATE_INFO = "PlayerPetEvent_UPDATE_INFO", //刷新宠物信息
UPDATE_ADD = "PlayerPetEvent_UPDATE_ADD", //添加宠物
UPDATE_MINUS = "PlayerPetEvent_UPDATE_MINUS", //减少宠物
}
2023-11-13 02:37:29 +08:00
//玩家宠物数据
export default class PlayerPetData extends BaseData{
//玩家宠物列表
datas:PlayerPetOV[] = [];
async onInit() {
//更新玩家宠物
await this.UpdatePlayerPet();
2024-01-15 18:45:45 +08:00
app.event.on(PetEquipDataEnum.UPDATE_FORGING_INFO,this.onUpdateForgingInfo,this);
}
//更新锻造等级 (宠物等级)
onUpdateForgingInfo(){
this.datas.forEach(item => item.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(item.petId));
app.event.emit(PlayerPetEvent.UPDATE)
2023-11-13 02:37:29 +08:00
}
//获取全部宠物
2023-11-16 02:44:43 +08:00
getData():PlayerPetOV[]{
2023-11-13 02:37:29 +08:00
return this.datas;
}
2023-11-27 02:10:42 +08:00
//获取指定宠物
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);
}
2024-01-11 02:46:36 +08:00
//获取上阵的宠物
getTacticalData():PlayerPetOV[]{
return this.datas.filter(data => PlayerTacticalData.getIns().getTacticalInfo().indexOf(data.petId) >= 0);
}
2023-11-13 02:37:29 +08:00
//更新玩家宠物
async UpdatePlayerPet(){
//获取全部宠物
2024-01-15 18:45:45 +08:00
let datas = await API.GetPlayerPets();
datas.forEach(item => item.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(item.petId));
this.datas = datas;
2024-01-11 02:46:36 +08:00
app.event.emit(GBattleDataEnum.UPDARE_ATTRIBUTE); //刷新属性
2023-11-13 02:37:29 +08:00
}
//选择宠物
async SelectNovicePet(petId:number){
await API.SelectNovicePet(petId);
//更新玩家宠物列表
await this.UpdatePlayerPet();
}
2023-11-16 02:44:43 +08:00
//通过宠物Id找到宠物
petIdQueryPetInfo(petId:number):PlayerPetOV{
return this.datas.filter(item => item.petId == petId)[0]
}
2023-11-17 18:29:39 +08:00
//添加宠物
addPet(pet:PlayerPetOV){
2024-01-15 18:45:45 +08:00
pet.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(pet.petId);
2023-11-17 18:29:39 +08:00
this.datas.push(pet);
}
2023-11-27 02:10:42 +08:00
//刷新返回宠物
onUpdateOV(operation:number,resource:PlayerPetOV){
2024-01-15 18:45:45 +08:00
2023-11-27 02:10:42 +08:00
//如果没有刷新的宠物 则 返回
if(!resource) return;
2024-01-17 00:05:44 +08:00
resource.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(resource.petId);
2023-11-27 02:10:42 +08:00
if(operation == ResourceUpdateType.UPDATE){
//更新资源
//找到需要被刷新的宠物 然后刷新 找不到则添加
2024-01-18 03:19:43 +08:00
let pet1 = this.datas.filter(pet => pet.petId == resource.petId)[0];
if(pet1){
2023-11-27 02:10:42 +08:00
//更新数据
2024-01-18 03:19:43 +08:00
Object.assign(pet1,resource);
app.event.emit(PlayerPetEvent.UPDATE_INFO,pet1)
2023-11-27 02:10:42 +08:00
}else{
operation = ResourceUpdateType.ADD;
this.onUpdateOV(operation,resource);
}
}else if(operation == ResourceUpdateType.ADD){
//查询如果没有这个宠物则添加 负责 刷新
2024-01-18 03:19:43 +08:00
let pet1 = this.datas.filter(pet => pet.petId == resource.petId)[0];
if(!pet1){
2023-11-27 02:10:42 +08:00
//没有则添加
this.datas.push(resource);
app.event.emit(PlayerPetEvent.UPDATE)
2024-01-18 03:19:43 +08:00
app.event.emit(PlayerPetEvent.UPDATE_ADD,resource)
2023-11-27 02:10:42 +08:00
}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)
}
}
2023-11-13 02:37:29 +08:00
}