Files
oops-plugin-framework/assets/libs/gui/language/LanguageSpine.ts
dgflash fe9181a6ec 1、多语言模块扩展SPINE动画类的多语言组件
2、感谢風舞影天‍优化VMState中代码
2023-07-25 17:50:24 +08:00

60 lines
1.7 KiB
TypeScript

/*
* @Author: dgflash
* @Date: 2023-07-25 10:44:38
* @LastEditors: dgflash
* @LastEditTime: 2023-07-25 11:48:52
*/
import { CCString, Component, _decorator, sp } from "cc";
import { EDITOR } from "cc/env";
import { oops } from "../../../core/Oops";
import { LanguageData } from "./LanguageData";
const { ccclass, property, menu } = _decorator;
@ccclass("LanguageSpine")
@menu('ui/language/LanguageSpine')
export class LanguageSpine extends Component {
@property({ serializable: true })
private _dataID: string = "";
@property({ type: CCString, serializable: true })
get dataID(): string {
return this._dataID || "";
}
set dataID(value: string) {
this._dataID = value;
if (!EDITOR) {
this.updateSpine();
}
}
/** 默认动画名 */
private _defaultAnimation: string = "";
onLoad() {
let spine: sp.Skeleton = this.getComponent(sp.Skeleton)!;
this._defaultAnimation = spine.animation;
}
start() {
this.updateSpine();
}
/** 更新语言 */
language() {
this.updateSpine();
}
private updateSpine() {
// 获取语言标记
let path = `language/spine/${LanguageData.current}/${this.dataID}`;
let res: sp.SkeletonData | null = oops.res.get(path, sp.SkeletonData);
if (res) {
let spine: sp.Skeleton = this.getComponent(sp.Skeleton)!;
spine.skeletonData = res;
spine.setAnimation(0, this._defaultAnimation, true);
}
else {
console.error("[LanguageSpine] 资源不存在 " + path);
}
}
}