ConfigManager改全局单例

This commit is contained in:
2025-08-15 15:24:31 +08:00
parent 30e8effe86
commit 599c98f135
9 changed files with 361 additions and 376 deletions
Binary file not shown.
+2 -1
View File
@@ -5,6 +5,7 @@
"Temperature": 0.7, "Temperature": 0.7,
"MaxTokens": 2048, "MaxTokens": 2048,
"Timeout": 30000, "Timeout": 30000,
"FreeChatTimes": 20 "FreeChatTimes": 20,
"GameName": "AIGirlChat"
} }
] ]
+10 -70
View File
@@ -18,15 +18,12 @@
"_children": [ "_children": [
{ {
"__id__": 2 "__id__": 2
},
{
"__id__": 32
} }
], ],
"_active": true, "_active": true,
"_components": [], "_components": [],
"_prefab": { "_prefab": {
"__id__": 34 "__id__": 32
}, },
"_lpos": { "_lpos": {
"__type__": "cc.Vec3", "__type__": "cc.Vec3",
@@ -57,7 +54,7 @@
}, },
"autoReleaseAssets": false, "autoReleaseAssets": false,
"_globals": { "_globals": {
"__id__": 35 "__id__": 33
}, },
"_id": "1a23cd3e-e487-4fd1-a415-346c2087464d" "_id": "1a23cd3e-e487-4fd1-a415-346c2087464d"
}, },
@@ -1018,63 +1015,6 @@
}, },
"_id": "98EWBIubZPlZT+LFQb4IYI" "_id": "98EWBIubZPlZT+LFQb4IYI"
}, },
{
"__type__": "cc.Node",
"_name": "ConfigManager",
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 1
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 33
}
],
"_prefab": null,
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_lrot": {
"__type__": "cc.Quat",
"x": 0,
"y": 0,
"z": 0,
"w": 1
},
"_lscale": {
"__type__": "cc.Vec3",
"x": 1,
"y": 1,
"z": 1
},
"_mobility": 0,
"_layer": 1073741824,
"_euler": {
"__type__": "cc.Vec3",
"x": 0,
"y": 0,
"z": 0
},
"_id": "67ZXnZeExFXIu59phK6Xjz"
},
{
"__type__": "fbd43WrI4tK6KXuGCPuxhSR",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 32
},
"_enabled": true,
"__prefab": null,
"_id": "57vDjH7bVD4JDeqZChrdP3"
},
{ {
"__type__": "cc.PrefabInfo", "__type__": "cc.PrefabInfo",
"root": null, "root": null,
@@ -1086,28 +1026,28 @@
{ {
"__type__": "cc.SceneGlobals", "__type__": "cc.SceneGlobals",
"ambient": { "ambient": {
"__id__": 36 "__id__": 34
}, },
"shadows": { "shadows": {
"__id__": 37 "__id__": 35
}, },
"_skybox": { "_skybox": {
"__id__": 38 "__id__": 36
}, },
"fog": { "fog": {
"__id__": 39 "__id__": 37
}, },
"octree": { "octree": {
"__id__": 40 "__id__": 38
}, },
"skin": { "skin": {
"__id__": 41 "__id__": 39
}, },
"lightProbeInfo": { "lightProbeInfo": {
"__id__": 42 "__id__": 40
}, },
"postSettings": { "postSettings": {
"__id__": 43 "__id__": 41
}, },
"bakedWithStationaryMainLight": false, "bakedWithStationaryMainLight": false,
"bakedWithHighpLightmap": false "bakedWithHighpLightmap": false
+100 -77
View File
@@ -1,4 +1,16 @@
import { _decorator, Color, isValid, Label, Node, RichText, Size, Sprite, UITransform, Vec3, view } from "cc"; import {
_decorator,
Color,
isValid,
Label,
Node,
RichText,
Size,
Sprite,
UITransform,
Vec3,
view,
} from "cc";
import li_EventManager from "./li_EventManager"; import li_EventManager from "./li_EventManager";
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@@ -7,27 +19,26 @@ const { ccclass, property } = _decorator;
export default class Utils { export default class Utils {
//log日志 //log日志
public static Log(msg: string | any, ...subst: any[]) { public static Log(msg: string | any, ...subst: any[]) {
let IsLocalCSChanel = true let IsLocalCSChanel = true;
if (IsLocalCSChanel) { if (IsLocalCSChanel) {
console.log(msg, subst) console.log(msg, subst);
} }
} }
//警告日志 //警告日志
public static Warning(msg: string | any, ...subst: any[]) { public static Warning(msg: string | any, ...subst: any[]) {
let IsLocalCSChanel = true let IsLocalCSChanel = true;
if (IsLocalCSChanel) { if (IsLocalCSChanel) {
console.warn(msg, subst) console.warn(msg, subst);
} }
} }
//错误日志 //错误日志
public static Error(msg: string | any, ...subst: any[]) { public static Error(msg: string | any, ...subst: any[]) {
let IsLocalCSChanel = true let IsLocalCSChanel = true;
if (IsLocalCSChanel) { if (IsLocalCSChanel) {
console.error(msg, subst) console.error(msg, subst);
} }
} }
//解析节点 //解析节点
public static parseNode = function (node: Node, oriObj?: any) { public static parseNode = function (node: Node, oriObj?: any) {
if (!node || !node.children) return; if (!node || !node.children) return;
@@ -45,32 +56,31 @@ export default class Utils {
} }
Utils.parseNode(ch, oriObj); Utils.parseNode(ch, oriObj);
} }
} };
//更换父节点,保留原有的坐标和旋转 //更换父节点,保留原有的坐标和旋转
public static changeNodeParent(node:Node, parentNode:Node) { public static changeNodeParent(node: Node, parentNode: Node) {
let world_Q = node.getWorldRotation() let world_Q = node.getWorldRotation();
let world_pos = node.getWorldPosition()//原来的世界坐标 let world_pos = node.getWorldPosition(); //原来的世界坐标
node.setParent(parentNode) node.setParent(parentNode);
node.setRotation(world_Q); node.setRotation(world_Q);
node.setWorldPosition(world_pos) node.setWorldPosition(world_pos);
} }
/** /**
* 封装setString方法 * 封装setString方法
*/ */
static setString(node: Node, str: string | number) { static setString(node: Node, str: string | number) {
if (!isValid(node)) return; if (!isValid(node)) return;
let lb:any = node.getComponent(Label); let lb: any = node.getComponent(Label);
if (!lb) return; if (!lb) return;
if(str == null) {str = ""} if (str == null) {
str += "" str = "";
}
str += "";
lb.string = str; lb.string = str;
} }
/** /**
* 添加富文本 * 添加富文本
* @param node * @param node
@@ -79,12 +89,18 @@ export default class Utils {
* @param width * @param width
* @returns * @returns
*/ */
static addRichText(node: Node, str: string, outLine: string | null = null, width: number | null = 2,max: number = 0) { static addRichText(
node: Node,
str: string,
outLine: string | null = null,
width: number | null = 2,
max: number = 0
) {
if (!node) return; if (!node) return;
let comp = node.getComponent(RichText); let comp = node.getComponent(RichText);
if (!comp) return; if (!comp) return;
str = Utils.replaceAll(str, "</>", "</color>"); str = Utils.replaceAll(str, "</>", "</color>");
str = str.replace(/\<\/font\>/g, '</color>'); str = str.replace(/\<\/font\>/g, "</color>");
str = Utils.replaceAll(str, "'>", ">"); str = Utils.replaceAll(str, "'>", ">");
str = Utils.replaceAll(str, "<font", "<"); str = Utils.replaceAll(str, "<font", "<");
str = Utils.replaceAll(str, "color='", "color="); str = Utils.replaceAll(str, "color='", "color=");
@@ -103,13 +119,16 @@ export default class Utils {
return str; return str;
} }
/**截取字符串,超过长度的用...代替 /**截取字符串,超过长度的用...代替
* @param str 要处理的字符串 * @param str 要处理的字符串
* @param labelLimit 字符串长度限制 * @param labelLimit 字符串长度限制
* @param repStr 超过长度后代替的字符串 * @param repStr 超过长度后代替的字符串
*/ */
static clampAiAnswer(ansStr: string, labelLimit:number, repStr:string = "...") { static clampAiAnswer(
ansStr: string,
labelLimit: number,
repStr: string = "..."
) {
// let labelLimit = 20 //字符串长度限制 // let labelLimit = 20 //字符串长度限制
let tempStr: string = ""; let tempStr: string = "";
let tempLen: number = 0; let tempLen: number = 0;
@@ -123,12 +142,11 @@ export default class Utils {
return ansStr; return ansStr;
} }
/**设置节点置灰 */ /**设置节点置灰 */
static setNodeGray(node: Node, isGray: boolean, extra: any={}) { static setNodeGray(node: Node, isGray: boolean, extra: any = {}) {
if (!isValid(node)) return; if (!isValid(node)) return;
//图片 //图片
let sp:Sprite = node.getComponent(Sprite); let sp: Sprite = node.getComponent(Sprite);
if (sp) { if (sp) {
sp.grayscale = isGray; sp.grayscale = isGray;
} }
@@ -152,18 +170,22 @@ export default class Utils {
* @method node 背景图节点 * @method node 背景图节点
* @param mod 适配模式 1=按高度适配 2=按宽度适配 * @param mod 适配模式 1=按高度适配 2=按宽度适配
*/ */
public static adjustBgPixelRatioToSize(windowSize:Size,node:Node, mod:number = 1) { public static adjustBgPixelRatioToSize(
windowSize: Size,
node: Node,
mod: number = 1
) {
//let windowSize = view.getVisibleSize(); //let windowSize = view.getVisibleSize();
let bgTf = node.getComponent(UITransform) let bgTf = node.getComponent(UITransform);
if (bgTf) { if (bgTf) {
if (mod == 1 && bgTf.height < windowSize.height) { if (mod == 1 && bgTf.height <= windowSize.height) {
let scale = windowSize.height / bgTf.height let scale = windowSize.height / bgTf.height;
bgTf.height = bgTf.height * scale bgTf.height = bgTf.height * scale;
bgTf.width = bgTf.width * scale bgTf.width = bgTf.width * scale;
} else if (mod == 2 && bgTf.width < windowSize.width) { } else if (mod == 2 && bgTf.width <= windowSize.width) {
let scale = windowSize.width / bgTf.width let scale = windowSize.width / bgTf.width;
bgTf.height = bgTf.height * scale bgTf.height = bgTf.height * scale;
bgTf.width = bgTf.width * scale bgTf.width = bgTf.width * scale;
} }
} }
} }
@@ -171,27 +193,25 @@ export default class Utils {
* @method node 背景图节点 * @method node 背景图节点
* @param mod 适配模式 1=按高度适配 2=按宽度适配 * @param mod 适配模式 1=按高度适配 2=按宽度适配
*/ */
public static adjustBgPixelRatio(node:Node, mod:number = 1) { public static adjustBgPixelRatio(node: Node, mod: number = 1) {
let windowSize = view.getVisibleSize(); let windowSize = view.getVisibleSize();
let bgTf = node.getComponent(UITransform) let bgTf = node.getComponent(UITransform);
if (bgTf) { if (bgTf) {
if(mod == 3) if (mod == 3) {
{ if (windowSize.height - bgTf.height < windowSize.width - bgTf.width) {
if(windowSize.height-bgTf.height < windowSize.width-bgTf.width )
{
mod = 1; mod = 1;
}else{ } else {
mod = 2; mod = 2;
} }
} }
if (mod == 1 && bgTf.height < windowSize.height) { if (mod == 1 && bgTf.height < windowSize.height) {
let scale = windowSize.height / bgTf.height let scale = windowSize.height / bgTf.height;
bgTf.height = bgTf.height * scale bgTf.height = bgTf.height * scale;
bgTf.width = bgTf.width * scale bgTf.width = bgTf.width * scale;
} else if (mod == 2 && bgTf.width < windowSize.width) { } else if (mod == 2 && bgTf.width < windowSize.width) {
let scale = windowSize.width / bgTf.width let scale = windowSize.width / bgTf.width;
bgTf.height = bgTf.height * scale bgTf.height = bgTf.height * scale;
bgTf.width = bgTf.width * scale bgTf.width = bgTf.width * scale;
} }
} }
} }
@@ -199,32 +219,31 @@ export default class Utils {
* @param node 背景图节点 * @param node 背景图节点
* @param mod 适配模式 1=按高度适配 2=按宽度适配 * @param mod 适配模式 1=按高度适配 2=按宽度适配
*/ */
public static adjustBgScaleRatio(node:Node, mod:number = 1) { public static adjustBgScaleRatio(node: Node, mod: number = 1) {
let windowSize = view.getVisibleSize(); let windowSize = view.getVisibleSize();
let designSize = view.getDesignResolutionSize(); let designSize = view.getDesignResolutionSize();
if (mod == 1 && windowSize.height < designSize.height) { if (mod == 1 && windowSize.height < designSize.height) {
let scale = windowSize.height / designSize.height let scale = windowSize.height / designSize.height;
node.scale = new Vec3(scale, scale, 1) node.scale = new Vec3(scale, scale, 1);
} else if (mod == 2 && windowSize.width < designSize.width) { } else if (mod == 2 && windowSize.width < designSize.width) {
let scale = windowSize.width / designSize.width let scale = windowSize.width / designSize.width;
node.scale = new Vec3(scale, scale, 1) node.scale = new Vec3(scale, scale, 1);
} }
} }
/**获取屏幕分辨率和设计分辨率的比例 /**获取屏幕分辨率和设计分辨率的比例
* @method mod 适配模式 1=按高度适配 2=按宽度适配 * @method mod 适配模式 1=按高度适配 2=按宽度适配
*/ */
public static getScaleRatio(mod:number = 1) { public static getScaleRatio(mod: number = 1) {
let windowSize = view.getVisibleSize(); let windowSize = view.getVisibleSize();
let designSize = view.getDesignResolutionSize(); let designSize = view.getDesignResolutionSize();
// console.log("游戏分辨率:", windowSize, designSize); // console.log("游戏分辨率:", windowSize, designSize);
if (mod == 1) { if (mod == 1) {
return windowSize.height / designSize.height return windowSize.height / designSize.height;
} else { } else {
return windowSize.width / designSize.width return windowSize.width / designSize.width;
} }
} }
/** /**
* @method 浅复制一个对象 * @method 浅复制一个对象
* @param source 需要浅复制的对象 * @param source 需要浅复制的对象
@@ -232,7 +251,11 @@ export default class Utils {
* @param object * @param object
* @param excludes 需要排除的字段 * @param excludes 需要排除的字段
*/ */
static applyIf(object: any, target: any = {}, excludes: Array<string> = []): Object { static applyIf(
object: any,
target: any = {},
excludes: Array<string> = []
): Object {
if (!target) target = {}; if (!target) target = {};
for (let key in object) { for (let key in object) {
if (object.hasOwnProperty(key)) { if (object.hasOwnProperty(key)) {
@@ -254,64 +277,64 @@ export default class Utils {
return Utils.applyIf(source); return Utils.applyIf(source);
} }
/**复制一个数据表 */ /**复制一个数据表 */
static clone(data:any) { static clone(data: any) {
return Utils.easyCopy(data); return Utils.easyCopy(data);
} }
/**发送内部事件 */ /**发送内部事件 */
public static sendInnerMsg(innerId: number, param?: any) { public static sendInnerMsg(innerId: number, param?: any) {
li_EventManager.I.onInnerEL(innerId, param); li_EventManager.I.onInnerEL(innerId, param);
} }
/**注册内部事件 */ /**注册内部事件 */
public static addInnerEL(innerId: number, i_target, i_callback: Function,) { public static addInnerEL(innerId: number, i_target, i_callback: Function) {
li_EventManager.I.addInnerEL(innerId, i_callback, i_target); li_EventManager.I.addInnerEL(innerId, i_callback, i_target);
} }
/**移除内部事件 */ /**移除内部事件 */
public static removeInnerEL(innerId: number, i_target, i_callback: Function) { public static removeInnerEL(innerId: number, i_target, i_callback: Function) {
li_EventManager.I.removeInnerEL(innerId, i_callback, i_target) li_EventManager.I.removeInnerEL(innerId, i_callback, i_target);
} }
//获取随机数 //获取随机数
public static getRandomInt(i_start:number, i_end:number) : number { public static getRandomInt(i_start: number, i_end: number): number {
i_start = Math.ceil(i_start); i_start = Math.ceil(i_start);
i_end = Math.floor(i_end); i_end = Math.floor(i_end);
return Math.floor(Math.random() * (i_end - i_start + 1)) + i_start; return Math.floor(Math.random() * (i_end - i_start + 1)) + i_start;
} }
//数字转字符串,指定位数,位数不足前面补0 //数字转字符串,指定位数,位数不足前面补0
public static PrefixInt(num, length) { public static PrefixInt(num, length) {
return (Array(length).join('0') + num).slice(-length); return (Array(length).join("0") + num).slice(-length);
} }
//数字保留几位小数 //数字保留几位小数
public static DecimalPlaces(num:number, weishu:number) { public static DecimalPlaces(num: number, weishu: number) {
return num.toFixed(weishu); return num.toFixed(weishu);
} }
/**获取屏幕分辨率 */ /**获取屏幕分辨率 */
public static GetWinSize():Size { public static GetWinSize(): Size {
return view.getVisibleSize() return view.getVisibleSize();
} }
/**获取当前日期,格式YYYY-MM-DD */ /**获取当前日期,格式YYYY-MM-DD */
public static GetNowFormatDay(nowDate: Date | null = null, char: string = "-") { public static GetNowFormatDay(
nowDate: Date | null = null,
char: string = "-"
) {
if (nowDate == null) { if (nowDate == null) {
nowDate = new Date(); nowDate = new Date();
} }
let day = nowDate.getDate(); let day = nowDate.getDate();
let month = nowDate.getMonth() + 1;//注意月份需要+1 let month = nowDate.getMonth() + 1; //注意月份需要+1
let year = nowDate.getFullYear(); let year = nowDate.getFullYear();
//补全0,并拼接 //补全0,并拼接
return year + char + Utils.completeDate(month) + char + Utils.completeDate(day); return (
year + char + Utils.completeDate(month) + char + Utils.completeDate(day)
);
} }
//补全0 //补全0
private static completeDate(value: number) { private static completeDate(value: number) {
return value < 10 ? "0" + value : value; return value < 10 ? "0" + value : value;
} }
//打印消耗时间=================================================================================================== //打印消耗时间===================================================================================================
private static _eplTime = 0; private static _eplTime = 0;
/**记录当前时间 */ /**记录当前时间 */
@@ -319,7 +342,7 @@ export default class Utils {
Utils._eplTime = new Date().getTime(); Utils._eplTime = new Date().getTime();
} }
/**打印消耗时间 */ /**打印消耗时间 */
public static ProfilerTimePrint(key:string = "") { public static ProfilerTimePrint(key: string = "") {
let time = new Date().getTime(); let time = new Date().getTime();
let timecha = time - Utils._eplTime; let timecha = time - Utils._eplTime;
console.log(`${key}消耗时间:${timecha}毫秒`); console.log(`${key}消耗时间:${timecha}毫秒`);
+5
View File
@@ -26,6 +26,7 @@ import { InnerMsgCode } from "../../Main/Config/InnerMsgCode";
import { promptItem } from "../Item/promptItem"; import { promptItem } from "../Item/promptItem";
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils"; import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
import { DataManager } from "../../chat18x/data/DataManager"; import { DataManager } from "../../chat18x/data/DataManager";
import ConfigManager from "../../chat18x/manager/ConfigManager";
const { ccclass, property } = _decorator; const { ccclass, property } = _decorator;
@ccclass("PreloadUI") @ccclass("PreloadUI")
@@ -239,6 +240,10 @@ export class PreloadUI extends Component {
// } else { // } else {
// //没登录成功,先进主界面,在主界面里进行登录 // //没登录成功,先进主界面,在主界面里进行登录
// } // }
ConfigManager.I.init();
//console.log(ConfigManager.tables.TbGlobalConfig.GameName);
ResManager.I.goMainScene(); //进入下一个场景 ResManager.I.goMainScene(); //进入下一个场景
// ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景 // ResManager.I.goCustomScene("Test2DScene"); //进入自定义场景
} }
@@ -1,22 +1,28 @@
import { import {
_decorator,
resources, resources,
BufferAsset, BufferAsset,
Component,
assetManager, assetManager,
AssetManager, AssetManager,
} from "cc"; } from "cc";
import * as cfg from "../../schema/schema"; import * as cfg from "../../schema/schema";
import ByteBuf from "db://assets/Scripts/luban/ByteBuf"; import ByteBuf from "db://assets/Scripts/luban/ByteBuf";
const { ccclass, property } = _decorator; export default class ConfigManager {
@ccclass("ConfigManager") private static _instance: ConfigManager = null;
export default class ConfigManager extends Component { public static get I(): ConfigManager {
if (!this._instance) {
this._instance = new ConfigManager();
}
return this._instance;
}
public static tables: cfg.Tables = null; public static tables: cfg.Tables = null;
private static dataMap = new Map<string, Uint8Array>(); private static dataMap = new Map<string, Uint8Array>();
public static jsonFileNames: string[] = []; public static jsonFileNames: string[] = [];
onLoad() { private constructor() {}
public init() {
this.loadAllConfig(); this.loadAllConfig();
} }
@@ -65,7 +71,7 @@ export default class ConfigManager extends Component {
} }
Promise.all(promises).then((values) => { Promise.all(promises).then((values) => {
console.log("静态配置加载完成"); console.log("静态配置加载完成");
ConfigManager.tables = new cfg.Tables(this.getFileData); ConfigManager.tables = new cfg.Tables(ConfigManager.I.getFileData);
for (let item of ConfigManager.tables.TbGirls.getDataList()) { for (let item of ConfigManager.tables.TbGirls.getDataList()) {
console.log(item); console.log(item);
} }
@@ -71,14 +71,14 @@ export class ThemePanel extends li_BaseView {
this.cache.push(item); this.cache.push(item);
this.content.addChild(newNode); this.content.addChild(newNode);
} }
const rectInfo = cfgs[0]; const rectInfo = ConfigManager.tables.TbGirls.get(10001);
this.recId = rectInfo.id; this.recId = rectInfo.id;
this.rectNameKey = rectInfo.key; this.rectNameKey = rectInfo.nameKey;
//this.recName.string = LanguageUtils.getText(this.rectNameKey); //this.recName.string = LanguageUtils.getText(this.rectNameKey);
ResManager.I.changeBundleSpriteFrame( ResManager.I.changeBundleSpriteFrame(
this.recSprite, this.recSprite,
rectInfo.path, rectInfo.avatarPath,
"Chat18x", "Chat18x",
() => { () => {
let sizeTran = this.recSprite.node.parent.getComponent(UITransform); let sizeTran = this.recSprite.node.parent.getComponent(UITransform);
+10
View File
@@ -194,6 +194,7 @@ export class GlobalConfig {
this.MaxTokens = _buf_.readInt() this.MaxTokens = _buf_.readInt()
this.Timeout = _buf_.readInt() this.Timeout = _buf_.readInt()
this.FreeChatTimes = _buf_.readInt() this.FreeChatTimes = _buf_.readInt()
this.GameName = _buf_.readString()
} }
/** /**
@@ -217,6 +218,10 @@ export class GlobalConfig {
* 单个角色免费聊天次数 * 单个角色免费聊天次数
*/ */
readonly FreeChatTimes: number readonly FreeChatTimes: number
/**
* 游戏名
*/
readonly GameName: string
resolve(tables:Tables) { resolve(tables:Tables) {
@@ -225,6 +230,7 @@ export class GlobalConfig {
} }
} }
@@ -630,6 +636,10 @@ export class TbGlobalConfig {
* 单个角色免费聊天次数 * 单个角色免费聊天次数
*/ */
get FreeChatTimes(): number { return this._data.FreeChatTimes; } get FreeChatTimes(): number { return this._data.FreeChatTimes; }
/**
* 游戏名
*/
get GameName(): string { return this._data.GameName; }
resolve(tables:Tables) { resolve(tables:Tables) {
this._data.resolve(tables) this._data.resolve(tables)
Binary file not shown.