private void Signal_NewModMenuActivated(int index) { var controller = ContentPackController.GetControllerForMod(ContentPackController.GetRegisteredControllerTypes()[index]); var mod = ProjectTree.CreateItem(ProjectRoot); mod.SetText(0, $"[{controller.ModAbbreviation}] {ModProject.Name}"); mod.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this mod"); mod.SetMeta(Meta.CorrespondingController, controller.ModUniqueId); ModProject.Mods.Add(controller.OnModCreated(this, mod)); }
public override void _Ready() { EditIcon = GD.Load <Texture>("res://res/icons/edit.png"); AddIcon = GD.Load <Texture>("res://res/icons/add.png"); RemoveIcon = GD.Load <Texture>("res://res/icons/remove.png"); ProjectEditor = GD.Load <PackedScene>("res://ProjectEditor.tscn"); DependencyEditor = GD.Load <PackedScene>("res://DependencyEditor.tscn"); UpdateKeyEditor = GD.Load <PackedScene>("res://UpdateKeyEditor.tscn"); fileMenu = GetNode <MenuButton>("MenuSeparator/MenuPanel/Menu/File"); var filePopup = fileMenu.GetPopup(); filePopup.Connect("index_pressed", this, nameof(Signal_FileMenuActivated)); filePopup.AddItem("New project..."); newModMenu = new PopupMenu() { Name = "NewMod" }; newModMenu.Connect("index_pressed", this, nameof(Signal_NewModMenuActivated)); foreach (var controllerId in ContentPackController.GetRegisteredControllerTypes()) { var controller = ContentPackController.GetControllerForMod(controllerId); newModMenu.AddItem(controller.ModName); } filePopup.AddChild(newModMenu); filePopup.AddSubmenuItem("New content pack...", "NewMod"); filePopup.SetItemDisabled(1, true); filePopup.AddSeparator(); filePopup.AddItem("Save"); var keyHelper = new InputEventKey() { Scancode = (uint)KeyList.S, Control = true, }; filePopup.SetItemAccelerator(3, keyHelper.GetScancodeWithModifiers()); filePopup.SetItemDisabled(3, true); filePopup.AddItem("Open"); keyHelper.Scancode = (uint)KeyList.O; filePopup.SetItemAccelerator(4, keyHelper.GetScancodeWithModifiers()); filePopup.AddSeparator(); filePopup.AddItem("Export"); keyHelper.Scancode = (uint)KeyList.E; filePopup.SetItemAccelerator(6, keyHelper.GetScancodeWithModifiers()); filePopup.SetItemDisabled(6, true); filePopup.AddItem("Import"); keyHelper.Scancode = (uint)KeyList.I; filePopup.SetItemAccelerator(7, keyHelper.GetScancodeWithModifiers()); filePopup.SetItemDisabled(7, true); ProjectTree = GetNode <Tree>("MenuSeparator/Splitter/Left/ProjectTree"); ProjectTree.Connect("button_pressed", this, nameof(Signal_TreeButtonPressed)); ProjectTree.Connect("item_activated", this, nameof(Signal_TreeCellActivated)); ProjectTree.Connect("item_edited", this, nameof(Signal_TreeItemEdited)); MainEditingArea = GetNode <Container>("MenuSeparator/Splitter/Main/PanelContainer"); var confirm = GetNode <ConfirmationDialog>("ConfirmNewProjectDialog"); confirm.Connect("confirmed", this, nameof(Signal_CreateNewProject_Pre)); var confirm2 = GetNode <ConfirmationDialog>("ConfirmOpenProjectDialog"); confirm2.Connect("confirmed", this, nameof(Signal_OpenProject_Pre)); var removal = GetNode <ConfirmationDialog>("PendingRemovalDialog"); removal.Connect("confirmed", this, nameof(Signal_PendingRemovalConfirm)); var createDir = GetNode <FileDialog>("NewProjectDirectoryDialog"); createDir.Connect("dir_selected", this, nameof(Signal_CreateNewProject_SelectedDirectory)); var open = GetNode <FileDialog>("OpenProjectDialog"); open.Connect("file_selected", this, nameof(Signal_OpenProject)); var import = GetNode <FileDialog>("ResourceImportDialog"); import.Connect("files_selected", this, nameof(Signal_ResourceImport_Multiple)); var export = GetNode <FileDialog>("ExportProjectDialog"); export.Connect("dir_selected", this, nameof(Signal_ExportProject)); var importPack = GetNode <FileDialog>("ImportPackDialog"); importPack.Connect("file_selected", this, nameof(Signal_ImportPack)); }
private void Signal_ImportPack(string file) { var manifest = JsonConvert.DeserializeObject <ExportManifest>(System.IO.File.ReadAllText(file)); ContentPackController matchingController = null; foreach (var controller in ContentPackController.GetRegisteredControllerTypes()) { if (controller == manifest.ContentPackFor.UniqueID) { matchingController = ContentPackController.GetControllerForMod(manifest.ContentPackFor.UniqueID); } } if (matchingController == null) { GetNode <AcceptDialog>("UnsupportedPackTypeDialog").PopupCenteredClamped(); return; } foreach (var updateKey in manifest.UpdateKeys) { int colon = updateKey.IndexOf(':'); string keyPlatform = updateKey.Substring(0, colon); string keyId = updateKey.Substring(colon + 1); if (ModProject.UpdateKeys.Find(uk => uk.Platform == keyPlatform) == null) { var uk = new UpdateKey() { Platform = keyPlatform, Id = keyId }; ModProject.UpdateKeys.Add(uk); var updateKeyItem = ProjectTree.CreateItem(updateKeysRoot); updateKeyItem.SetText(0, updateKey); updateKeyItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this update key"); updateKeys.Add(updateKeyItem, uk); } } foreach (var dep in manifest.Dependencies) { if (ModProject.Dependencies.Find(d => d.UniqueID == dep.UniqueID) == null) { ModProject.Dependencies.Add(dep); var depItem = ProjectTree.CreateItem(depsRoot); depItem.SetText(0, dep.UniqueID); depItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this dependency"); deps.Add(depItem, dep); } } var existingMod = ModProject.Mods.Find(md => md.ContentPackFor == matchingController.ModUniqueId); if (existingMod == null) { var mod = ProjectTree.CreateItem(ProjectRoot); mod.SetText(0, $"[{matchingController.ModAbbreviation}] {ModProject.Name}"); mod.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this mod"); mod.SetMeta(Meta.CorrespondingController, matchingController.ModUniqueId); ModProject.Mods.Add(existingMod = matchingController.OnModCreated(this, mod)); } matchingController.OnImport(this, existingMod, System.IO.Path.GetDirectoryName(file)); }