From cd45e1783a4af3571c49c096778f3d898b8346aa Mon Sep 17 00:00:00 2001 From: chen wei bo <1025839511@qq.com> Date: Thu, 14 Aug 2025 16:30:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/Scripts/Sub/UI/PreloadUI.ts | 4 + assets/Scripts/chat18x/data/BaseData.ts | 78 ++++++++++++ assets/Scripts/chat18x/data/BaseData.ts.meta | 9 ++ assets/Scripts/chat18x/data/DataManager.ts | 119 ++++++++++++++++++ .../Scripts/chat18x/data/DataManager.ts.meta | 9 ++ assets/Scripts/chat18x/data/LoginData.ts | 32 +++++ assets/Scripts/chat18x/data/LoginData.ts.meta | 9 ++ assets/Scripts/chat18x/data/PlayerData.ts | 32 +++++ .../Scripts/chat18x/data/PlayerData.ts.meta | 9 ++ 9 files changed, 301 insertions(+) create mode 100644 assets/Scripts/chat18x/data/BaseData.ts create mode 100644 assets/Scripts/chat18x/data/BaseData.ts.meta create mode 100644 assets/Scripts/chat18x/data/DataManager.ts create mode 100644 assets/Scripts/chat18x/data/DataManager.ts.meta create mode 100644 assets/Scripts/chat18x/data/LoginData.ts create mode 100644 assets/Scripts/chat18x/data/LoginData.ts.meta create mode 100644 assets/Scripts/chat18x/data/PlayerData.ts create mode 100644 assets/Scripts/chat18x/data/PlayerData.ts.meta diff --git a/assets/Scripts/Sub/UI/PreloadUI.ts b/assets/Scripts/Sub/UI/PreloadUI.ts index cc572512..34c71392 100644 --- a/assets/Scripts/Sub/UI/PreloadUI.ts +++ b/assets/Scripts/Sub/UI/PreloadUI.ts @@ -24,6 +24,7 @@ import Utils from "../../Main/Common/Utils"; import { InnerMsgCode } from "../../Main/Config/InnerMsgCode"; import { promptItem } from "../Item/promptItem"; import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils"; +import { DataManager } from "../../chat18x/data/DataManager"; const { ccclass, property } = _decorator; @ccclass("PreloadUI") @@ -55,6 +56,9 @@ export class PreloadUI extends Component { this.jinduFilled.fillRange = 0; //this.btnLogin.node.active = false; + + // 初始化数据层 + DataManager.I.init() this.preloadFiles(); diff --git a/assets/Scripts/chat18x/data/BaseData.ts b/assets/Scripts/chat18x/data/BaseData.ts new file mode 100644 index 00000000..c10559a4 --- /dev/null +++ b/assets/Scripts/chat18x/data/BaseData.ts @@ -0,0 +1,78 @@ +/** + * 数据类基类 + * 提供数据类的生命周期管理和基础功能 + */ +export class BaseData { + + /** 是否已初始化 */ + protected _isInitialized: boolean = false; + + /** 是否已销毁 */ + protected _isDestroyed: boolean = false; + + /** 数据ID */ + protected _dataId: string = ''; + + /** + * 初始化数据 + * @param dataId 数据ID + */ + public init(dataId?: string): void{ + if (this._isInitialized) return; + this._isInitialized = true; + if (dataId) { + this._dataId = dataId; + } + } + + /** + * 重置数据到初始状态 + */ + public reset(): void{ + + } + + /** + * 清空数据内容 + */ + public clear(): void{ + + } + + /** + * 销毁数据对象 + */ + public destroy(): void{ + if (this._isDestroyed) return; + this.clear(); + this._isDestroyed = true; + } + + /** + * 获取数据ID + */ + public getDataId(): string { + return this._dataId; + } + + /** + * 设置数据ID + */ + public setDataId(dataId: string): void { + this._dataId = dataId; + } + + /** + * 是否已初始化 + */ + public isInitialized(): boolean { + return this._isInitialized; + } + + /** + * 是否已销毁 + */ + public isDestroyed(): boolean { + return this._isDestroyed; + } +} \ No newline at end of file diff --git a/assets/Scripts/chat18x/data/BaseData.ts.meta b/assets/Scripts/chat18x/data/BaseData.ts.meta new file mode 100644 index 00000000..b273d302 --- /dev/null +++ b/assets/Scripts/chat18x/data/BaseData.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "16b07bae-92dc-42b0-bb68-493bb15d8099", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/chat18x/data/DataManager.ts b/assets/Scripts/chat18x/data/DataManager.ts new file mode 100644 index 00000000..55ed3a83 --- /dev/null +++ b/assets/Scripts/chat18x/data/DataManager.ts @@ -0,0 +1,119 @@ +/** + * 数据管理器 + * 统一管理所有数据类 + */ +import { BaseData } from "./BaseData"; +import { LoginData } from "./LoginData"; +import { PlayerData } from "./PlayerData"; + +/** + * 集中定义数据ID,避免写错字符串 + */ +export enum DataId { + Login = "login", + Player = "player", +} + +/** 构造器类型 */ +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.register(DataId.Login, LoginData); + this.register(DataId.Player, PlayerData); + + } + + /** + * 注册一个数据ID及其对应的构造器 + */ + public 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 { + // 1) 先从缓存取 + const cached = this._dataMap.get(dataId) as T | undefined; + if (cached) return cached; + + // 2) 缓存没有→ 查找构造器 + const Ctor = this._config.get(dataId) as DataCtor | undefined; + if (!Ctor) { + console.warn(`[DataManager] 未找到 dataId 的构造器配置: ${dataId}`); + return null; + } + + // 3) 动态创建 & init & 缓存 + const instance = new Ctor(); + // 若你的 BaseData.init 接受 dataId,可传入 + instance.init?.(dataId); + this._dataMap.set(dataId, instance); + + console.log(`[DataManager] 实例化并缓存数据: ${dataId}`); + return instance; + } + + /** + * 移除数据 + */ + public removeData(dataId: string): boolean { + const data = this._dataMap.get(dataId); + if (data) { + data.destroy?.(); + this._dataMap.delete(dataId); + console.log(`[DataManager] 移除数据: ${dataId}`); + return true; + } + return false; + } + + /** + * 重置所有数据 + */ + public resetAllData(): void { + console.log("[DataManager] 重置所有数据"); + this._dataMap.forEach((data) => data.reset?.()); + } + + /** + * 清空所有数据 + */ + public clearAllData(): void { + console.log("[DataManager] 清空所有数据"); + this._dataMap.forEach((data) => data.clear?.()); + } + + /** + * 销毁所有数据 + */ + public destroyAllData(): void { + console.log("[DataManager] 销毁所有数据"); + this._dataMap.forEach((data) => data.destroy?.()); + this._dataMap.clear(); + } +} diff --git a/assets/Scripts/chat18x/data/DataManager.ts.meta b/assets/Scripts/chat18x/data/DataManager.ts.meta new file mode 100644 index 00000000..b5bb04b1 --- /dev/null +++ b/assets/Scripts/chat18x/data/DataManager.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "6ecd13c4-1240-4d6a-b783-5fca62a8f32e", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/chat18x/data/LoginData.ts b/assets/Scripts/chat18x/data/LoginData.ts new file mode 100644 index 00000000..cdbf926e --- /dev/null +++ b/assets/Scripts/chat18x/data/LoginData.ts @@ -0,0 +1,32 @@ +/** + * 登录数据 + */ +import { BaseData } from "./BaseData"; + +export class LoginData extends BaseData { + private _name: string = ''; + private _score: number = 0; + + public reset(): void { + this._name = ''; + this._score = 0; + } + + public clear(): void { + this._name = ''; + this._score = 0; + } + + public destroy(): void { + super.destroy(); + // 这里可以做额外释放资源的操作 + } + + public setName(name: string): void { + this._name = name; + } + + public getName(): string { + return this._name; + } +} \ No newline at end of file diff --git a/assets/Scripts/chat18x/data/LoginData.ts.meta b/assets/Scripts/chat18x/data/LoginData.ts.meta new file mode 100644 index 00000000..15e19c08 --- /dev/null +++ b/assets/Scripts/chat18x/data/LoginData.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "2095514d-fe00-441c-aab1-fc6059334eec", + "files": [], + "subMetas": {}, + "userData": {} +} diff --git a/assets/Scripts/chat18x/data/PlayerData.ts b/assets/Scripts/chat18x/data/PlayerData.ts new file mode 100644 index 00000000..be2e92f4 --- /dev/null +++ b/assets/Scripts/chat18x/data/PlayerData.ts @@ -0,0 +1,32 @@ +/** + * 玩家数据 + */ +import { BaseData } from "./BaseData"; + +export class PlayerData extends BaseData { + private _name: string = ''; + private _score: number = 0; + + public reset(): void { + this._name = ''; + this._score = 0; + } + + public clear(): void { + this._name = ''; + this._score = 0; + } + + public destroy(): void { + super.destroy(); + // 这里可以做额外释放资源的操作 + } + + public setName(name: string): void { + this._name = name; + } + + public getName(): string { + return this._name; + } +} \ No newline at end of file diff --git a/assets/Scripts/chat18x/data/PlayerData.ts.meta b/assets/Scripts/chat18x/data/PlayerData.ts.meta new file mode 100644 index 00000000..6e8ade67 --- /dev/null +++ b/assets/Scripts/chat18x/data/PlayerData.ts.meta @@ -0,0 +1,9 @@ +{ + "ver": "4.0.24", + "importer": "typescript", + "imported": true, + "uuid": "413f999c-d31c-4a06-97d6-116de37d3077", + "files": [], + "subMetas": {}, + "userData": {} +}