2 Commits

Author SHA1 Message Date
pan
18cbc1c75c feat(common): add talent and player collection data sync
新增玩家天赋、等级经验等收集数据的本地存储与云端同步逻辑,
添加对应的数据结构定义与初始化默认值,完善存档恢复流程。
2026-06-02 16:04:02 +08:00
pan
31df25033d refactor(SingletonModuleComp): 整理并简化游戏数据相关类型与初始化代码
1. 移除未使用的TalentType导入与冗余的collection字段定义
2. 统一所有对象属性的空格格式,修复代码风格问题
3. 简化overrideLocalDataWithRemote方法中的云端收集数据更新逻辑
4. 重构getGameDate方法,移除不必要的collection字段返回
5. 统一所有方法的命名风格与代码缩进格式
2026-06-02 16:00:41 +08:00

View File

@@ -15,8 +15,8 @@ import { FightSet } from "./config/GameSet";
* 用远程数据覆盖本地数据(统一方法) * 用远程数据覆盖本地数据(统一方法)
* @param remoteData 远程数据(云端或本地调试) * @param remoteData 远程数据(云端或本地调试)
*/ */
export interface GameDate{ export interface GameDate {
gold:number, gold: number,
timestamp?: number, // 用于比对本地与云端数据的最新状态 timestamp?: number, // 用于比对本地与云端数据的最新状态
collection?: { collection?: {
talents: Record<TalentType, number>, talents: Record<TalentType, number>,
@@ -42,28 +42,28 @@ export class SingletonModuleComp extends ecs.Comp {
/** 全局缓存的通用图集 */ /** 全局缓存的通用图集 */
uiconsAtlas: SpriteAtlas | null = null; uiconsAtlas: SpriteAtlas | null = null;
openid:string='' openid: string = ''
mission:any={ mission: any = {
status:0, //0:未开始 1:进行中 2:胜利 3:失败 status: 0, //0:未开始 1:进行中 2:胜利 3:失败
play:false, play: false,
pause:false, pause: false,
in_select:false, in_select: false,
in_fight:false, in_fight: false,
stop_mon_action:false, stop_mon_action: false,
}; };
data:any={ data: any = {
score:0, score: 0,
mission:1, mission: 1,
diamond:100, //商店购买 及 双倍奖励资源 diamond: 100, //商店购买 及 双倍奖励资源
gold:1000, gold: 1000,
task:0, task: 0,
noStop:false, noStop: false,
showInfo:true, showInfo: true,
} }
guides:any=[0,0,0,0,0] guides: any = [0, 0, 0, 0, 0]
current_guide:number=0 current_guide: number = 0
collection: { collection: {
talents: Record<TalentType, number>; talents: Record<TalentType, number>;
@@ -90,20 +90,20 @@ export class SingletonModuleComp extends ecs.Comp {
}; };
vmdata: any = { vmdata: any = {
game_over:false, game_over: false,
game_pause:false, game_pause: false,
mission_data:{ mission_data: {
mon_num:0,//怪物数量 mon_num: 0,//怪物数量
hero_num:0,//英雄数量 hero_num: 0,//英雄数量
hero_max_num:FightSet.HERO_MAX_NUM,//英雄可召唤上限 hero_max_num: FightSet.HERO_MAX_NUM,//英雄可召唤上限
hero_extend_max_num:FightSet.HERO_MAX_NUM + 1,//英雄可拓展上限 hero_extend_max_num: FightSet.HERO_MAX_NUM + 1,//英雄可拓展上限
wave_time_num:0,//波次时间 wave_time_num: 0,//波次时间
in_fight:false, in_fight: false,
fight_time:0,//战斗时间 fight_time: 0,//战斗时间
level:1,//关卡等级 level: 1,//关卡等级
max_mission:4,//最大关卡 max_mission: 4,//最大关卡
coin:0, coin: 0,
time:15*60,//游戏时间 time: 15 * 60,//游戏时间
}, },
scores: { scores: {
score: 0, // 基础得分 score: 0, // 基础得分
@@ -229,11 +229,11 @@ export class SingletonModuleComp extends ecs.Comp {
return gameDataSync.isWxClient(); return gameDataSync.isWxClient();
} }
updateCloudData(){ updateCloudData() {
return gameDataSync.updateCloudData(); return gameDataSync.updateCloudData();
} }
getCloudData(){ getCloudData() {
gameDataSync.getCloudData(); gameDataSync.getCloudData();
} }
public async overrideLocalDataWithRemote(cloudData: any) { public async overrideLocalDataWithRemote(cloudData: any) {
@@ -268,7 +268,7 @@ export class SingletonModuleComp extends ecs.Comp {
mLogger.error(this.debugMode, 'SMC', `[SMC]: 数据覆盖失败:`, error); mLogger.error(this.debugMode, 'SMC', `[SMC]: 数据覆盖失败:`, error);
} }
} }
getGameDate(){ getGameDate() {
let data: GameDate = { let data: GameDate = {
gold: this.vmdata.gold, gold: this.vmdata.gold,
collection: this.collection, collection: this.collection,
@@ -277,7 +277,7 @@ export class SingletonModuleComp extends ecs.Comp {
return data; return data;
} }
updateGold(gold:number, is_sync: boolean = true){ updateGold(gold: number, is_sync: boolean = true) {
this.vmdata.gold += gold; this.vmdata.gold += gold;
if (is_sync) { if (is_sync) {
gameDataSync.markDataDirty(); gameDataSync.markDataDirty();