73 lines
1.8 KiB
C#
73 lines
1.8 KiB
C#
|
|
using cfg.RedPoint;
|
|||
|
|
using UnityEngine;
|
|||
|
|
using Debug = DebugUtil;
|
|||
|
|
|
|||
|
|
public partial class RedPointManager
|
|||
|
|
{
|
|||
|
|
const int RED_POINT_NODE_DYNAMIC_ID_START = 10000;
|
|||
|
|
|
|||
|
|
private int _allocID = RED_POINT_NODE_DYNAMIC_ID_START;
|
|||
|
|
|
|||
|
|
public RedPointNode AddDynamicNode(NodeType nodeType, int parentID)
|
|||
|
|
{
|
|||
|
|
_allocID++;
|
|||
|
|
var node = GetANode(_allocID, nodeType);
|
|||
|
|
if (node == null)
|
|||
|
|
{
|
|||
|
|
Debug.LogError($"添加动态节点失败!nodeType:{nodeType}");
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (parentID != RED_POINT_NODE_ROOT_FLAG)
|
|||
|
|
{
|
|||
|
|
var parent = GetNodeByID(parentID);
|
|||
|
|
if (parent != null)
|
|||
|
|
{
|
|||
|
|
node.parent = parent;
|
|||
|
|
parent.AddChild(node);
|
|||
|
|
parent.SendChange();
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
Debug.LogError($"找不到父节点,parent id:{parentID}");
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
_treeRoots.Add(node);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_nodeDic.Add(_allocID, node);
|
|||
|
|
node.Init();
|
|||
|
|
return node;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void RemoveDynamicNode(RedPointNode node)
|
|||
|
|
{
|
|||
|
|
if (node == null || node.ID <= RED_POINT_NODE_DYNAMIC_ID_START)
|
|||
|
|
{
|
|||
|
|
Debug.LogError("删除动态节点失败! node非法!");
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
_nodeDic.Remove(_allocID);
|
|||
|
|
if (node.parent == null)
|
|||
|
|
_treeRoots.Remove(node);
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
node.parent.RemoveChild(node);
|
|||
|
|
node.parent.SendChange();
|
|||
|
|
}
|
|||
|
|
node.ForeachChild(RemoveDynamicNode);
|
|||
|
|
node.Dispose();
|
|||
|
|
node.SendChange();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public void RemoveDynamicNode(int id)
|
|||
|
|
{
|
|||
|
|
var node = GetNodeByID(id);
|
|||
|
|
RemoveDynamicNode(node);
|
|||
|
|
}
|
|||
|
|
}
|