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=new Array(); 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; } }