diff options
-rw-r--r-- | src/app/index.html | 12 | ||||
-rw-r--r-- | src/app/main.css | 26 | ||||
-rw-r--r-- | src/app/main.js | 8 | ||||
-rw-r--r-- | src/cli.js | 3 | ||||
-rw-r--r-- | src/index.js | 20 | ||||
-rw-r--r-- | src/lang/en.json | 9 | ||||
-rw-r--r-- | src/utils.js | 20 |
7 files changed, 89 insertions, 9 deletions
diff --git a/src/app/index.html b/src/app/index.html index f5d92e0..ffc31a6 100644 --- a/src/app/index.html +++ b/src/app/index.html @@ -26,6 +26,18 @@ <button id="northstar" onclick="launch()">%%gui.launchnorthstar%%</button> </div> </div> + <div id="modsdiv"> + </div> + <div class="line"> + <div class="text" id="modcount">%%gui.mods%%</div> + <div class="buttons"> + <button id="removemod">%%gui.mods.remove%%</button> + <button id="removeall">%%gui.mods.removeall%%</button> + <button id="togglemod">%%gui.mods.toggle%%</button> + <button id="toggleall">%%gui.mods.toggleall%%</button> + <button id="installmod">%%gui.mods.install%%</button> + </div> + </div> </div> <script src="lang.js"></script> diff --git a/src/app/main.css b/src/app/main.css index c2ca627..c6c9bb9 100644 --- a/src/app/main.css +++ b/src/app/main.css @@ -1,7 +1,9 @@ :root { + --padding: 15px; --disabled: #656E7F; - --background: #4C515B; --foreground: #DDE2EB; + --background: #4C515B; + --boxbackground: #666E7F; --subforeground: #AFAFAF; --btnforeground: var(--foreground); } @@ -10,6 +12,7 @@ :root { --background: #FFFFFF; --foreground: #4C566A; + --boxbackground: #EEF0F4; --btnforeground: var(--background); } } @@ -40,34 +43,40 @@ nobr {white-space: nowrap} .line { display: flex; - margin-top: 15px; + margin-top: var(--padding); +} + +#modsdiv { + border-radius: var(--padding); + background: var(--boxbackground); + margin: calc(var(--padding) / 3) var(--padding); } .buttons { text-align: right; margin-left: auto; user-select: none; - margin-right: 7px; + margin-right: calc(var(--padding) / 1.9); } .text {max-width: 38vw} .buttons {max-width: 55vw} -button, .text { +button, .text, .mod { border: none; outline: none; - padding: 5px 15px; user-select: none; border-radius: 50px; transition: 0.2s ease-in-out; + padding: calc(var(--padding) / 3) var(--padding); } #welcome {padding: 0px} button { - margin-bottom: 10px; color: var(--btnforeground); -webkit-app-region: no-drag; + margin-bottom: calc(var(--padding) / 1.5); } button:hover {opacity: 0.9} @@ -77,8 +86,9 @@ button:active { } -#update {background: #81A1C1} #setpath {background: #5E81AC} -#northstar {background: #C7777F} #vanilla, #exit {background: #656E7F} +#update, #installmod {background: #81A1C1} +#togglemod, #toggleall {background: #ECD19A} +#northstar, #removeall, #removemod {background: #C7777F} button:disabled {background: var(--disabled) !important; opacity: 0.5} diff --git a/src/app/main.js b/src/app/main.js index d30489e..ab80ba9 100644 --- a/src/app/main.js +++ b/src/app/main.js @@ -54,6 +54,14 @@ ipcRenderer.on("newpath", (event, newpath) => { ipcRenderer.on("log", (event, msg) => {log(msg)}) +ipcRenderer.on("mods", (event, mods) => { + modcount.innerHTML = `${lang("gui.mods.count")} ${mods.length}`; + modsdiv.innerHTML = ""; + for (let i = 0; i < mods.length; i++) { + modsdiv.innerHTML += `<div class="mod">${mods[i].Name}</div>`; + } +}) + ipcRenderer.on("version", (event, versions) => { vpversion.innerText = lang("gui.versions.viper") + ": " + versions.vp; nsversion.innerText = lang("gui.versions.northstar") + ": " + versions.ns; @@ -10,6 +10,7 @@ const lang = require("./lang"); function hasArgs() { if (cli.hasSwitch("cli") || cli.hasSwitch("help") || + cli.hasSwitch("mods") || cli.hasSwitch("update") || cli.hasSwitch("launch") || cli.hasSwitch("setpath") || @@ -62,6 +63,8 @@ async function init() { break; } } + + if (cli.hasSwitch("mods")) {ipcMain.emit("getmods")} } module.exports = { diff --git a/src/index.js b/src/index.js index b43611d..511aadb 100644 --- a/src/index.js +++ b/src/index.js @@ -42,6 +42,11 @@ function start() { ipcMain.on("ns-updated", () => {win.webContents.send("ns-updated")}) ipcMain.on("ns-updating", () => {win.webContents.send("ns-updating")}) ipcMain.on("winLog", (event, ...args) => {win.webContents.send("log", ...args)}) + ipcMain.on("guigetmods", (event, ...args) => {win.webContents.send("mods", utils.mods.list())}) + + win.webContents.once("dom-ready", () => { + win.webContents.send("mods", utils.mods.list()); + }); if (utils.settings.autoupdate) {utils.updatevp(false)} @@ -52,7 +57,6 @@ function start() { ipcMain.on("updatenow", () => { autoUpdater.quitAndInstall(); }) - } ipcMain.on("launch", (event) => {utils.launch()}) @@ -77,6 +81,20 @@ ipcMain.on("versioncli", () => { cli.exit(); }) +ipcMain.on("getmods", (event) => { + let mods = utils.mods.list(); + if (mods.length > 0) { + console.log(`${utils.lang("general.mods.installed")} ${mods.length}`) + for (let i = 0; i < mods.length; i++) { + console.log(` ${mods[i].Name} ${mods[i].Version}`) + } + cli.exit(0); + } else { + console.log("No mods installed"); + cli.exit(0); + } +}) + process.chdir(app.getPath("appData")); if (cli.hasArgs()) { diff --git a/src/lang/en.json b/src/lang/en.json index 83f23f3..4221edb 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -25,6 +25,14 @@ "gui.update": "Update", "gui.setpath": "Game Path", + "gui.mods": "Mods", + "gui.mods.count": "Mods Installed:", + "gui.mods.install": "Install Mod", + "gui.mods.toggle": "Toggle Mod", + "gui.mods.toggleall": "Toggle All", + "gui.mods.remove": "Remove Mod", + "gui.mods.removeall": "Remove All", + "gui.update.downloading": "Downloading...", "gui.update.extracting": "Extracting update...", "gui.update.finished": "Done! Ready to play!", @@ -39,5 +47,6 @@ "general.launching": "Launching", + "general.mods.installed": "Installed mods:", "general.missingpath": "Game path is not set!" } diff --git a/src/utils.js b/src/utils.js index 9e6154a..c89a033 100644 --- a/src/utils.js +++ b/src/utils.js @@ -164,7 +164,27 @@ function winLog(msg) { ipcMain.emit("winLog", msg, msg); } +const mods = { + list: () => { + let mods = []; + let modpath = path.join(settings.gamepath, "R2Northstar/mods"); + + files = fs.readdirSync(modpath) + files.forEach((file) => { + if (fs.statSync(path.join(modpath, file)).isDirectory()) { + if (fs.existsSync(path.join(modpath, file, "mod.json"))) { + mods.push(require(path.join(modpath, file, "mod.json"))) + } + } + }) + + return mods; + }, +} + module.exports = { + mods, + lang, winLog, launch, update, |