예제 #1
0
    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));
    }
예제 #2
0
    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);
            }
        }
    }
예제 #3
0
    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();
        }
    }
예제 #4
0
    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);
        }
    }
예제 #5
0
    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));
    }
예제 #6
0
    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();
    }