protected override TreeViewItem BuildRoot() { MissionTreeItem root = new MissionTreeItem(); GameDatabase.ActiveInstance.GetCurrentMission().factions.ForEach((faction) => { MissionTreeItem factionItem = new MissionTreeItem(faction); faction.flightGroups.ForEach((flightGroup) => { MissionTreeItem flightGroupItem = new MissionTreeItem(flightGroup); factionItem.AddChild(flightGroupItem); flightGroup.entities.ForEach((entity) => { flightGroupItem.AddChild(new MissionTreeItem(entity)); }); }); root.AddChild(factionItem); }); if (!root.hasChildren) { root.children = new List <TreeViewItem>(); } SetupDepthsFromParentsAndChildren(root); return(root); }
private List <MissionAsset> GetSelectionOfSameType(IList <int> selectedIds) { if (selectedIds.Count == 0) { return(null); } List <MissionAsset> retn = new List <MissionAsset>(selectedIds.Count); MissionTreeItem firstItem = FindMissionItem(selectedIds[0]); if (firstItem == null) { return(null); } ItemType itemType = firstItem.itemType; retn.Add(firstItem.asset); for (int i = 1; i < selectedIds.Count; i++) { MissionTreeItem item = FindMissionItem(selectedIds[i]); if (item.itemType != itemType) { return(null); } retn.Add(item.asset); } return(retn); }
protected override void DoubleClickedItem(int id) { MissionTreeItem item = FindMissionItem(id); Entity entity = GameDatabase.ActiveInstance.SceneEntityFromDefinitionId(item.id); EditorGUIUtility.PingObject(entity?.gameObject); Selection.objects = new Object[] { entity?.gameObject }; }
private void OnFlightGroupDrop(FlightGroupDefinition child, MissionAsset dropTarget, int index) { MissionTreeItem dropTargetItem = FindMissionItem(dropTarget.id); FactionDefinition faction = dropTarget as FactionDefinition; FlightGroupDefinition flightGroup = dropTarget as FlightGroupDefinition; if (faction != null) { db.GetCurrentMission().SetFlightGroupFaction(child, faction, index); } else if (flightGroup != null) { db.GetCurrentMission().SetFlightGroupFaction(child, dropTargetItem.GetFaction(), index); } }
public bool CanDropOn(MissionTreeItem droppedOn) { switch (itemType) { case ItemType.Entity: return(!droppedOn.IsRoot); case ItemType.Faction: return(droppedOn.IsRoot); case ItemType.FlightGroup: return(droppedOn.IsFaction || droppedOn.IsFlightGroup); } return(false); }
private void OnEntityDrop(EntityDefinition entity, MissionAsset dropTarget, int index) { MissionTreeItem dropTargetItem = FindMissionItem(dropTarget.id); FactionDefinition factionDefinition = dropTarget as FactionDefinition; if (factionDefinition != null) { db.GetCurrentMission().SetEntityFaction(entity, factionDefinition, index); } else if (dropTarget is EntityDefinition) { db.GetCurrentMission().SetEntityFlightGroup(entity, dropTargetItem.GetFlightGroup(), index); } else if (dropTarget is FlightGroupDefinition) { db.GetCurrentMission().SetEntityFlightGroup(entity, (FlightGroupDefinition)dropTarget, index); } }
protected override void ContextClickedItem(int itemId) { MissionTreeItem item = FindMissionItem(itemId); GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Create Entity"), false, () => { SelectFireAndFrame(db.GetCurrentMission().CreateEntityDefinition(item.GetFlightGroup()).id); }); menu.AddItem(new GUIContent("Create Faction"), false, () => { SelectFireAndFrame(db.GetCurrentMission().CreateFaction().id); }); menu.AddItem(new GUIContent("Create Flight Group"), false, () => { SelectFireAndFrame(db.GetCurrentMission().CreateFlightGroup(item.GetFaction()).id); }); menu.AddSeparator(""); menu.AddItem(new GUIContent($"Delete {item.displayName}"), false, () => { db.GetCurrentMission().DeleteAsset(item.asset); ClearSelection(); Reload(); }); menu.ShowAsContext(); Event.current.Use(); }
protected override DragAndDropVisualMode HandleDragAndDrop(DragAndDropArgs args) { if (args.performDrop) { if (args.dragAndDropPosition == DragAndDropPosition.OutsideItems) { return(DragAndDropVisualMode.Rejected); } MissionTreeItem droppedItem = FindMissionItem((int)DragAndDrop.GetGenericData("MissionEditor_Drag")); if (args.parentItem == rootItem && !droppedItem.IsFaction) { return(DragAndDropVisualMode.None); } MissionTreeItem droppedOn = ToMissionItem(args.parentItem); if (!droppedItem.CanDropOn(droppedOn)) { return(DragAndDropVisualMode.Rejected); } if (droppedItem.CanDropOn(droppedOn)) { switch (args.dragAndDropPosition) { case DragAndDropPosition.BetweenItems: if (droppedItem.IsEntity) { OnEntityDrop(droppedItem.GetEntity(), droppedOn.asset, args.insertAtIndex); } else if (droppedItem.IsFlightGroup) { OnFlightGroupDrop(droppedItem.GetFlightGroup(), droppedOn.asset, args.insertAtIndex); } else if (droppedItem.IsFaction) { OnFactionDrop(droppedItem.GetFaction(), args.insertAtIndex); } break; case DragAndDropPosition.UponItem: if (droppedItem.IsEntity) { OnEntityDrop(droppedItem.GetEntity(), droppedOn.GetFlightGroup(), -1); } else if (droppedItem.IsFlightGroup) { OnFlightGroupDrop(droppedItem.GetFlightGroup(), droppedOn.GetFaction(), -1); } else if (droppedItem.IsFaction) { OnFactionDrop(droppedItem.GetFaction(), args.insertAtIndex); } break; } } } return(DragAndDropVisualMode.Move); }