修改ConfigManager,定义配置数据继承体系

This commit is contained in:
chen wei bo
2025-09-01 16:28:08 +08:00
parent 1b620ca24b
commit c9817ea13e
19 changed files with 300 additions and 14 deletions
+1 -1
View File
@@ -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";
+1 -1
View File
@@ -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";
+1 -1
View File
@@ -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";
/**
*
+2
View File
@@ -46,6 +46,8 @@ export class BaseData {
if (this._isDestroyed) return;
this.clear();
this._isDestroyed = true;
this._isInitialized = null;
this._dataId = null;
}
/**
+1 -1
View File
@@ -1,6 +1,6 @@
import { VideoEmotion, purchase } from "../../schema/schema";
import { Dialog } from "./DialogData";
import ConfigManager from "../manager/ConfigManager";
import { ConfigManager } from "../manager/ConfigManager";
/**
*
+8 -1
View File
@@ -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},将覆盖旧构造器`);
}
+102 -1
View File
@@ -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";