This commit is contained in:
2026-07-14 11:44:07 +08:00
commit 4409c7b031
5906 changed files with 6959792 additions and 0 deletions
@@ -0,0 +1,106 @@
System.register(["cc"], function (_export, _context) {
"use strict";
var _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, _decorator, Component, resources, instantiate, Prefab, js, _dec, _class, _crd, ccclass, property, PanelBase;
return {
setters: [function (_cc) {
_cclegacy = _cc.cclegacy;
__checkObsolete__ = _cc.__checkObsolete__;
__checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
_decorator = _cc._decorator;
Component = _cc.Component;
resources = _cc.resources;
instantiate = _cc.instantiate;
Prefab = _cc.Prefab;
js = _cc.js;
}],
execute: function () {
_crd = true;
_cclegacy._RF.push({}, "54c675nj3NKjJ59O4YaWqa4", "PanelBase", undefined);
__checkObsolete__(['_decorator', 'Component', 'Node', 'director', 'resources', 'instantiate', 'Prefab', 'js']);
({
ccclass,
property
} = _decorator);
_export("PanelBase", PanelBase = (_dec = ccclass('PanelBase'), _dec(_class = class PanelBase extends Component {
constructor(...args) {
super(...args);
this.isOpen = false;
}
async open() {
if (this.isOpen) return;
this.node.active = true;
this.isOpen = true;
this.onOpen();
}
static async LoadPanel(prefabPath, parentNode) {
let panelNode = null;
resources.load(prefabPath, Prefab, (err, prefabAsset) => {
if (prefabAsset) {
const node = instantiate(prefabAsset);
node.parent = parentNode;
node.getComponent(PanelBase).open();
panelNode = node;
} else {
console.error(`Failed to load UI prefab: ${prefabPath}`);
}
});
await this.waitUntil(() => panelNode != null);
return panelNode;
}
static waitUntil(condition) {
return new Promise(resolve => {
const checkCondition = () => {
if (condition()) {
resolve(); // 条件成立,结束等待
} else {
// 条件不成立,继续轮询
requestAnimationFrame(checkCondition);
}
};
checkCondition(); // 开始检查条件
});
}
close() {
console.log("close panel", this.node.name);
if (!this.isOpen) return;
if (!this.isValid) return;
if (this.node && this.node.parent) {
this.node.removeFromParent();
this.node.destroy();
this.isOpen = false;
this.onClose();
}
}
getPrefabPath() {
let panelName = js.getClassName(this);
return `ui/${panelName}`; // 生成预制件路径
}
onOpen() {// 子类可以重写此方法以执行打开后的操作
}
onClose() {// 子类可以重写此方法以执行关闭后的操作
}
}) || _class));
_cclegacy._RF.pop();
_crd = false;
}
};
});
//# sourceMappingURL=63a64431b6b21cd924e8e7464d636fa810675c73.js.map
@@ -0,0 +1 @@
{"version":3,"sources":["file:///D:/Users/admin/Alien_Sniper/assets/scripts/framework/ui/PanelBase.ts"],"names":["_decorator","Component","resources","instantiate","Prefab","js","ccclass","property","PanelBase","isOpen","open","node","active","onOpen","LoadPanel","prefabPath","parentNode","panelNode","load","err","prefabAsset","parent","getComponent","console","error","waitUntil","condition","Promise","resolve","checkCondition","requestAnimationFrame","close","log","name","isValid","removeFromParent","destroy","onClose","getPrefabPath","panelName","getClassName"],"mappings":";;;;;;;;;;AAASA,MAAAA,U,OAAAA,U;AAAYC,MAAAA,S,OAAAA,S;AAA2BC,MAAAA,S,OAAAA,S;AAAWC,MAAAA,W,OAAAA,W;AAAaC,MAAAA,M,OAAAA,M;AAAQC,MAAAA,E,OAAAA,E;;;;;;;;;OAE1E;AAAEC,QAAAA,OAAF;AAAWC,QAAAA;AAAX,O,GAAwBP,U;;2BAGjBQ,S,WADZF,OAAO,CAAC,WAAD,C,gBAAR,MACaE,SADb,SAC+BP,SAD/B,CACyC;AAAA;AAAA;AAAA,eAC3BQ,MAD2B,GACT,KADS;AAAA;;AAGpB,cAAJC,IAAI,GAAkB;AAC/B,cAAI,KAAKD,MAAT,EAAiB;AACjB,eAAKE,IAAL,CAAUC,MAAV,GAAmB,IAAnB;AACA,eAAKH,MAAL,GAAc,IAAd;AACA,eAAKI,MAAL;AACH;;AAEqB,qBAATC,SAAS,CAACC,UAAD,EAAqBC,UAArB,EAAuC;AAEzD,cAAIC,SAAe,GAAG,IAAtB;AACAf,UAAAA,SAAS,CAACgB,IAAV,CAAeH,UAAf,EAA2BX,MAA3B,EAAmC,CAACe,GAAD,EAAMC,WAAN,KAAsB;AACrD,gBAAIA,WAAJ,EAAiB;AACb,oBAAMT,IAAI,GAAGR,WAAW,CAACiB,WAAD,CAAxB;AACAT,cAAAA,IAAI,CAACU,MAAL,GAAcL,UAAd;AACAL,cAAAA,IAAI,CAACW,YAAL,CAAkBd,SAAlB,EAA6BE,IAA7B;AACAO,cAAAA,SAAS,GAAGN,IAAZ;AACH,aALD,MAKO;AACHY,cAAAA,OAAO,CAACC,KAAR,CAAe,6BAA4BT,UAAW,EAAtD;AACH;AACJ,WATD;AAWA,gBAAM,KAAKU,SAAL,CAAe,MAAMR,SAAS,IAAI,IAAlC,CAAN;AACA,iBAAOA,SAAP;AACH;;AAGe,eAATQ,SAAS,CAACC,SAAD,EAA0C;AACtD,iBAAO,IAAIC,OAAJ,CAAaC,OAAD,IAAa;AAC5B,kBAAMC,cAAc,GAAG,MAAM;AACzB,kBAAIH,SAAS,EAAb,EAAiB;AACbE,gBAAAA,OAAO,GADM,CACF;AACd,eAFD,MAEO;AACH;AACAE,gBAAAA,qBAAqB,CAACD,cAAD,CAArB;AACH;AACJ,aAPD;;AAQAA,YAAAA,cAAc,GATc,CASV;AACrB,WAVM,CAAP;AAWH;;AAEME,QAAAA,KAAK,GAAS;AACjBR,UAAAA,OAAO,CAACS,GAAR,CAAY,aAAZ,EAA2B,KAAKrB,IAAL,CAAUsB,IAArC;AACA,cAAI,CAAC,KAAKxB,MAAV,EAAkB;AAClB,cAAI,CAAC,KAAKyB,OAAV,EAAmB;;AAEnB,cAAI,KAAKvB,IAAL,IAAa,KAAKA,IAAL,CAAUU,MAA3B,EAAmC;AAC/B,iBAAKV,IAAL,CAAUwB,gBAAV;AACA,iBAAKxB,IAAL,CAAUyB,OAAV;AACA,iBAAK3B,MAAL,GAAc,KAAd;AACA,iBAAK4B,OAAL;AACH;AACJ;;AAESC,QAAAA,aAAa,GAAW;AAC9B,cAAIC,SAAS,GAAGlC,EAAE,CAACmC,YAAH,CAAgB,IAAhB,CAAhB;AACA,iBAAQ,MAAKD,SAAU,EAAvB,CAF8B,CAEJ;AAC7B;;AAES1B,QAAAA,MAAM,GAAS,CACrB;AACH;;AAESwB,QAAAA,OAAO,GAAS,CACtB;AACH;;AAnEoC,O","sourcesContent":["import { _decorator, Component, Node, director, resources, instantiate, Prefab, js } from 'cc';\r\n\r\nconst { ccclass, property } = _decorator;\r\n\r\n@ccclass('PanelBase')\r\nexport class PanelBase extends Component {\r\n protected isOpen: boolean = false;\r\n\r\n public async open(): Promise<void> {\r\n if (this.isOpen) return;\r\n this.node.active = true\r\n this.isOpen = true;\r\n this.onOpen();\r\n }\r\n\r\n static async LoadPanel(prefabPath: string, parentNode: Node) {\r\n\r\n let panelNode: Node = null\r\n resources.load(prefabPath, Prefab, (err, prefabAsset) => {\r\n if (prefabAsset) {\r\n const node = instantiate(prefabAsset);\r\n node.parent = parentNode;\r\n node.getComponent(PanelBase).open()\r\n panelNode = node\r\n } else {\r\n console.error(`Failed to load UI prefab: ${prefabPath}`);\r\n }\r\n });\r\n\r\n await this.waitUntil(() => panelNode != null);\r\n return panelNode\r\n }\r\n\r\n\r\n static waitUntil(condition: () => boolean): Promise<void> {\r\n return new Promise((resolve) => {\r\n const checkCondition = () => {\r\n if (condition()) {\r\n resolve(); // 条件成立,结束等待\r\n } else {\r\n // 条件不成立,继续轮询\r\n requestAnimationFrame(checkCondition);\r\n }\r\n };\r\n checkCondition(); // 开始检查条件\r\n });\r\n }\r\n\r\n public close(): void {\r\n console.log(\"close panel\", this.node.name)\r\n if (!this.isOpen) return;\r\n if (!this.isValid) return;\r\n\r\n if (this.node && this.node.parent) {\r\n this.node.removeFromParent();\r\n this.node.destroy();\r\n this.isOpen = false;\r\n this.onClose();\r\n }\r\n }\r\n\r\n protected getPrefabPath(): string {\r\n let panelName = js.getClassName(this)\r\n return `ui/${panelName}`; // 生成预制件路径\r\n }\r\n\r\n protected onOpen(): void {\r\n // 子类可以重写此方法以执行打开后的操作\r\n }\r\n\r\n protected onClose(): void {\r\n // 子类可以重写此方法以执行关闭后的操作\r\n }\r\n}"]}