修改ConfigManager,定义配置数据继承体系
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { _decorator, sys } from "cc";
|
||||
import { Language } from "../../schema/schema";
|
||||
import ConfigManager from "../../chat18x/manager/ConfigManager";
|
||||
import { ConfigManager } from "../../chat18x/manager/ConfigManager";
|
||||
import { CommonConfig } from "../Config/CommonConfig";
|
||||
import li_EventManager from "./li_EventManager";
|
||||
import Utils from "./Utils";
|
||||
|
||||
@@ -32,7 +32,7 @@ import { WalletData } from "../../chat18x/data/WalletData";
|
||||
import { AccountData } from "../../chat18x/data/AccountData";
|
||||
import { MetaData } from "../../chat18x/data/MetaData";
|
||||
import { NetTimeData } from "../../chat18x/data/NetTimeData";
|
||||
import ConfigManager from "../../chat18x/manager/ConfigManager";
|
||||
import { ConfigManager } from "../../chat18x/manager/ConfigManager";
|
||||
import { AppConfig } from "db://assets/Scripts/chat18x/config/env/appConfig";
|
||||
import DeviceIdService from "db://assets/Scripts/chat18x/foundation/identity/DeviceIdService";
|
||||
import MachineInfoService from "db://assets/Scripts/chat18x/foundation/identity/MachineInfoService";
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
import li_BaseView from "../../Main/Common/li_BaseView";
|
||||
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
|
||||
import AudioManager from "../../Main/Manager/AudioManager";
|
||||
import ConfigManager from "../../chat18x/manager/ConfigManager";
|
||||
import { ConfigManager } from "../../chat18x/manager/ConfigManager";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
|
||||
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* 配置数据类基类
|
||||
* 提供配置数据类的生命周期管理和基础功能
|
||||
*/
|
||||
export class BaseConfig {
|
||||
|
||||
/** 是否已初始化 */
|
||||
protected _isInitialized: boolean = false;
|
||||
|
||||
/** 是否已销毁 */
|
||||
protected _isDestroyed: boolean = false;
|
||||
|
||||
/** 配置数据ID */
|
||||
protected _configId: string = '';
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
* @param configId 配置数据ID
|
||||
*/
|
||||
public init(configId?: string): void{
|
||||
if (this._isInitialized) return;
|
||||
this._isInitialized = true;
|
||||
if (configId) {
|
||||
this._configId = configId;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置数据到初始状态
|
||||
*/
|
||||
public reset(): void{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空数据内容
|
||||
*/
|
||||
public clear(): void{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁数据对象
|
||||
*/
|
||||
public destroy(): void{
|
||||
if (this._isDestroyed) return;
|
||||
this.clear();
|
||||
this._isDestroyed = true;
|
||||
this._isInitialized = null;
|
||||
this._configId = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置数据ID
|
||||
*/
|
||||
public getConfigId(): string {
|
||||
return this._configId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置配置数据ID
|
||||
*/
|
||||
public setConfigId(configId: string): void {
|
||||
this._configId = configId;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否已初始化
|
||||
*/
|
||||
public isInitialized(): boolean {
|
||||
return this._isInitialized;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否已销毁
|
||||
*/
|
||||
public isDestroyed(): boolean {
|
||||
return this._isDestroyed;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有配置
|
||||
*/
|
||||
protected getAllConfig(): any | null {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "f7335af0-3281-4f2e-8f8e-c59e869183f6",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* 主题配置
|
||||
*/
|
||||
import { BaseConfig } from "./BaseConfig";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
|
||||
export class ThemeConfig extends BaseConfig {
|
||||
|
||||
public reset(): void {
|
||||
|
||||
}
|
||||
|
||||
public clear(): void {
|
||||
|
||||
}
|
||||
|
||||
public destroy(): void {
|
||||
super.destroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有配置
|
||||
*/
|
||||
protected getAllConfig(): any | null {
|
||||
return ConfigManager.tables.TbThemes;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取配置,根据 id
|
||||
*/
|
||||
protected getConfigById(id: number): any | null {
|
||||
let allData = this.getAllConfig();
|
||||
if (!allData) return null;
|
||||
return allData.get(id);
|
||||
}
|
||||
|
||||
/** 根据主题 id 获取多语言键 */
|
||||
public getLanKeyById(id: number): string | null {
|
||||
let oneData = this.getConfigById(id);
|
||||
if (!oneData) return null;
|
||||
return oneData.key;
|
||||
}
|
||||
|
||||
/** 根据主题 id 获取主题名称 */
|
||||
public getNameById(id: number): string | null {
|
||||
let oneData = this.getConfigById(id);
|
||||
if (!oneData) return null;
|
||||
return oneData.name;
|
||||
}
|
||||
|
||||
/** 根据主题 id 获取主题枚举 */
|
||||
public getCategoryById(id: number): number | null {
|
||||
let oneData = this.getConfigById(id);
|
||||
if (!oneData) return null;
|
||||
return oneData.category;
|
||||
}
|
||||
|
||||
/** 根据主题 id 获取是否解锁 */
|
||||
public getIsReleaseById(id: number): boolean | null {
|
||||
let oneData = this.getConfigById(id);
|
||||
if (!oneData) return null;
|
||||
return oneData.isRelease;
|
||||
}
|
||||
|
||||
/** 根据主题 id 获取图片路径 */
|
||||
public getPathById(id: number): string | null {
|
||||
let oneData = this.getConfigById(id);
|
||||
if (!oneData) return null;
|
||||
return oneData.path;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.24",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "161d34f2-7ca6-4f19-8dba-1f597dd28c4e",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
* 统一管理所有API相关的配置信息
|
||||
*/
|
||||
|
||||
import ConfigManager from "../manager/ConfigManager";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
|
||||
export interface AIConfig {
|
||||
/** API密钥 */
|
||||
|
||||
@@ -6,7 +6,7 @@ import { ChatHistoryManager } from "../manager/ChatHistoryManager";
|
||||
import { ApiConfig } from "./ApiConfigLoader";
|
||||
import { ErrorHandler, ErrorType } from "../utils/ErrorHandler";
|
||||
import { VideoEmotion } from "../../schema/schema";
|
||||
import ConfigManager from "../manager/ConfigManager";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
|
||||
import Utils from "../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { AiCharacter } from "../../schema/schema";
|
||||
import ConfigManager from "../manager/ConfigManager";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
|
||||
/**
|
||||
* 角色配置映射
|
||||
|
||||
@@ -46,6 +46,8 @@ export class BaseData {
|
||||
if (this._isDestroyed) return;
|
||||
this.clear();
|
||||
this._isDestroyed = true;
|
||||
this._isInitialized = null;
|
||||
this._dataId = null;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { VideoEmotion, purchase } from "../../schema/schema";
|
||||
import { Dialog } from "./DialogData";
|
||||
import ConfigManager from "../manager/ConfigManager";
|
||||
import { ConfigManager } from "../manager/ConfigManager";
|
||||
|
||||
/**
|
||||
* 单个角色的聊天数据结构
|
||||
|
||||
@@ -51,6 +51,13 @@ export class DataManager {
|
||||
*/
|
||||
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);
|
||||
@@ -65,7 +72,7 @@ export class DataManager {
|
||||
/**
|
||||
* 注册一个数据ID及其对应的构造器
|
||||
*/
|
||||
public register<T extends BaseData>(dataId: string, ctor: DataCtor<T>): void {
|
||||
private register<T extends BaseData>(dataId: string, ctor: DataCtor<T>): void {
|
||||
if (this._config.has(dataId)) {
|
||||
console.warn(`[DataManager] 重复注册数据ID: ${dataId},将覆盖旧构造器`);
|
||||
}
|
||||
|
||||
@@ -6,8 +6,20 @@ import {
|
||||
} from "cc";
|
||||
import * as cfg from "../../schema/schema";
|
||||
import ByteBuf from "db://assets/Scripts/luban/ByteBuf";
|
||||
import { BaseConfig } from "../config/BaseConfig";
|
||||
import { ThemeConfig } from "../config/ThemeConfig";
|
||||
|
||||
export default class ConfigManager {
|
||||
/**
|
||||
* 集中定义数据ID,避免写错字符串
|
||||
*/
|
||||
export enum ConfigId {
|
||||
Theme = "theme", // 主题配置
|
||||
}
|
||||
|
||||
/** 构造器类型 */
|
||||
type DataCtor<T extends BaseConfig = BaseConfig> = new () => T;
|
||||
|
||||
export class ConfigManager {
|
||||
private static _instance: ConfigManager = null;
|
||||
public static get I(): ConfigManager {
|
||||
if (!this._instance) {
|
||||
@@ -20,10 +32,16 @@ export default class ConfigManager {
|
||||
private static dataMap = new Map<string, Uint8Array>();
|
||||
public static jsonFileNames: string[] = [];
|
||||
|
||||
// 数据实例缓存
|
||||
private _dataMap: Map<string, BaseConfig> = new Map();
|
||||
// 数据ID到构造器的映射
|
||||
private _config: Map<string, DataCtor> = new Map();
|
||||
|
||||
private constructor() {}
|
||||
|
||||
public init() {
|
||||
this.loadAllConfig();
|
||||
this.registerAll();
|
||||
}
|
||||
|
||||
public loadConfigName(): void {
|
||||
@@ -83,4 +101,87 @@ export default class ConfigManager {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/** --------------------------------------------------------- 配置数据实例相关 --------------------------------------------------------- */
|
||||
|
||||
/**
|
||||
* 注册 数据ID → 构造器
|
||||
*/
|
||||
private registerAll(): void {
|
||||
this.register(ConfigId.Theme, ThemeConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册一个数据ID及其对应的构造器
|
||||
*/
|
||||
private register<T extends BaseConfig>(configId: string, ctor: DataCtor<T>): void {
|
||||
if (this._config.has(configId)) {
|
||||
console.warn(`[ConfigManager] 重复注册数据ID: ${configId},将覆盖旧构造器`);
|
||||
}
|
||||
this._config.set(configId, ctor);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取数据(已存在则直接返回;否则按配置自动实例化并缓存)
|
||||
*/
|
||||
public getDataById<T extends BaseConfig = BaseConfig>(configId: string): T | null {
|
||||
// 先从缓存取
|
||||
const cached = this._dataMap.get(configId) as T | undefined;
|
||||
if (cached) return cached;
|
||||
|
||||
// 缓存没有→ 查找构造器
|
||||
const Ctor = this._config.get(configId) as DataCtor<T> | undefined;
|
||||
if (!Ctor) {
|
||||
console.warn(`[ConfigManager] 未找到 configId 的构造器配置: ${configId}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
// 动态创建 & init & 缓存
|
||||
const instance = new Ctor();
|
||||
// 若你的 BaseConfig.init 接受 configId,可传入
|
||||
instance.init?.(configId);
|
||||
this._dataMap.set(configId, instance);
|
||||
|
||||
console.log(`[ConfigManager] 实例化并缓存数据: ${configId}`);
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除数据
|
||||
*/
|
||||
public removeData(configId: string): boolean {
|
||||
const data = this._dataMap.get(configId);
|
||||
if (data) {
|
||||
data.destroy?.();
|
||||
this._dataMap.delete(configId);
|
||||
console.log(`[ConfigManager] 移除数据: ${configId}`);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置所有数据
|
||||
*/
|
||||
public resetAllData(): void {
|
||||
console.log("[ConfigManager] 重置所有数据");
|
||||
this._dataMap.forEach((data) => data.reset?.());
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空所有数据
|
||||
*/
|
||||
public clearAllData(): void {
|
||||
console.log("[ConfigManager] 清空所有数据");
|
||||
this._dataMap.forEach((data) => data.clear?.());
|
||||
}
|
||||
|
||||
/**
|
||||
* 销毁所有数据
|
||||
*/
|
||||
public destroyAllData(): void {
|
||||
console.log("[ConfigManager] 销毁所有数据");
|
||||
this._dataMap.forEach((data) => data.destroy?.());
|
||||
this._dataMap.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@ import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
|
||||
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import { DetailImageItem } from "../../uiitems/DetailImageItem";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import { ConfigManager } from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
|
||||
@@ -3,7 +3,7 @@ import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
|
||||
import Utils from "db://assets/Scripts/Main/Common/Utils";
|
||||
import { GButton } from "db://assets/Scripts/Main/Common/GButton";
|
||||
import { GirlListItem } from "../../uiitems/GirlListItem";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import { ConfigManager } from "../../manager/ConfigManager";
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
@ccclass("GirlListPanel")
|
||||
|
||||
@@ -2,7 +2,7 @@ import { _decorator, Component, Label, Node } from "cc";
|
||||
import li_BaseView from "../../../Main/Common/li_BaseView";
|
||||
import Utils from "../../../Main/Common/Utils";
|
||||
import { CommercialData } from "../../data/CommercialData";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import { ConfigManager } from "../../manager/ConfigManager";
|
||||
import { GButton } from "../../../Main/Common/GButton";
|
||||
import { PurchasePanelItem } from "../../uiitems/PurchasePanelItem";
|
||||
import { ViewManager } from "../../../Main/Manager/ViewManager";
|
||||
|
||||
@@ -18,7 +18,7 @@ import { ChatContentsLayout } from "../components/ChatContentsLayout";
|
||||
import { ViewManager } from "db://assets/Scripts/Main/Manager/ViewManager";
|
||||
import GameRootUI from "db://assets/Scripts/Main/Common/GameRootUI";
|
||||
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import { ConfigManager } from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { Dialog } from "../../data/DialogData";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
|
||||
@@ -14,7 +14,7 @@ import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
|
||||
import { ThemeItem } from "../../uiitems/ThemeItem";
|
||||
import { NavigationManager } from "../../manager/NavigationManager";
|
||||
import { GirlListItem } from "../../uiitems/GirlListItem";
|
||||
import ConfigManager from "../../manager/ConfigManager";
|
||||
import { ConfigManager } from "../../manager/ConfigManager";
|
||||
import LanguageUtils from "../../../Main/Common/LanguageUtils";
|
||||
import { ViewManager } from "../../../Main/Manager/ViewManager";
|
||||
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
|
||||
|
||||
Reference in New Issue
Block a user