123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import { Asset, Node, Prefab } from "cc";
- import { EventMgr } from "../event/EventManager";
- import { LoadQueue } from "../res/LoadQueue";
- import { StringUtil } from "../util/StringUtil";
- import { BaseLayer } from "./BaseLayer";
- import { BaseView } from "./BaseView";
- //UI类型
- export enum LayerType {
- Game = 0, //游戏层
- UI, //UI层
- Notice, //公告层
- Guide //引导层
- }
- //UI配置结构体
- export interface LayerConf {
- bundle?: string; //BundleName
- url: string; //资源路径
- type: LayerType; //UI类型
- anim?: boolean; //是否使用动画
- cache?: boolean; //是否缓存该UI的资源(该UI动态加载的资源不会缓存)
- bottom?: boolean; //是否是最底层UI(不受切换影响)
- preload?: boolean; //是否预加载
- special?: boolean; //是否是特殊UI
- //destroy?: boolean; //关闭时是否销毁
- reset?: boolean;
- }
- //UI数据
- export interface LayerInfo {
- id: number;
- view: BaseView;
- args: any[];
- res: Asset;
- callback: Function;
- active: Boolean;
- //是否加载中
- bLoading: Boolean;
- }
- export class LayerManager {
- private _game_layer: BaseLayer = null;
- private _ui_layer: BaseLayer = null;
- private _notice_layer: BaseLayer = null;
- private _guide_layer: BaseLayer = null;
- private _layer_conf: { [key: number]: LayerConf } = {};
- private _class_uuid = StringUtil.getUUID(32);
- constructor(root: Node, conf: any) {
- this._layer_conf = conf;
- //预加载资源
- for (let id in this._layer_conf) {
- let conf = this._layer_conf[id];
- (conf.preload) && LoadQueue.pushPreload(1, conf.bundle, conf.url, Prefab);
- //conf.destroy = (conf.destroy) ? conf.destroy : true;
- }
- this._game_layer = new BaseLayer("Game_Layer", this._layer_conf);
- root.addChild(this._game_layer);
- this._ui_layer = new BaseLayer("UI_Layer", this._layer_conf, true);
- root.addChild(this._ui_layer);
- this._notice_layer = new BaseLayer("Notice_Layer", this._layer_conf);
- root.addChild(this._notice_layer);
- this._guide_layer = new BaseLayer("Guide_Layer", this._layer_conf);
- root.addChild(this._guide_layer);
- EventMgr.addEvent("_Framewrok_Show_GameLayer", (value: boolean) => {
- // this._game_layer.showLayerUI(value);
- }, this, this._class_uuid);
- }
- /**
- * 打开UI
- * @param id UIID
- * @param callback UI打开成功回调
- * @param args 打开UI的可传参数
- */
- open(id: number, callback: Function = null, ...args: any[]) {
- // let openState = GameUtil.checkSystemOpen(id)
- // if (!openState.state) {
- // Framework.tips.setTips(openState.tips);
- // return
- // }
- let conf = this._layer_conf[id];
- // Framework.tips.setTips('huidhkaj shdgk ')
- if (conf) {
- //完全打开需要去检测引导手指
- let mCallback = () => {
- // Framework.event.fireEvent(GameEvent.GuideClick_Update_Finger, GuideManager.needShowFinger());
- if (callback) {
- callback();
- }
- };
- if (conf.type === LayerType.Game) {
- this._game_layer.open(id, mCallback, args);
- } else if (conf.type === LayerType.UI) {
- this._ui_layer.open(id, mCallback, args);
- } else if (conf.type === LayerType.Notice) {
- this._notice_layer.open(id, mCallback, args);
- } else if (conf.type === LayerType.Guide) {
- this._guide_layer.open(id, mCallback, args);
- }
- return true;
- }
- console.error("未找到对应UI:" + id);
- return false;
- }
- /**
- * 关闭UI
- * @param ui 待关闭的UI,该值可为id也可为this
- */
- close(ui: number | BaseView) {
- if (ui) {
- let id = (typeof ui != "number") ? ui.view_id : ui;
- let conf = this._layer_conf[id];
- if (conf) {
- if (conf.type === LayerType.Game) {
- this._game_layer.close(ui);
- } else if (conf.type === LayerType.UI) {
- this._ui_layer.close(ui);
- } else if (conf.type === LayerType.Notice) {
- this._notice_layer.close(ui);
- } else if (conf.type === LayerType.Guide) {
- this._guide_layer.close(ui);
- }
- return true;
- }
- }
- return false;
- }
- ShowUI(ui, state, callback: Function = null, ...args: any[]) {
- this._ui_layer.ShowUI(ui, state, callback, args);
- }
- /**
- * 获取UI对应的UIView
- * @param id UIID
- */
- getUIView(id: number) {
- let conf = this._layer_conf[id];
- if (conf) {
- if (conf.type === LayerType.Game) {
- return this._game_layer.getUIView(id);
- } else if (conf.type === LayerType.UI) {
- return this._ui_layer.getUIView(id);
- } else if (conf.type === LayerType.Notice) {
- return this._notice_layer.getUIView(id);
- } else if (conf.type === LayerType.Guide) {
- return this._guide_layer.getUIView(id);
- }
- }
- console.error("未找到对应UI:" + id);
- return null;
- }
- /**
- * 关闭所有UI
- */
- closeAllUI(withoutID: number = -1) {
- EventMgr.fireEvent("_Framewrok_Show_GameLayer", true);
- this._ui_layer.closeAll(withoutID);
- }
- closeAllGame(withoutID: number = -1) {
- this._game_layer.closeAll(withoutID);
- }
- }
|