private void CreateContextMenu(Vector2 position) { GenericMenu menu = new GenericMenu(); ClassTier targetTier = selectedTree.GetTierAt(position); if (targetTier != null) { ClassNode targetNode = selectedTree.GetNodeAt(position); if (targetNode != null) { if (targetTier.level == 1 || targetTier.tierType == ClassTierType.Skill) { menu.AddDisabledItem(new GUIContent("Delete Node")); } else { menu.AddItem( new GUIContent("Delete Node"), false, () => { selectedTree.RemoveNode(targetNode); EditorUtility.SetDirty(selectedTree); } ); } } else { if (targetTier.level == 1 || targetTier.tierType == ClassTierType.Skill) { menu.AddDisabledItem(new GUIContent("Create Node")); } else { menu.AddItem( new GUIContent("Create Node"), false, () => { selectedTree.AddNode(targetTier.level); EditorUtility.SetDirty(selectedTree); } ); } } menu.AddSeparator(""); if (targetTier.level == 1) { menu.AddDisabledItem(new GUIContent("Delete Tier")); } else { menu.AddItem( new GUIContent("Delete Tier"), false, () => { selectedTree.RemoveTier(targetTier.level); EditorUtility.SetDirty(selectedTree); } ); } if (selectedTree.ContainsTier(targetTier.level + 1)) { menu.AddDisabledItem(new GUIContent("Add Subclass Tier Below")); menu.AddDisabledItem(new GUIContent("Add Skill Tier Below")); } else { menu.AddDisabledItem(new GUIContent("Add Subclass Tier Below")); menu.AddItem( new GUIContent("Add Skill Tier Below"), false, () => { selectedTree.AddTier(targetTier.level + 1, ClassTierType.Skill); EditorUtility.SetDirty(selectedTree); } ); } } else { // TODO: implement subclasses menu.AddDisabledItem(new GUIContent("Add Subclass Tier")); menu.AddItem( new GUIContent("Add Skill Tier"), false, () => { int highestLevel = 0; foreach (ClassTier tier in selectedTree.Layers.Values) { if (tier.level > highestLevel) { highestLevel = tier.level; } } selectedTree.AddTier(highestLevel + 1, ClassTierType.Skill); EditorUtility.SetDirty(selectedTree); } ); } menu.ShowAsContext(); }
public void RemoveNode(ClassNode node) { nodes.Remove(node); }