JisolGame/JisolGameCocos/assets/script/data/PlayerTacticalData.ts

88 lines
2.4 KiB
TypeScript
Raw Normal View History

2023-11-16 02:44:43 +08:00
import { app } from "../App";
2023-11-15 18:38:00 +08:00
import { API, PlayerTacticalOV } 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-08 18:55:00 +08:00
import PlayerPetData from "./PlayerPetData";
2023-11-15 18:38:00 +08:00
2023-11-16 02:44:43 +08:00
export enum PlayerTacticalEvent{
//更新上阵信息
UPDATE_TACTICAL = "PlayerTacticalEvent_UPDATE_TACTICAL"
}
2023-11-15 18:38:00 +08:00
interface PlayerTacticalInfo extends PlayerTacticalOV{
roles:number[], //上阵的宠物顺序
}
//玩家阵法数据 (玩家最多上阵 9 个宠物)
export default class PlayerTacticalData extends BaseData{
//阵法信息
info:PlayerTacticalInfo;
async onInit() {
await this.onUpdateInfo();
}
2023-11-16 02:44:43 +08:00
//保存阵法信息
onSaveTacticalInfo(ov:PlayerTacticalOV){
2023-11-15 18:38:00 +08:00
if(!ov.tacticalData){
2023-11-16 19:10:19 +08:00
ov.tacticalData = JSON.stringify(this.getInitTacticalInfo());
2023-11-15 18:38:00 +08:00
}
this.info = {
...ov,
2024-01-08 18:55:00 +08:00
roles: JSON.parse(ov.tacticalData).map(id => PlayerPetData.getIns().petIdQueryPetInfo(id) ? id : 0),
2023-11-15 18:38:00 +08:00
}
2024-01-11 02:46:36 +08:00
app.event.emit(GBattleDataEnum.UPDARE_ATTRIBUTE); //刷新属性
2023-11-16 02:44:43 +08:00
//通知阵法信息已更新
app.event.emit(PlayerTacticalEvent.UPDATE_TACTICAL);
2024-01-11 02:46:36 +08:00
2023-11-16 02:44:43 +08:00
}
//更新阵法信息
async onUpdateInfo(){
this.onSaveTacticalInfo(await API.GetPlayerTactical());
2023-11-15 18:38:00 +08:00
}
//更新上阵
2023-11-17 02:57:46 +08:00
async UpdateTactical(roles:number[]):Promise<boolean>{
//如果阵法一样则不更新
if(this.info.tacticalData == JSON.stringify(roles)) return false;
2023-11-15 18:38:00 +08:00
this.info.roles = roles;
this.info.tacticalData = JSON.stringify(this.info.roles);
2023-11-16 02:44:43 +08:00
//上传到服务器 并且保存
this.onSaveTacticalInfo(await API.SetPlayerTactical(this.info));
2023-11-17 02:57:46 +08:00
return true;
2023-11-16 02:44:43 +08:00
}
//修改指定位置的上阵 上阵下标,上阵的宠物Id
async UpdateIndexTactical(index:number,petId:number){
2024-01-08 18:55:00 +08:00
this.info.roles = this.info.roles.map(id => petId == id ? 0 : id);
2023-11-16 02:44:43 +08:00
this.info.roles[index] = petId;
await this.UpdateTactical(this.info.roles);
2023-11-15 18:38:00 +08:00
}
//获取指定位置
getItem(index:number){
return this.info.roles[index];
}
2024-01-08 18:55:00 +08:00
//获取宠物的阵法下标
getItemIndex(roleId:number){
return this.info.roles.indexOf(roleId);
}
2023-11-15 18:38:00 +08:00
//获取初始化上阵信息
2023-11-16 19:10:19 +08:00
getInitTacticalInfo():number[]{
2023-11-15 18:38:00 +08:00
return [0,0,0,0,0,0,0,0,0]
}
2023-11-16 19:10:19 +08:00
getTacticalInfo():number[]{
return this.info.roles;
}
2023-11-15 18:38:00 +08:00
}