|
@@ -0,0 +1,105 @@
|
|
|
|
|
+
|
|
|
|
|
+/**
|
|
|
|
|
+ * UI管理类
|
|
|
|
|
+ * @author 冯聪
|
|
|
|
|
+ */
|
|
|
|
|
+export default class UISystem {
|
|
|
|
|
+
|
|
|
|
|
+ /**panel父节点 */
|
|
|
|
|
+ public panelParent: cc.Node = null;
|
|
|
|
|
+
|
|
|
|
|
+ /**界面预制体路径 */
|
|
|
|
|
+ private panelPrefanbUrl: string = './prefab/uiPanel/'
|
|
|
|
|
+ /**是否正在打开界面 */
|
|
|
|
|
+ private isPanelOpening: boolean = false;
|
|
|
|
|
+ /**是否界面正在关闭 */
|
|
|
|
|
+ private isPanelClosing: boolean = false;
|
|
|
|
|
+ /**当前打开的UIPanel */
|
|
|
|
|
+ private curOnPanelDic: { [key: string]: cc.Node } = {};
|
|
|
|
|
+ /**上一个打开的界面名称 */
|
|
|
|
|
+ private lastOpenPanelName: string = "";
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 打开panel界面
|
|
|
|
|
+ * @param panelName 界面名称
|
|
|
|
|
+ * @param callBack 打开之后的回调
|
|
|
|
|
+ * @param openAction 打开之后的操(需不需要关闭其他界面)
|
|
|
|
|
+ */
|
|
|
|
|
+ onPanel(panelName: string, callBack: Function = null, openAction: OpenActionType = OpenActionType.normal) {
|
|
|
|
|
+
|
|
|
|
|
+ if (this.isPanelOpening || this.getCurOnPanel(panelName)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.isPanelOpening = true;
|
|
|
|
|
+
|
|
|
|
|
+ mk.loader.load(`${this.panelPrefanbUrl}` + panelName, cc.Prefab).then((prefab) => {
|
|
|
|
|
+
|
|
|
|
|
+ this.isPanelOpening = false;
|
|
|
|
|
+
|
|
|
|
|
+ let node_panel = cc.instantiate(prefab);
|
|
|
|
|
+ this.curOnPanelDic[panelName] = node_panel;
|
|
|
|
|
+ //如果父节点不存在,就默认把该节点定为panel的父节点
|
|
|
|
|
+ if (!this.panelParent) {
|
|
|
|
|
+ mk.console.log("[UISystem] UI的父节点panelParent为null,需指定UI打开的父节点");
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.panelParent.addChild(node_panel);
|
|
|
|
|
+
|
|
|
|
|
+ callBack && callBack();
|
|
|
|
|
+
|
|
|
|
|
+ switch (openAction) {
|
|
|
|
|
+ case OpenActionType.normal:
|
|
|
|
|
+ break;
|
|
|
|
|
+ case OpenActionType.closeLast:
|
|
|
|
|
+ if (this.lastOpenPanelName) {
|
|
|
|
|
+ this.offPanel(this.lastOpenPanelName);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ case OpenActionType.closeOther:
|
|
|
|
|
+ let keys = Object.keys(this.curOnPanelDic).filter((key) => { key != panelName });
|
|
|
|
|
+ for (var i = 0; i < keys.length; i++) {
|
|
|
|
|
+ let key = keys[i];
|
|
|
|
|
+ this.offPanel(key);
|
|
|
|
|
+ }
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.lastOpenPanelName = panelName;
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**获取当前打开的panel界面
|
|
|
|
|
+ * @param panelName 界面名称
|
|
|
|
|
+ */
|
|
|
|
|
+ getCurOnPanel(panelName: string): cc.Node {
|
|
|
|
|
+ return this.curOnPanelDic[panelName];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 关闭panel界面
|
|
|
|
|
+ * @param panelName 界面名称
|
|
|
|
|
+ * @param callBack 关闭之后回调
|
|
|
|
|
+ */
|
|
|
|
|
+ offPanel(panelName: string, callBack: Function = null) {
|
|
|
|
|
+ if (this.isPanelClosing || !this.getCurOnPanel(panelName)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.isPanelClosing = true;
|
|
|
|
|
+
|
|
|
|
|
+ let node_panel = this.getCurOnPanel(panelName);
|
|
|
|
|
+ node_panel.removeFromParent();
|
|
|
|
|
+ delete this.curOnPanelDic[panelName];
|
|
|
|
|
+
|
|
|
|
|
+ this.isPanelClosing = false;
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/**界面打开操作 */
|
|
|
|
|
+export enum OpenActionType {
|
|
|
|
|
+ /**普通不操作 */
|
|
|
|
|
+ normal = 0,
|
|
|
|
|
+ /**关闭其他 */
|
|
|
|
|
+ closeOther = 1,
|
|
|
|
|
+ /**关闭上一个 */
|
|
|
|
|
+ closeLast = 2
|
|
|
|
|
+}
|