protected override TreeViewItem BuildRoot() { TreeViewItem root = new TreeViewItem(-9999, -1); IReadonlyListX <ShipTypeGroup> shipTypes = GameDatabase.ActiveInstance.GetAssetList <ShipTypeGroup>(); for (int i = 0; i < shipTypes.Count; i++) { ShipTypeGroupItem item = new ShipTypeGroupItem(i, shipTypes[i]); root.AddChild(item); if (shipTypes[i].ships == null) { shipTypes[i].ships = new List <ShipType>(); } for (int j = 0; j < shipTypes[i].ships.Count; j++) { ShipType shipType = shipTypes[i].ships[j]; item.AddChild(new ShipTypeItem(j, shipType)); } } if (root.children == null) { root.children = new List <TreeViewItem>(); } SetupDepthsFromParentsAndChildren(root); return(root); }
protected override void SelectionChanged(IList <int> selectedIds) { int id = selectedIds.Count > 0 ? selectedIds[0] : -1; TreeViewItem item = FindItem(id, rootItem); ShipTypeGroupItem typeGroupItem = item as ShipTypeGroupItem; ShipTypeItem shipItem = item as ShipTypeItem; selectionChanged?.Invoke(new ShipTreeViewSelection(typeGroupItem?.shipTypeGroup, shipItem?.shipType)); }
protected override void ContextClickedItem(int id) { GenericMenu menu = new GenericMenu(); TreeViewItem item = FindItem(id, rootItem); Debug.Assert(item != null, "item != null"); ShipTypeGroupItem typeGroupItem = item as ShipTypeGroupItem; if (typeGroupItem != null) { menu.AddItem(new GUIContent("Create Ship Group"), false, () => { SetDataRebuildAndSelect(GameDatabase.ActiveInstance.CreateAsset <ShipTypeGroup>().id); }); menu.AddItem(new GUIContent("Create Ship Type"), false, () => { ShipType shipType = GameDatabase.ActiveInstance.CreateAsset <ShipType>(); GameDatabase.ActiveInstance.FindAsset <ShipTypeGroup>(typeGroupItem.shipTypeGroup.id).ships.Add(shipType); SetDataRebuildAndSelect(shipType.id); }); menu.AddSeparator(string.Empty); menu.AddItem(new GUIContent($"Delete Ship Group {typeGroupItem.displayName}"), false, () => { GameDatabase.ActiveInstance.DestroyAsset(typeGroupItem.shipTypeGroup); SetDataRebuildAndSelect(); }); } else if (item is ShipTypeItem) { menu.AddItem(new GUIContent("Create Ship Type"), false, () => { ShipType shipType = GameDatabase.ActiveInstance.CreateAsset <ShipType>(); GameDatabase.ActiveInstance.FindAsset <ShipTypeGroup>(((ShipTypeItem)item).shipType.id).ships.Add(shipType); SetDataRebuildAndSelect(shipType.id); }); menu.AddSeparator(string.Empty); menu.AddItem(new GUIContent($"Delete Ship Type {item.displayName}"), false, () => { GameDatabase.ActiveInstance.DestroyAsset(((ShipTypeItem)item).shipType); SetDataRebuildAndSelect(); }); } menu.ShowAsContext(); Event.current.Use(); }