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

143 lines
4.1 KiB
TypeScript
Raw Normal View History

2025-02-07 10:49:34 +08:00
import { _decorator, Node } from 'cc';
import { IRedPointData } from './IRedPointData';
import { RedPointInfo } from './RedPointInfo';
import { RedPointTree } from './RedPointTree';
const { ccclass, property } = _decorator;
@ccclass('RedPointBase')
export default class RedPointBase {
// public mChildrenNode:Array<RedPointTree>=new Array<RedPointTree>();
public redTree: RedPointTree = null;
public init(key: string) {
if (this.redTree == null) {
this.redTree = new RedPointTree();
}
let data: IRedPointData = {
mId: key,
mName: key,
mFunctionId: 0,
mParent: null,
mRedNode: null,
mParentNode: null,
mRefreshType: 0,
mShowCount: 0,
mShowType: -1
};
this.redTree.initData(key, data);
}
/**
*
* @param key Id
* @param showType ()
* @returns
*/
public insertPoint(key: string, showType: number = 0): RedPointTree {
let keys = key.split('_');
let redTree: RedPointTree = this.redTree.findChild(key);
if (redTree != null) {
return redTree;
}
if (keys.length > 1) {
let parentKey = this.getParentKey(key);
let parentTree = this.redTree.findChild(parentKey);
if (parentTree == null) {
if (parentKey == this.redTree.id) {
parentTree = this.redTree;
} else {
parentTree = this.insertPoint(parentKey, showType);
}
}
let childTree = parentTree.getOrAddChild(key);
// childTree.parentTree = parentTree;
childTree.data.mParent = parentTree;
return childTree;
} else {
return this.redTree;
}
}
public updateRedPoint(key: string, isShow: boolean, showCount: number) {
if (this.redTree && this.redTree.id == key) {
this.redTree.updateRedPoint(isShow, showCount)
return;
}
let redPointInfo = this.redTree.findChild(key);
if (redPointInfo != null) {
redPointInfo.setRedSelf(isShow);
redPointInfo.updateRedPoint(isShow, showCount);
} else {
console.warn("updateRedPoint error, key:" + key);
}
}
/**
*
* @param key
* @returns
*/
public getRedPointTree(key: string): RedPointTree {
if (this.redTree != null && this.redTree.id == key) {
return this.redTree;
}
if (this.redTree != null) {
return this.redTree.findChild(key);
}
return null;
}
/**
*
*
* @param key
* @param node
* @param showType
*/
public bindRedPoint(key: string, node: Node, showType: number = 0, isSelfControl: boolean = false) {
if (this.redTree != null && key == this.redTree.id) {
if (this.redTree.data) {
this.init(key);
}
this.redTree.data.mRedNode = node;
let info = node.getChildByName('RedPoint').getComponent(RedPointInfo);
this.redTree.bindInfo(info, showType, isSelfControl);
} else {
let redPoint: RedPointTree = this.redTree.findChild(key);
if (redPoint == null) {
redPoint = this.insertPoint(key, showType);
}
redPoint.data.mRedNode = node;
let info = node.getChildByName('RedPoint').getComponent(RedPointInfo);
redPoint.bindInfo(info, showType, isSelfControl);
}
}
/**
* 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;
}
}