import { _decorator, Component, Node } from "cc"; import { ThemeService } from "../network/services/ThemeService"; import { GirlService } from "../network/services/GirlService"; import { ShopService } from "../network/services/ShopService"; import { DataManager, DataId } from "../data/DataManager"; import { ThemeData } from "../data/ThemeData"; import { GirlData } from "../data/GirlData"; import { ShopData } from "../data/ShopData"; import { logger } from "db://assets/Scripts/Main/Common/Logger"; import proto from "db://assets/Scripts/proto/proto.pb.js"; const { ccclass, property } = _decorator; @ccclass("MainController") export class MainController { private static _instance: MainController; public static get I(): MainController { if (!MainController._instance) { MainController._instance = new MainController(); } return MainController._instance; } private constructor() {} // 数据预加载状态标记 private isThemeDataPreloaded: boolean = false; private isDailyRecommendPreloaded: boolean = false; private isShopListPreloaded: boolean = false; /** * 初始化并预加载数据 */ async init(): Promise { logger.log("[MainController] 开始初始化并预加载数据"); // 并行预加载所有数据 await Promise.all([ this.preloadThemeData(), this.preloadDailyRecommend(), this.preloadShopList() ]); logger.log("[MainController] 数据预加载完成"); } /** * 预加载主题数据 */ async preloadThemeData(): Promise { if (this.isThemeDataPreloaded) { logger.log("[MainController] 主题数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载主题数据"); const reqData = {}; const res = await ThemeService.I.reqHallTheme(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const themeData = DataManager.I.getDataById(DataId.Theme); themeData.themes = res.data; this.isThemeDataPreloaded = true; logger.log("[MainController] 主题数据预加载成功"); return true; } else { logger.warn("[MainController] 主题数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 主题数据预加载异常:", error); return false; } } /** * 预加载每日推荐 */ async preloadDailyRecommend(): Promise { if (this.isDailyRecommendPreloaded) { logger.log("[MainController] 每日推荐数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载每日推荐数据"); const reqData = {}; const res = await GirlService.I.reqDailyRecommend(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setDailyRecommend(res.data); this.isDailyRecommendPreloaded = true; logger.log("[MainController] 每日推荐数据预加载成功"); return true; } else { logger.warn("[MainController] 每日推荐数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 每日推荐数据预加载异常:", error); return false; } } /** * 预加载商品列表 */ async preloadShopList(): Promise { if (this.isShopListPreloaded) { logger.log("[MainController] 商品列表数据已预加载"); return true; } try { logger.log("[MainController] 开始预加载商品列表数据"); const reqData = {}; const res = await ShopService.I.reqShopList(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const shopData = DataManager.I.getDataById(DataId.Shop); shopData.goods = res.data; this.isShopListPreloaded = true; logger.log("[MainController] 商品列表数据预加载成功"); return true; } else { logger.warn("[MainController] 商品列表数据预加载失败:", res); return false; } } catch (error) { logger.error("[MainController] 商品列表数据预加载异常:", error); return false; } } /** * 检查数据是否已预加载 */ isDataPreloaded(): boolean { return this.isThemeDataPreloaded && this.isDailyRecommendPreloaded && this.isShopListPreloaded; } /** * 获取预加载状态 */ getPreloadStatus() { return { themeData: this.isThemeDataPreloaded, dailyRecommend: this.isDailyRecommendPreloaded, shopList: this.isShopListPreloaded, allComplete: this.isDataPreloaded() }; } /** * 重置预加载状态(用于重新加载数据) */ resetPreloadStatus(): void { this.isThemeDataPreloaded = false; this.isDailyRecommendPreloaded = false; this.isShopListPreloaded = false; logger.log("[MainController] 预加载状态已重置"); } /** * 强制刷新主题数据 */ async refreshThemeData(): Promise { logger.log("[MainController] 开始强制刷新主题数据"); try { const reqData = {}; const res = await ThemeService.I.reqHallTheme(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const themeData = DataManager.I.getDataById(DataId.Theme); themeData.themes = res.data; this.isThemeDataPreloaded = true; logger.log("[MainController] 主题数据刷新成功"); return true; } else { logger.warn("[MainController] 主题数据刷新失败:", res); return false; } } catch (error) { logger.error("[MainController] 主题数据刷新异常:", error); return false; } } /** * 强制刷新每日推荐数据 */ async refreshDailyRecommend(): Promise { logger.log("[MainController] 开始强制刷新每日推荐数据"); try { const reqData = {}; const res = await GirlService.I.reqDailyRecommend(reqData); if (res && res.code === proto.cs.EnmRetCode.SUCCESS) { // 保存数据到DataManager const girlData = DataManager.I.getDataById(DataId.Girl); girlData.setDailyRecommend(res.data); this.isDailyRecommendPreloaded = true; logger.log("[MainController] 每日推荐数据刷新成功"); return true; } else { logger.warn("[MainController] 每日推荐数据刷新失败:", res); return false; } } catch (error) { logger.error("[MainController] 每日推荐数据刷新异常:", error); return false; } } }