云环境和本地调试 添加
This commit is contained in:
@@ -12,8 +12,9 @@ import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ec
|
||||
import { UIID } from "../common/config/GameUIConfig";
|
||||
import { LoadingViewComp } from "./view/LoadingViewComp";
|
||||
import { smc } from "../common/SingletonModuleComp";
|
||||
import { WxCloudApi } from "../wx_clound_client_api/WxCloudApi";
|
||||
|
||||
import { WxCloudApi, UserGameData } from "../wx_clound_client_api/WxCloudApi";
|
||||
import { GameDataSyncManager } from "../common/GameDataSyncManager";
|
||||
import { Test } from "../common/Test";
|
||||
|
||||
// import {data} from "../data/data";
|
||||
/**
|
||||
@@ -47,18 +48,20 @@ export class Initialize extends ecs.Entity {
|
||||
/** 加载自定义内容(可选) */
|
||||
private loadCustom(queue: AsyncQueue) {
|
||||
queue.push(async (next: NextFunction, params: any, args: any) => {
|
||||
// 加载多语言对应字体
|
||||
oops.res.load("language/font/" + oops.language.current, () => {
|
||||
// 加载本地英雄数据
|
||||
this.loadHeroDataFromLocal();
|
||||
// 判断是否为微信客户端,是的话才加载云端数据
|
||||
if (this.isWxClient()) {
|
||||
this.loadWxDataFromCloud();
|
||||
}
|
||||
next();
|
||||
});
|
||||
try {
|
||||
// 加载多语言对应字体
|
||||
oops.res.load("language/font/" + oops.language.current, async () => {
|
||||
// 统一的数据加载流程
|
||||
await this.loadGameDataUnified();
|
||||
|
||||
next();
|
||||
});
|
||||
//加载精灵配置表
|
||||
// oops.res.load("config/game/heros", next);
|
||||
} catch (error) {
|
||||
console.error("[Initialize]: 自定义内容加载失败:", error);
|
||||
next(); // 即使失败也要继续,不阻塞游戏启动
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -96,42 +99,87 @@ export class Initialize extends ecs.Entity {
|
||||
return typeof wx !== 'undefined' && typeof (wx as any).getSystemInfoSync === 'function';
|
||||
}
|
||||
|
||||
private loadWxDataFromCloud() {
|
||||
WxCloudApi.login().then(loginRes=>{
|
||||
console.log("login res", loginRes);
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 从本地存储加载游戏数据
|
||||
* 统一的游戏数据加载流程
|
||||
* 微信客户端:使用云端数据
|
||||
* 非微信客户端:使用本地调试数据
|
||||
*/
|
||||
private loadHeroDataFromLocal() {
|
||||
// 检查本地存储状态
|
||||
const storageStatus = smc.checkLocalStorage();
|
||||
|
||||
if (storageStatus.isFirstTime) {
|
||||
console.log("[Initialize]: 检测到首次启动游戏");
|
||||
}
|
||||
|
||||
// 使用SingletonModuleComp的加载方法
|
||||
// loadGameData方法已经包含了首次启动的处理逻辑
|
||||
const success = smc.loadGameData();
|
||||
if (success) {
|
||||
console.log("[Initialize]: 游戏数据加载完成");
|
||||
} else {
|
||||
console.log("[Initialize]: 游戏数据加载失败,使用默认配置");
|
||||
// 如果加载失败,初始化默认数据并保存
|
||||
smc.initDefaultData();
|
||||
smc.saveGameData();
|
||||
}
|
||||
|
||||
// 再次检查存储状态,确认数据已保存
|
||||
if (storageStatus.isFirstTime) {
|
||||
const newStatus = smc.checkLocalStorage();
|
||||
if (newStatus.hasFightHeros && newStatus.hasHeros && newStatus.hasGameData) {
|
||||
console.log("[Initialize]: 首次启动数据保存成功");
|
||||
private async loadGameDataUnified() {
|
||||
try {
|
||||
console.log("[Initialize]: 开始统一数据加载流程...");
|
||||
|
||||
if (this.isWxClient()) {
|
||||
// 微信客户端:加载云端数据
|
||||
console.log("[Initialize]: 检测到微信客户端,使用云端数据");
|
||||
await this.loadFromCloud();
|
||||
} else {
|
||||
console.warn("[Initialize]: 首次启动数据保存可能失败");
|
||||
// 非微信客户端:使用本地调试数据
|
||||
console.log("[Initialize]: 非微信客户端,使用本地调试数据");
|
||||
await this.loadFromLocalDebug();
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error("[Initialize]: 统一数据加载失败:", error);
|
||||
// 失败时使用默认数据 游戏需要退出
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从云端加载数据(微信客户端)
|
||||
*/
|
||||
private async loadFromCloud() {
|
||||
try {
|
||||
// 1. 初始化微信云环境
|
||||
this.initWxCloudEnv();
|
||||
|
||||
// 2. 登录并获取云端数据
|
||||
const loginResult = await WxCloudApi.login();
|
||||
const response = loginResult.result;
|
||||
|
||||
if (response.code === 200) {
|
||||
console.log("[Initialize]: 云端登录成功");
|
||||
const cloudData = response.data;
|
||||
|
||||
// 3. 用云端数据覆盖本地数据
|
||||
GameDataSyncManager.getInstance().overrideLocalDataWithRemote(cloudData, "云端");
|
||||
} else {
|
||||
console.warn("[Initialize]: 云端登录失败:", response.msg);
|
||||
// 登录失败时使用本地数据 游戏需要退出
|
||||
console.log("[Initialize]: 云端登录失败:", response.msg);
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error("[Initialize]: 云端数据加载异常:", error);
|
||||
// 异常时使用本地数据 游戏需要退出
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从本地调试数据加载(非微信客户端)
|
||||
*/
|
||||
private async loadFromLocalDebug() {
|
||||
try {
|
||||
// 使用本地调试API,模拟云端接口
|
||||
const loginResult = new Test().load_data_from_local()
|
||||
|
||||
// 用本地调试数据覆盖客户端数据
|
||||
GameDataSyncManager.getInstance().overrideLocalDataWithRemote(loginResult, "本地调试");
|
||||
} catch (error) {
|
||||
console.error("[Initialize]: 本地调试数据加载异常:", error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化微信云环境
|
||||
*/
|
||||
private initWxCloudEnv() {
|
||||
try {
|
||||
// 请替换为您的实际云环境ID
|
||||
const cloudEnvId = "cloud1-6gknw0qk911036d8"; // TODO: 配置您的云环境ID
|
||||
WxCloudApi.init(cloudEnvId);
|
||||
console.log("[Initialize]: 微信云环境初始化完成");
|
||||
} catch (error) {
|
||||
console.error("[Initialize]: 微信云环境初始化失败:", error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user