|
|
@@ -1,12 +1,14 @@
|
|
|
+
|
|
|
+const { ccclass, property } = cc._decorator;
|
|
|
+@ccclass
|
|
|
/**
|
|
|
* UI管理类
|
|
|
* @author 冯聪
|
|
|
*/
|
|
|
-export default class UISystem {
|
|
|
+export default class UISystem extends cc.Component {
|
|
|
|
|
|
/** panel父节点 */
|
|
|
- public panelParent: cc.Node = null;
|
|
|
-
|
|
|
+ private panelParent: cc.Node = null;
|
|
|
/** 界面预制体路径 */
|
|
|
private panelPrefanbUrl: string = './prefab/uiPanel/'
|
|
|
/** 是否正在打开界面 */
|
|
|
@@ -17,6 +19,16 @@ export default class UISystem {
|
|
|
private curOnPanelDic: { [key: string]: cc.Node } = {};
|
|
|
/** 上一个打开的界面名称 */
|
|
|
private lastOpenPanelName: string = "";
|
|
|
+
|
|
|
+ onLoad() {
|
|
|
+ mk.ui = this;
|
|
|
+ }
|
|
|
+
|
|
|
+ start() {
|
|
|
+ if (!this.panelParent) {
|
|
|
+ this.panelParent = this.node;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 打开panel界面
|
|
|
@@ -25,47 +37,52 @@ export default class UISystem {
|
|
|
*/
|
|
|
openPanel(panelName: string, openAction: OpenActionType = OpenActionType.normal): Promise<any> {
|
|
|
|
|
|
- if (this.isPanelOpening || this.getCurOnPanel(panelName)) {
|
|
|
+ let self = this;
|
|
|
+ if (self.isPanelOpening || self.getCurOnPanel(panelName)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- this.isPanelOpening = true;
|
|
|
+ self.isPanelOpening = true;
|
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
|
- mk.loader.load(`${this.panelPrefanbUrl}` + panelName, cc.Prefab)
|
|
|
+ mk.loader.load(`${self.panelPrefanbUrl}` + panelName, cc.Prefab)
|
|
|
.then((prefab) => {
|
|
|
|
|
|
- this.isPanelOpening = false;
|
|
|
+ self.isPanelOpening = false;
|
|
|
let node_panel = cc.instantiate(prefab);
|
|
|
- this.curOnPanelDic[panelName] = node_panel;
|
|
|
+ self.curOnPanelDic[panelName] = node_panel;
|
|
|
+
|
|
|
+ if (self.panelParent) {
|
|
|
+ self.panelParent = self.node;
|
|
|
+ }
|
|
|
|
|
|
//如果父节点不存在,就默认把该节点定为panel的父节点
|
|
|
- if (!this.panelParent) {
|
|
|
- console.error("[UISystem] UI的父节点panelParent为null,需指定UI打开的父节点");
|
|
|
+ if (!self.panelParent) {
|
|
|
+ console.error("[UISystem] UI的父节点panelParent为null,请检查脚本挂载情况");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- this.panelParent.addChild(node_panel);
|
|
|
+ self.panelParent.addChild(node_panel);
|
|
|
|
|
|
switch (openAction) {
|
|
|
case OpenActionType.normal:
|
|
|
break;
|
|
|
case OpenActionType.closeLast:
|
|
|
- if (this.lastOpenPanelName) {
|
|
|
- this.closePanel(this.lastOpenPanelName);
|
|
|
+ if (self.lastOpenPanelName) {
|
|
|
+ self.closePanel(self.lastOpenPanelName);
|
|
|
}
|
|
|
break;
|
|
|
case OpenActionType.closeOther:
|
|
|
- let keys = Object.keys(this.curOnPanelDic).filter((key) => { key != panelName });
|
|
|
+ let keys = Object.keys(self.curOnPanelDic).filter((key) => { key != panelName });
|
|
|
for (var i = 0; i < keys.length; i++) {
|
|
|
let key = keys[i];
|
|
|
- this.closePanel(key);
|
|
|
+ self.closePanel(key);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- this.lastOpenPanelName = panelName;
|
|
|
+ self.lastOpenPanelName = panelName;
|
|
|
|
|
|
//返回panel
|
|
|
resolve(node_panel);
|