import { Node } from "cc"; import { RedCondEvent } from "./RedPointCoust"; import { IRedTreeCond } from "./RedPointTree"; import RedPointTrees from "./RedPointTrees"; import { RedPointTreeNode } from "./RedPointTreeNode"; import { RedPointInfo } from "./RedPointInfo"; export class RedPoint { private static _Inst: RedPoint; public static get Inst(): RedPoint { if (!RedPoint._Inst) { RedPoint._Inst = new RedPoint(); } return RedPoint._Inst; } public static initId: number = 0; /** * 所有红点 */ private mRedPoint: RedPointTrees = new RedPointTrees(); /** * 每个条件一个key 对应tree上的条件key列表 */ private mRedCondKeys: Map> = new Map>(); /** * 页面刷新列表 */ private mRedUINodeMap: Map> = new Map>(); /** * 插入key * @param key * @param showType * @returns */ public insertRedPoint(key: RedPointTreeNode, parentTree: RedPointTreeNode, callBack: Function): RedPointTreeNode { let item = this.mRedPoint.getRedPointTree(key.Id); if (item == null) { if (this.mRedPoint != null) { this.mRedPoint.insertPoint(key, parentTree, callBack); return key; } } return key; } /** * * @param key 唯一值 * @param isShow false 不显示,true 显示 * @param showCount 数字展示时显示的数字 */ public updateRedPoint(key: RedPointTreeNode, isShow: boolean = false, showCount: number = 0) { let value = this.mRedPoint.getRedPointTree(key.Id); if (value) { value.updateRedPoint(isShow, showCount); } } /** * @param key 绑定节点 * @param node * @param showType 展示类型 * @param showCount 展示数量 */ public bind(key: RedPointTreeNode, node: Node, showType: number = 0) { let item = this.mRedPoint.getRedPointTree(key.Id) if (item == null) { console.warn('节点树未初始化', key); } else { let info = node.getChildByName('RedPoint').getComponent(RedPointInfo); item.bindInfo(info, showType); } } /** * 增加判断条件 * @param key * @param redCondition */ public AddRedCondition(key: RedPointTreeNode, node: RedPointTreeNode, redCondition: IRedTreeCond) { let treeNode = this.mRedPoint.mChildrenNode.get(key.Id); if (treeNode) { treeNode.addCond(redCondition); } this.AddRedCondKeys(redCondition.condEvent, node) } /** * * @param UIId 页面Id(用来查找在什么树节点上的UI) * @param key 要刷新节点绑定节点的key值 * @param isClean 是否清理 */ public addRefresh(UIId: string, node: RedPointTreeNode, isClean: boolean = false) { if (isClean) { this.mRedUINodeMap.set(UIId, []); } let data = this.mRedUINodeMap.get(UIId); if (data == null) { data = new Array(); } data.push(node); this.mRedUINodeMap.set(UIId, data); } /** * 刷新页面红点 * @param uikey 页面Id(用来查找在什么树节点上的UI) */ public refrashLayer(uikey: string) { let data = this.mRedUINodeMap.get(uikey) for (let index = 0; index < data.length; index++) { const value = data[index]; if (value) { value.refresh(); } } } /** * 添加key到条件树 * @param event 条件类型 * @param key 节点树key值 */ private AddRedCondKeys(event: RedCondEvent, key: RedPointTreeNode) { let keysData = this.mRedCondKeys.get(event); if (keysData == null) { keysData = new Array(); } keysData.push(key) this.mRedCondKeys.set(event, keysData); } /** * 更新条件 * @param event 条件 * @param currValue 更新当前值 */ public updateCondition(event: IRedTreeCond) { let keysData = this.mRedCondKeys.get(event.condEvent); if (keysData) { for (const key in keysData) { if (Object.prototype.hasOwnProperty.call(keysData, key)) { const element = keysData[key]; if (element) { element.updateCondCount(event); } } } } else { console.warn("没有条件", event); } } /** * 删除判断条件 * @param key 删除判断条件的节点树key * @param redEvent 条件类型 */ public removeRedCondition(key: RedPointTreeNode, redEvent: string) { let treeNode = this.mRedPoint.mChildrenNode.get(key.Id); if (treeNode) { treeNode.removeCond(redEvent); } } // /** // * 获取父节点key值 // * @param key key // * // * @returns // */ // public getParentKey(key: string): string { // let keys = key.split('_'); // let _key: string = keys[0]; // if (keys.length > 1) { // for (let id = 1; id < keys.length - 1; id++) { // const element = keys[id]; // _key += '_' + element; // } // } // return _key; // } } let RedTools: RedPoint = RedPoint.Inst; export default RedTools;