private void DrawHierachyNodes(TreeData treeData, List<HierachyNode> nodes, TreeGroup group, Vector2 offset, float alpha, float fade)
{
if (((this.dragNode != null) && this.isDragging) && (this.dragNode.group == group))
{
alpha = 0.5f;
fade = 0.75f;
}
Vector3 vector = new Vector3(0f, this.hierachyNodeSize.y * 0.5f, 0f);
Vector3 vector2 = new Vector3(offset.x, offset.y);
Handles.color = new Color(0f, 0f, 0f, 0.5f * alpha);
if (EditorGUIUtility.isProSkin)
{
Handles.color = new Color(0.4f, 0.4f, 0.4f, 0.5f * alpha);
}
HierachyNode node = null;
for (int i = 0; i < nodes.Count; i++)
{
if (group == nodes[i].group)
{
node = nodes[i];
break;
}
}
if (node != null)
{
for (int j = 0; j < group.childGroupIDs.Length; j++)
{
TreeGroup group2 = treeData.GetGroup(group.childGroupIDs[j]);
for (int m = 0; m < nodes.Count; m++)
{
if (nodes[m].group == group2)
{
Handles.DrawLine((node.pos + vector2) - vector, (nodes[m].pos + vector2) + vector);
}
}
}
Rect position = node.rect;
position.x += offset.x;
position.y += offset.y;
int index = 0;
if (node == this.dropNode)
{
index = 1;
}
else if (s_SelectedGroup == node.group)
{
if (s_SelectedNode != null)
{
index = 1;
}
else
{
index = 1;
}
}
GUI.backgroundColor = new Color(1f, 1f, 1f, alpha);
GUI.contentColor = new Color(1f, 1f, 1f, alpha);
GUI.Label(position, GUIContent.none, styles.nodeBoxes[index]);
Rect rect2 = new Rect((position.x + (position.width / 2f)) - 4f, position.y - 2f, 0f, 0f);
Rect rect3 = new Rect((position.x + (position.width / 2f)) - 4f, (position.y + position.height) - 2f, 0f, 0f);
Rect rect4 = new Rect(position.x + 1f, position.yMax - 36f, 32f, 32f);
Rect rect5 = new Rect(position.xMax - 18f, position.yMax - 18f, 16f, 16f);
Rect rect6 = new Rect(position.x, position.y, position.width - 2f, 16f);
bool flag = true;
int num5 = 0;
GUIContent gUIContent = new GUIContent();
System.Type type = group.GetType();
if (type != typeof(TreeGroupBranch))
{
if (type == typeof(TreeGroupLeaf))
{
gUIContent = TreeEditorHelper.GetGUIContent("|Leaf Group");
num5 = 3;
}
else if (type == typeof(TreeGroupRoot))
{
gUIContent = TreeEditorHelper.GetGUIContent("|Tree Root Node");
num5 = 4;
flag = false;
}
}
else
{
gUIContent = TreeEditorHelper.GetGUIContent("|Branch Group");
TreeGroupBranch branch = (TreeGroupBranch) group;
switch (branch.geometryMode)
{
case TreeGroupBranch.GeometryMode.BranchFrond:
num5 = 0;
break;
case TreeGroupBranch.GeometryMode.Branch:
num5 = 1;
break;
case TreeGroupBranch.GeometryMode.Frond:
num5 = 2;
break;
}
}
if (flag)
{
Rect hierachyNodeVisRect = this.GetHierachyNodeVisRect(position);
GUIContent content = TreeEditorHelper.GetGUIContent("|Show / Hide Group");
content.image = styles.visibilityIcons[!group.visible ? 1 : 0].image;
GUI.contentColor = new Color(1f, 1f, 1f, 0.7f);
if (GUI.Button(hierachyNodeVisRect, content, GUIStyle.none))
{
group.visible = !group.visible;
GUI.changed = true;
}
GUI.contentColor = Color.white;
}
gUIContent.image = styles.nodeIcons[num5].image;
GUI.contentColor = new Color(1f, 1f, 1f, !group.visible ? 0.5f : 1f);
if (GUI.Button(rect4, gUIContent, GUIStyle.none) || (this.dragNode == node))
{
TreeGroup group3 = s_SelectedGroup;
this.SelectGroup(group);
if (group3 == s_SelectedGroup)
{
Tree target = base.target as Tree;
this.FrameSelected(target);
}
}
GUI.contentColor = Color.white;
if (group.CanHaveSubGroups())
{
GUI.Label(rect2, GUIContent.none, styles.pinLabel);
}
if (flag)
{
GUIContent content3 = TreeEditorHelper.GetGUIContent("|Node Count");
content3.text = group.nodeIDs.Length.ToString();
GUI.Label(rect6, content3, styles.nodeLabelTop);
if (this.m_TreeEditorHelper.NodeHasWrongMaterial(group))
{
GUI.DrawTexture(rect5, ConsoleWindow.iconErrorSmall);
}
else if (group.lockFlags != 0)
{
GUI.DrawTexture(rect5, styles.warningIcon.image);
}
GUI.Label(rect3, GUIContent.none, styles.pinLabel);
}
for (int k = 0; k < group.childGroupIDs.Length; k++)
{
TreeGroup group4 = treeData.GetGroup(group.childGroupIDs[k]);
this.DrawHierachyNodes(treeData, nodes, group4, offset, alpha * fade, fade);
}
GUI.backgroundColor = Color.white;
GUI.contentColor = Color.white;
}
}