123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- import { gameMethod } from "../../../common/gameMethod";
- import { WindowEvent } from "../../../data/const/EventConst";
- import { AudioConst } from "../../../data/const/TypeConst";
- import { ViewZOrder } from "../../../data/const/ViewZOrder";
- import GameDataCenter from "../../../data/GameDataCenter";
- import EventMng from "../../../manager/EventMng";
- import { LoadingAssetItem, ResCollector } from "../../compment/ResCollector";
- import Context from "../Context";
- import FguiMgr from "../FguiMgr";
- import { ILateUpdate } from "../Interface/ILateUpdate";
- import { IUpdate } from "../Interface/IUpdate";
- import { FguiViewModel } from "./FguiViewModel";
- import { IUIController } from "./IUIController";
- export interface FguiClass<T extends FguiView> {
- new(): T;
- /**
- * fgui的包名
- */
- getPkgName(): string;
- /**
- * fgui包内的UI名字
- */
- getPrefabName(): string;
- /**
- * 类名,用于给UI命名
- */
- getViewName(): string;
- }
- export enum ViewType {
- None,
- /** 非全屏or半屏 */
- Part,
- /** 全屏 */
- Full,
- }
- export abstract class FguiView implements IUpdate, ILateUpdate {
- //#region 静态函数
- /**
- * fgui的包名
- */
- protected static pkgName;
- /**
- * fgui包内的UI名字
- */
- protected static prefabName;
- /**
- * 类名,用于给UI命名
- */
- protected static viewName;
- public static getPkgName(): string {
- return this.pkgName;
- }
- public static getPrefabName(): string {
- return this.prefabName;
- }
- public static getViewName(): string {
- return this.viewName;
- }
- /** 页面类型 */
- public viewType: ViewType = ViewType.None;
- /** 全屏时隐藏页面次数 */
- public fullHideCount: number = 0;
- public addFullHideCount(num: number) {
- this.fullHideCount += num;
- if (this.fullHideCount <= 0) {
- this.fullHideCount = 0;
- this.Panel.visible = true;
- this.OnDisplay(true);
- } else {
- this.Panel.visible = false;
- this.OnDisplay(false);
- }
- }
- public zOrder: number;
- public uiPkgName: string;
- public getZOrder(): number {
- return this.zOrder;
- }
- public OnDisplay(visible: boolean) {
- this._uiController.OnDisplay(visible);
- }
- /**
- * 打开界面的动画是否结束
- */
- public isFinishOpenAni: boolean;
- public getOpenAniState(): boolean {
- return this.isFinishOpenAni;
- }
- //#endregion
- private _context: Context;
- get Context(): Context {
- return this._context;
- }
- private _viewModel: FguiViewModel;
- private _uiController: IUIController;
- private _panel: fgui.GComponent;
- public get Panel(): fgui.GComponent {
- return this._panel;
- }
- public get Controller(): IUIController {
- return this._uiController;
- }
- initForward(panel: fgui.GComponent, context: Context): void {
- this._panel = panel;
- this._context = context;
- this._viewModel = this.createVM(panel);
- let controller = this.CreateCtrl();
- controller[Context.CONTEXT_KEY] = this._context;
- controller[FguiViewModel.VIEW_MODEL_KEY] = this._viewModel;
- this._uiController = controller;
- }
- /**
- * 初始化,资源加载完成后回调
- */
- init(): void {
- this._uiController.OnInited();
- }
- /**
- * 显示,被打开时回调
- * @param intent 上下文
- */
- show(intent?: any): void {
- //避免注册没有被注销
- this._uiController.offEvent()
- this._uiController.RemoveTimers();
- this._uiController.RemoveAllClick();
- if (this.zOrder == ViewZOrder.Pop) {
- //默认打开动画、音效
- GameDataCenter.audio.playEffect(AudioConst.effect_open)
- this.isFinishOpenAni = false
- let animNode = this._panel.node
- animNode.anchorX = 0.5
- animNode.anchorY = 0.5
- cc.Tween.stopAllByTarget(animNode)
- animNode.scale = 0.9
- cc.tween(animNode).to(0.1, { scale: 1 })
- .call(() => {
- this.isFinishOpenAni = true
- }).start()
- } else {
- this.isFinishOpenAni = true
- }
- this._panel.node.active = true;
- this._uiController.ThirdPkgs.forEach(element => {
- FguiMgr.Instance.AddPkgCount(element);
- });
- this._uiController.OnShow(intent);
- }
- /**
- * 隐藏,被关闭时回调
- */
- hide(isDispose?: boolean): void {
- if (this.zOrder == ViewZOrder.Pop) {
- //默认关闭动画、音效
- GameDataCenter.audio.playEffect(AudioConst.effect_open)
- }
- this._uiController.offEvent()
- this._uiController.OnHide(isDispose);
- setTimeout(() => {
- this._uiController.ThirdPkgs.forEach(element => {
- FguiMgr.Instance.DelPkgCount(element);
- });
- }, 1000);
- this._panel.node.active = false;
- this._uiController.RemoveTimers();
- this._uiController.RemoveAllClick();
- EventMng.emit(WindowEvent.CLOSE_UI, this.Panel.node.name + "View");
- }
- /**
- * 释放节点,资源被卸载时回调
- */
- Dispose(): void {
- this._uiController.OnDestroy();
- this._panel = null;
- }
- //#region 接口实现
- OnUpdate(elapseTime: number): void {
- this._uiController.OnUpdate(elapseTime);
- }
- OnLateUpdate(elapseTime: number): void {
- this._uiController.OnLateUpdate(elapseTime);
- }
- //#endregion
- protected abstract createVM(panel: fgui.GComponent): FguiViewModel;
- protected abstract CreateCtrl(): IUIController;
- }
|