/***
*
* Title: "SUIFW" UI框架项目
* 主题: UI遮罩管理器
* Description:
* 功能: 负责“弹出窗体”模态显示实现
*
* Date: 2017
* Version: 0.1版本
* Modify Recoder:
*
*
*/
import { _decorator, Component, Camera, error, Color,Node, Sprite, BlockInputEvents } from "cc";
import { SysDefine, UIFormLucenyType, UIFromType } from "../Config/SysDefine";
const { ccclass, property, menu } = _decorator;
@ccclass
@menu("UIScript/UIMaskMgr")
export class UIMaskMgr extends Component {
/* 字段 */
//本脚本私有单例
private static _Instance: UIMaskMgr = null;
//UI根节点对象
private _GoCanvasRoot: Node = null;
//遮罩面板
private _GoMaskPanel: Node;
/**事件屏蔽组件 */
private _BlockInputEvents:BlockInputEvents;
protected onLoad(): void {
UIMaskMgr._Instance = this.node.getComponent(UIMaskMgr);
this.init_node();
}
//得到实例
public static get Ins(): UIMaskMgr {
return this._Instance;
}
private init_node() {
//得到UI根节点对象、脚本节点对象
this._GoCanvasRoot = this.node.getChildByName(SysDefine.SYS_PATH_CANVAS);
this._GoMaskPanel = this._GoCanvasRoot.getChildByName(SysDefine.SYS_PATH_MASK);
let PopRoot = this._GoCanvasRoot.getChildByName("PopUp");
this._GoMaskPanel.setParent(PopRoot);
this._GoMaskPanel.active = false;
this._BlockInputEvents = this._GoMaskPanel.getComponent(BlockInputEvents);
}
///
/// 设置遮罩状态
///
/// 需要显示的UI窗体
/// 显示透明度属性
public SetMaskWindow(goDisplayUIForms: Node, lucenyType: UIFormLucenyType = UIFormLucenyType.Luceny) {
if (!this._GoCanvasRoot) return;
//启用遮罩窗体以及设置透明度
switch (lucenyType) {
//完全透明,不能穿透
case UIFormLucenyType.Luceny:
this._GoMaskPanel.active = true;
this._BlockInputEvents.enabled = true;
this._GoMaskPanel.getComponent(Sprite).color = SysDefine.SYS_UIMASK_LUCENCY_COLOR_RGB;
break;
//半透明,不能穿透
case UIFormLucenyType.Translucence:
this._GoMaskPanel.active = true;
this._BlockInputEvents.enabled = true;
this._GoMaskPanel.getComponent(Sprite).color = SysDefine.SYS_UIMASK_TRANS_LUCENCY_COLOR_RGB;
break;
//低透明,不能穿透
case UIFormLucenyType.ImPenetrable:
this._GoMaskPanel.active = true;
this._BlockInputEvents.enabled = true;
this._GoMaskPanel.getComponent(Sprite).color = SysDefine.SYS_UIMASK_IMPENETRABLE_COLOR_RGB;
break;
//可以穿透
case UIFormLucenyType.Pentrate:
this._BlockInputEvents.enabled = false;
if (this._GoMaskPanel.active) {
this._GoMaskPanel.active = false;
}
break;
default:
break;
}
//遮罩窗体下移
const layers = this._GoMaskPanel.parent.children.length;
this._GoMaskPanel.setSiblingIndex(this._GoMaskPanel.getSiblingIndex() + (layers - 1))
//显示窗体的下移
goDisplayUIForms.setSiblingIndex(goDisplayUIForms.getSiblingIndex() + layers)
}
///
/// 取消遮罩状态
///
public CancelMaskWindow() {
if (!this._GoCanvasRoot) return;
let childs = this._GoMaskPanel.parent.children;
for (let i = childs.length - 2; i >= 0; i--) {
const tNodeClass = childs[i].getComponent("BaseUIForm");
//@ts-ignore
if (childs[i] != this._GoMaskPanel && tNodeClass && tNodeClass.mUIType.FromsType == UIFromType.PopUp) {
//@ts-ignore
this.SetMaskWindow(childs[i], tNodeClass.mUIType.FormsLucenyType);
return;
}
}
//禁用遮罩窗体
if (this._GoMaskPanel.active) {
//隐藏
this._GoMaskPanel.active = false;
}
}
}