squidGame/tgx-games-client/assets/module_basic/red/RedPoint.ts

209 lines
5.8 KiB
TypeScript
Raw Normal View History

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 IdUI
* @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 IdUI
*/
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;