2025-02-17 21:36:37 +08:00
|
|
|
|
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<string, Array<RedPointTreeNode>> = new Map<string, Array<RedPointTreeNode>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 页面刷新列表
|
|
|
|
|
*/
|
|
|
|
|
private mRedUINodeMap: Map<string, Array<RedPointTreeNode>> = new Map<string, Array<RedPointTreeNode>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 插入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<RedPointTreeNode>();
|
|
|
|
|
}
|
|
|
|
|
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<RedPointTreeNode>();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-07 10:49:34 +08:00
|
|
|
|
export default RedTools;
|