コード例 #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
    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));
    }
コード例 #3
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));
    }