/** * 数据管理器 * 统一管理所有数据类 */ import { BaseData } from "./BaseData"; import { LoginData } from "./LoginData"; import { PlayerData } from "./PlayerData"; import { AccountData } from "./AccountData"; import { MetaData } from "./MetaData"; import { NetTimeData } from "./NetTimeData"; import { ThemeData } from "./ThemeData"; import { WalletData } from "./WalletData"; import { ShopData } from "./ShopData"; import { OrderData } from "./OrderData"; import { GirlData } from "./GirlData"; import { EnvData } from "./EnvData"; import { GlobalData } from "./GlobalData"; import { AiCharacterData } from "./AiCharacterData"; /** * 集中定义数据ID,避免写错字符串 */ export enum DataId { Login = "login", // 登录数据 Player = "player", // 玩家数据 Account = "account", // 账号数据 Meta = "meta", // 元数据 NetTime = "netTime", // 网络时间数据 Theme = "theme", // 主题数据 Wallet = "wallet", // 钱包数据 Shop = "shop", // 商城数据 Order = "order", // 订单数据 Girl = "girl", // 技师数据 GirlBrief = "girlBrief", // 技师的简要数据 GirlDetail = "girlDetail", // 技师的详细数据 GirlUnlock = "girlUnlock", // 技师的解锁数据 GirlChat = "girlChat", // 技师的聊天数据 GirlFavorability = "girlFavorability", // 技师的好感度数据 Env = "env", // 环境数据 Global = "global", // 全局数据 AiCharacter = "aiCharacter", // Ai角色配置 } /** 构造器类型 */ type DataCtor = new () => T; export class DataManager { private static _I: DataManager | null = null; public static get I(): DataManager { if (!DataManager._I) DataManager._I = new DataManager(); return DataManager._I; } // 数据实例缓存 private _dataMap: Map = new Map(); // 数据ID到构造器的映射 private _config: Map = new Map(); private constructor() {} /** * 初始化:注册 数据ID → 构造器 */ public init(): void { console.log("[DataManager] 数据管理器初始化"); this.registerAll(); } /** * 注册 数据ID → 构造器 */ private registerAll(): void { this.register(DataId.Login, LoginData); this.register(DataId.Player, PlayerData); this.register(DataId.Account, AccountData); this.register(DataId.Meta, MetaData); this.register(DataId.NetTime, NetTimeData); this.register(DataId.Theme, ThemeData); this.register(DataId.Wallet, WalletData); this.register(DataId.Shop, ShopData); this.register(DataId.Order, OrderData); this.register(DataId.Girl, GirlData); this.register(DataId.Env, EnvData); this.register(DataId.Global, GlobalData); this.register(DataId.AiCharacter, AiCharacterData); } /** * 注册一个数据ID及其对应的构造器 */ private register(dataId: string, ctor: DataCtor): void { if (this._config.has(dataId)) { console.warn(`[DataManager] 重复注册数据ID: ${dataId},将覆盖旧构造器`); } this._config.set(dataId, ctor); } /** * 获取数据(已存在则直接返回;否则按配置自动实例化并缓存) */ public getDataById(dataId: string): T | null { // 先从缓存取 const cached = this._dataMap.get(dataId) as T | undefined; if (cached) return cached; // 缓存没有→ 查找构造器 const Ctor = this._config.get(dataId) as DataCtor | undefined; if (!Ctor) { console.warn(`[DataManager] 未找到 dataId 的构造器配置: ${dataId}`); return null; } // 动态创建 & init & 缓存 const instance = new Ctor(); // 若你的 BaseData.init 接受 dataId,可传入 instance.init?.(dataId); this._dataMap.set(dataId, instance); return instance; } /** * 移除数据 */ public removeData(dataId: string): boolean { const data = this._dataMap.get(dataId); if (data) { data.destroy?.(); this._dataMap.delete(dataId); return true; } return false; } /** * 重置所有数据 */ public resetAllData(): void { this._dataMap.forEach((data) => data.reset?.()); } /** * 清空所有数据 */ public clearAllData(): void { this._dataMap.forEach((data) => data.clear?.()); } /** * 销毁所有数据 */ public destroyAllData(): void { this._dataMap.forEach((data) => data.destroy?.()); this._dataMap.clear(); } }