mirror of
https://gitee.com/dgflash/oops-plugin-framework.git
synced 2026-05-18 12:15:39 +08:00
2. 存储模块性能提升,添加LRU缓存、批量操作支持,优化内存使用 3. 多语言模块性能与内存管理优化,组件查询性能提升 4. 时间模块类型安全与性能优化,使用泛型替代any,对象池机制减少内存分配 5. 事件系统修复双重注册、重复注册等严重问题,实现EventData对象池减少GC压力 6. RandomManager修复4个逻辑BUG,包括边界问题和越界问题 7. 音频模块内存与性能优化,避免重复加载,优化数据结构,添加完整清理机制 8. CCView与CCViewVM合并,支持按需启用MVVM 9. Collection模块优化,AsyncQueue添加队列容量限制,Collection查询性能提升 10. ECS系统全面优化,对象池复用减少内存分配,循环性能提升 11. 优化MVVM组件性能
130 lines
4.0 KiB
TypeScript
130 lines
4.0 KiB
TypeScript
import { sys } from 'cc';
|
|
import { Logger } from '../../../core/common/log/Logger';
|
|
import { LanguageData } from './LanguageData';
|
|
import { LanguagePack } from './LanguagePack';
|
|
|
|
/** 多语言管理器 */
|
|
export class LanguageManager {
|
|
private _languages: Array<string> = [sys.Language.CHINESE, sys.Language.ENGLISH]; // 支持的语言
|
|
private _languagePack: LanguagePack = new LanguagePack(); // 语言包
|
|
private _defaultLanguage: string = sys.Language.CHINESE; // 默认语言
|
|
|
|
/** 支持的多种语言列表 */
|
|
get languages(): string[] {
|
|
return this._languages;
|
|
}
|
|
set languages(languages: Array<string>) {
|
|
this._languages = languages;
|
|
}
|
|
|
|
/** 设置的当前语言列表中没有配置时,使用默认语言 */
|
|
set default(lang: string) {
|
|
this._defaultLanguage = lang || sys.Language.CHINESE;
|
|
}
|
|
|
|
/** 获取当前语种 */
|
|
get current(): string {
|
|
return LanguageData.current;
|
|
}
|
|
|
|
/** 语言包 */
|
|
get pack(): LanguagePack {
|
|
return this._languagePack;
|
|
}
|
|
|
|
/**
|
|
* 是否存在指定语言
|
|
* @param lang 语言名
|
|
* @returns 存在返回true,则否false
|
|
*/
|
|
isExist(lang: string): boolean {
|
|
return this.languages.indexOf(lang) > -1;
|
|
}
|
|
|
|
/** 获取下一个语种 */
|
|
getNextLang(): string {
|
|
const supportLangs = this.languages;
|
|
const index = supportLangs.indexOf(LanguageData.current);
|
|
return supportLangs[(index + 1) % supportLangs.length];
|
|
}
|
|
|
|
/**
|
|
* 改变语种,会自动下载对应的语种
|
|
* @param language 语言名
|
|
* @param callback 多语言资源数据加载完成回调
|
|
*/
|
|
setLanguage(language: string, callback?: Function) {
|
|
if (language === null || language === undefined || language === '') {
|
|
language = this._defaultLanguage;
|
|
}
|
|
else {
|
|
language = language.toLowerCase();
|
|
}
|
|
|
|
const index = this.languages.indexOf(language);
|
|
if (index < 0) {
|
|
Logger.instance.logConfig(`当前不支持【${language}】语言,将自动切换到【${this._defaultLanguage}】语言`);
|
|
language = this._defaultLanguage;
|
|
}
|
|
|
|
if (language === LanguageData.current) {
|
|
callback && callback();
|
|
return;
|
|
}
|
|
|
|
this.loadLanguageAssets(language, (lang: string) => {
|
|
Logger.instance.logConfig(`当前语言为【${language}】`);
|
|
const oldLanguage = LanguageData.current;
|
|
LanguageData.current = language;
|
|
this._languagePack.updateLanguage(language);
|
|
// 释放旧语言资源
|
|
if (oldLanguage && oldLanguage !== language) {
|
|
this._languagePack.releaseLanguageAssets(oldLanguage);
|
|
}
|
|
callback && callback();
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 根据data获取对应语种的字符
|
|
* @param labId
|
|
* @param arr
|
|
*/
|
|
getLangByID(labId: string): string {
|
|
return LanguageData.getLangByID(labId);
|
|
}
|
|
|
|
/**
|
|
* 下载语言包素材资源
|
|
* 包括语言json配置和语言纹理包
|
|
* @param lang
|
|
* @param callback
|
|
*/
|
|
loadLanguageAssets(lang: string, callback: Function) {
|
|
lang = lang.toLowerCase();
|
|
return this._languagePack.loadLanguageAssets(lang, callback);
|
|
}
|
|
|
|
/**
|
|
* 释放不需要的语言包资源
|
|
* @param lang
|
|
*/
|
|
releaseLanguageAssets(lang: string) {
|
|
lang = lang.toLowerCase();
|
|
this._languagePack.releaseLanguageAssets(lang);
|
|
}
|
|
|
|
/**
|
|
* 清理所有语言数据,释放内存
|
|
* 建议在游戏退出或需要释放大量内存时调用
|
|
*/
|
|
clear() {
|
|
// 释放当前语言的资源
|
|
if (LanguageData.current) {
|
|
this._languagePack.releaseLanguageAssets(LanguageData.current);
|
|
}
|
|
// 清理语言数据
|
|
LanguageData.clear();
|
|
}
|
|
}
|