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)); }
private void Signal_TreeButtonPressed(TreeItem item, int column, int id) { if (id == REMOVE_BUTTON_INDEX) { pendingRemoval = item; var confirm = GetNode <ConfirmationDialog>("PendingRemovalDialog"); confirm.PopupCenteredClamped(); } else if (id == ADD_BUTTON_INDEX) { if (item == depsRoot) { Dependency dep; ModProject.Dependencies.Add(dep = new Dependency() { UniqueID = "mod.id" }); 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); } else if (item == updateKeysRoot) { UpdateKey updateKey; ModProject.UpdateKeys.Add(updateKey = new UpdateKey() { Platform = "Nexus" }); var updateKeyItem = ProjectTree.CreateItem(updateKeysRoot); updateKeyItem.SetText(0, "Nexus:"); updateKeyItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this update key"); updateKeys.Add(updateKeyItem, updateKey); } else if (item == resourcesRoot) { var import = GetNode <FileDialog>("ResourceImportDialog"); import.PopupCenteredClamped(); } else if (item.GetMeta(Meta.CorrespondingController) != null) { var controller = ContentPackController.GetControllerForMod((string)item.GetParent().GetMeta(Meta.CorrespondingController)); var data = ModProject.Mods.Find(md => md.ContentPackFor == controller.ModUniqueId); controller.OnAdded(this, data, item); } } }
private void CreateNewProject(bool loading = false) { if (ProjectRoot != null) { ProjectRoot.GetParent().RemoveChild(ProjectRoot); } if (projectDirWatcher != null) { projectDirWatcher.EnableRaisingEvents = false; projectDirWatcher = null; } if (!loading) { ModProject = new Project(); } ProjectRoot = ProjectTree.CreateItem(); ProjectRoot.SetText(0, "My Project 1.0.0"); ProjectRoot.DisableFolding = true; depsRoot = ProjectTree.CreateItem(ProjectRoot); depsRoot.SetText(0, "Dependencies"); depsRoot.AddButton(0, AddIcon, ADD_BUTTON_INDEX, tooltip: "Add a dependency"); updateKeysRoot = ProjectTree.CreateItem(ProjectRoot); updateKeysRoot.SetText(0, "Update Keys"); updateKeysRoot.AddButton(0, AddIcon, ADD_BUTTON_INDEX, tooltip: "Add an update key"); resourcesRoot = ProjectTree.CreateItem(ProjectRoot); resourcesRoot.SetText(0, "Resources"); resourcesRoot.AddButton(0, AddIcon, ADD_BUTTON_INDEX, tooltip: "Import a resource"); fileMenu.GetPopup().SetItemDisabled(1, false); fileMenu.GetPopup().SetItemDisabled(3, false); fileMenu.GetPopup().SetItemDisabled(6, false); fileMenu.GetPopup().SetItemDisabled(7, false); if (!loading) { SaveProject(); InitFileSystemWatcher(); } }
private void WatchProjectDir_Create(object sender, FileSystemEventArgs e) { var filename = System.IO.Path.GetFileName(e.Name); if (filename == justRenamedInUi) { justRenamedInUi = null; return; } var ext = System.IO.Path.GetExtension(filename); if (ext == ".png" || ext == ".tbin" || ext == ".tmx" || ext == ".json" || ext == ".xnb") { var resItem = ProjectTree.CreateItem(resourcesRoot); resItem.SetText(0, filename); resItem.SetEditable(0, true); resItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Delete this resource"); resourcesNames.Add(resItem, filename); } }
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)); }
private void Signal_OpenProject(string path) { string json = System.IO.File.ReadAllText(path); var verCheck = JsonConvert.DeserializeObject <VersionCheck>(json); if (verCheck.FormatVersion != Project.LATEST_VERSION) { GD.Print($"Bad version {verCheck.FormatVersion}, expected {Project.LATEST_VERSION}."); return; } GD.Print("Opening " + path); JsonSerializerSettings settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.Objects, }; ModProjectDir = System.IO.Path.GetDirectoryName(path); ModProject = JsonConvert.DeserializeObject <Project>(json, settings); CreateNewProject(loading: true); ProjectRoot.SetText(0, $"{ModProject.Name} {ModProject.Version}"); foreach (var dep in ModProject.Dependencies) { GD.Print($"Dependency: {dep.UniqueID}"); var depItem = ProjectTree.CreateItem(depsRoot); depItem.SetText(0, $"{dep.UniqueID} {dep.MinimumVersion}"); depItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this dependency"); deps.Add(depItem, dep); } foreach (var updateKey in ModProject.UpdateKeys) { GD.Print($"Update key: {updateKey.Platform}"); var updateKeyItem = ProjectTree.CreateItem(updateKeysRoot); updateKeyItem.SetText(0, $"{updateKey.Platform}:{updateKey.Id}"); updateKeyItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this update key"); updateKeys.Add(updateKeyItem, updateKey); } foreach (var mod in ModProject.Mods) { GD.Print($"Mod: {mod.ContentPackFor}"); var controller = ContentPackController.GetControllerForMod(mod.ContentPackFor); var modItem = ProjectTree.CreateItem(ProjectRoot); modItem.SetText(0, $"[{controller.ModAbbreviation}] {ModProject.Name}"); modItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Remove this mod"); modItem.SetMeta(Meta.CorrespondingController, controller.ModUniqueId); controller.OnLoad(this, mod, modItem); } foreach (var filename_ in System.IO.Directory.GetFiles(ModProjectDir)) { var filename = System.IO.Path.GetFileName(filename_); var ext = System.IO.Path.GetExtension(filename); if (ext == ".png" || ext == ".tbin" || ext == ".tmx" || ext == ".json" || ext == ".xnb") { var resItem = ProjectTree.CreateItem(resourcesRoot); resItem.SetText(0, filename); resItem.SetEditable(0, true); resItem.AddButton(0, RemoveIcon, REMOVE_BUTTON_INDEX, tooltip: "Delete this resource"); resourcesNames.Add(resItem, filename); } } InitFileSystemWatcher(); }