mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-26 19:34:47 +00:00
144 lines
4.5 KiB
TypeScript
144 lines
4.5 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 PetEquipData, { PetEquipDataEnum } from "./PetEquipData";
|
|
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();
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
//获取全部宠物
|
|
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(){
|
|
//获取全部宠物
|
|
let datas = await API.GetPlayerPets();
|
|
|
|
datas.forEach(item => item.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(item.petId));
|
|
this.datas = datas;
|
|
|
|
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){
|
|
pet.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(pet.petId);
|
|
this.datas.push(pet);
|
|
}
|
|
|
|
//刷新返回宠物
|
|
onUpdateOV(operation:number,resource:PlayerPetOV){
|
|
|
|
|
|
//如果没有刷新的宠物 则 返回
|
|
if(!resource) return;
|
|
|
|
resource.petLevel = PetEquipData.getIns().getForgingBenchPetLevel(resource.petId);
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|