前缀树红点_第二章
TreeNode树节点的构造函数,有俩; 前者是用于,构建自身,后者,是用于,配合传参,完成父节点Parent的构建赋值; 也会通过this的逻辑,调用自身的Tree节点构建;
AddListener 和 RemoveListener 俩函数接口,分别对应的是,节点触发的Action回调,对应的callback,逻辑绑定和移除
RemoveAllListener函数接口,移除所有的节点监听逻辑,就是把m_ChangeCallback这个Action功能回调,null即可
TreeNode树节点,包含的InternalChangeValue函数接口,通过对比,当前自身Value节点值,和传参newValue,如果相等,直接return就好; 否则,就重新设置Value节点值,触发自身的m_ChangeCallback函数接口,节点值修改回; 再触发管理器的NodeValueChangeCallback修改回调,是对应unity编辑器的显示参数修改,后续会解析; 最后,再调用管理器的MarkDirtyNode函数接口,把父节点Parent标记为脏节点; 后续会解析,跟随一起,触发NodeValueChangeCallback,节点修改回调函数;
AddChild函数接口,是用于,通过范围字符串RangeString类型的key,添加对应该TreeNode的,m_Children子节点集合; 通过ContainsKey机制,判断是否有重复添加; 然后再TreeNode实例化,一个新的TreeNode子节点对象,其中Parent父节点,设置为this自身即可; 最后,也会调用,红点管理器的NodeNumChangeCallback函数回调,触发编辑器的参数显示修改,后续会解析;
获取子节点,对应的是GetChild函数接口,也就是从m_Children字典容器中,TryGetValue提取即可
RemoveChild函数接口,也就是先GetChild获取到,对应的子节点,然后再Remove即可; 需要注意的是,移除子节点后,自身this作为父节点,会标记为脏节点,后续进行,节点变更的,逻辑回调触发; 也会调用,管理器的NodeNumChangeCallback函数回调,触发编辑器的参数显示修改;
RemoveAllChild函数接口,是用于,移除全部子节点,直接调用clear即可,然后也是,把this自身,标记为脏节点,再触发NodeNumChangeCallback对应的,编辑器参数膝盖回调; 而ToString字符串的重写,是输出节点自身,对应的,前缀树完整路径FullPath即可;
有一个GetOrAddChild函数接口,是整合 GetChild 和 AddChild 函数接口,逻辑上,是判断child子节点,是否存在,如果不存在,就通过AddChild函数接口,完成子节点的添加即可
修改节点值的,是ChangeValue函数接口,有两个重载,前者是,修改最末端的,叶子节点,需要判断m_Children子节点数据容器,是否为空,不为空就Exception抛出异常即可,然后再调用,之前解析过的,InternalChangeValue函数接口,把它对应的父节点,标记为脏节点; 后者是,修改非叶子节点对应的,节点值,是foreach遍历,最新的m_Children子节点数据容器中,包含的节点值value叠加,等于的sum总数,再调用InternalChangeValue函数接口,把它的父节点,也设置为脏节点;