143 lines
4.2 KiB
TypeScript
143 lines
4.2 KiB
TypeScript
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;
|
|
}
|
|
|
|
|
|
}
|
|
|