2022-11-30 01:58:33 +00:00
|
|
|
var fs = require("fs");
|
|
|
|
var json;
|
|
|
|
var nameGetter = /(.*?)(?=[0-9]+$)/gm;
|
|
|
|
var parser = new DOMParser();
|
2022-11-30 18:32:19 +00:00
|
|
|
var jsonbinds;
|
|
|
|
var xmllist;
|
|
|
|
var dirpath;
|
2022-11-30 01:58:33 +00:00
|
|
|
const { ipcRenderer } = require('electron');
|
|
|
|
const pathjs = require('path');
|
|
|
|
|
|
|
|
function loadForm(path) {
|
|
|
|
json = JSON.parse(fs.readFileSync(pathjs.join(path, "config.json")));
|
|
|
|
console.log(json);
|
2022-11-30 18:32:19 +00:00
|
|
|
|
2022-11-30 01:58:33 +00:00
|
|
|
seeValidBinds(pathjs.join(path, "char.xml"));
|
|
|
|
ipcRenderer.invoke('resizeToSprite', 600, 400);
|
|
|
|
document.querySelector("input#idle").value = json.binds.idle;
|
|
|
|
document.querySelector("input#zoom").value = json.charZoom;
|
|
|
|
document.querySelector("input#opacity").value = json.opacity;
|
|
|
|
document.querySelector("input#fps").value = json.fps;
|
2022-11-30 18:32:19 +00:00
|
|
|
document.querySelector("div#presets").innerHTML = getPresets(path);
|
|
|
|
document.querySelector("div#xmlPres").innerHTML = getImages(path);
|
2022-11-30 01:58:33 +00:00
|
|
|
if (json.align) {
|
|
|
|
document.querySelector("#alignRadioLeft").checked = isTrue(json.align[0]);
|
|
|
|
document.querySelector("#alignRadioRight").checked = isTrue(json.align[1]);
|
|
|
|
document.querySelector("#alignRadioUp").checked = isTrue(json.align[2]);
|
|
|
|
document.querySelector("#alignRadioDown").checked = isTrue(json.align[3]);
|
|
|
|
}
|
|
|
|
var binds = json.binds;
|
|
|
|
binds.idle = undefined;
|
|
|
|
document.querySelector("textarea#binds").value = JSON.stringify(json.binds, null, 2);
|
|
|
|
}
|
|
|
|
|
2022-11-30 18:32:19 +00:00
|
|
|
function getImages(path) {
|
|
|
|
xmllist = fs.readdirSync(pathjs.join(path, "xmls")).filter((v) => {
|
|
|
|
return v.endsWith(".xml");
|
|
|
|
});
|
|
|
|
return reloadImages();
|
|
|
|
}
|
|
|
|
|
|
|
|
function reloadImages() {
|
|
|
|
var html = [];
|
|
|
|
Object.entries(xmllist).forEach((xml) => {
|
|
|
|
console.log(xml);
|
|
|
|
html.push(`<div class="bind"><span>${xml[1]}</span><br /><button onclick='loadImage("${xml[1]}")'>^</button></div>`);
|
|
|
|
});
|
|
|
|
return html.join("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadImage(xmlName) {
|
|
|
|
var xmlTemp = fs.readFileSync(pathjs.join(dirpath, "xmls", xmlName), {encoding: "utf-8"});
|
|
|
|
var pngName = parser.parseFromString(xmlTemp.replace(/[^ \S]/gm, ""), "text/xml").getElementsByTagName("TextureAtlas")[0].getAttribute("imagePath");
|
|
|
|
document.querySelector("input#xmlPath").value = pathjs.join(dirpath, "xmls", xmlName);
|
|
|
|
document.querySelector("input#filePath").value = pathjs.join(dirpath, "xmls", pngName);
|
|
|
|
}
|
|
|
|
|
|
|
|
function addImage() {
|
|
|
|
var filepath = document.querySelector("input#filePath").value;
|
|
|
|
var xmlpath = document.querySelector("input#xmlPath").value
|
|
|
|
fs.copyFile(filepath, pathjs.join(dirpath, "xmls", pathjs.basename(filepath)), (err) => {
|
|
|
|
if (err) console.log("File error, stat " + fileval);
|
|
|
|
});
|
|
|
|
fs.copyFile(xmlpath, pathjs.join(dirpath, "xmls", pathjs.basename(xmlpath)), (err) => {
|
|
|
|
if (err) console.log("File error, stat " + fileval);
|
|
|
|
});
|
|
|
|
getImages(dirpath);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getPresets(path) {
|
|
|
|
jsonbinds = JSON.parse(fs.readFileSync(pathjs.join(path, "presets.json")));
|
|
|
|
return reloadPresets();
|
|
|
|
}
|
|
|
|
|
|
|
|
function reloadPresets() {
|
|
|
|
var html = [];
|
|
|
|
Object.entries(jsonbinds).forEach((binds) => {
|
|
|
|
html.push(`<div class="bind"><span>${binds[1].name}</span><br /><button onclick='loadPreset("${binds[0]}")'>^</button><button onclick='removePreset("${binds[0]}")'>X</button></div>`);
|
|
|
|
});
|
|
|
|
console.log(html);
|
|
|
|
return html.join("\n");
|
|
|
|
}
|
|
|
|
|
|
|
|
function loadPreset(bind) {
|
|
|
|
document.querySelector("textarea#binds").value = JSON.stringify(jsonbinds[bind].binds, null, 2);
|
|
|
|
document.querySelector("input#idle").value = jsonbinds[bind].idle;
|
|
|
|
document.querySelector("input#fps").value = jsonbinds[bind].fps;
|
|
|
|
document.querySelector("input#zoom").value = jsonbinds[bind].zoom;
|
|
|
|
document.querySelector("#presetname").value = bind;
|
|
|
|
}
|
|
|
|
|
|
|
|
function addPreset(name) {
|
|
|
|
var theName = document.querySelector(name);
|
|
|
|
var id = theName.value.replace(/[\W\d]/gm, "").toLowerCase();
|
|
|
|
jsonbinds[id] = {
|
|
|
|
name: theName.value,
|
|
|
|
binds: JSON.parse(document.querySelector("textarea#binds").value),
|
|
|
|
idle: document.querySelector("input#idle").value,
|
|
|
|
fps: document.querySelector("input#fps").value,
|
|
|
|
zoom: document.querySelector("input#zoom").value
|
|
|
|
};
|
|
|
|
theName.value = "";
|
|
|
|
document.querySelector("div#presets").innerHTML = reloadPresets();
|
|
|
|
}
|
|
|
|
|
|
|
|
function removePreset(bind) {
|
|
|
|
delete jsonbinds[bind];
|
|
|
|
document.querySelector("div#presets").innerHTML = reloadPresets();
|
|
|
|
}
|
|
|
|
|
2022-11-30 01:58:33 +00:00
|
|
|
ipcRenderer.on('configPath', function (evt, path) {
|
2022-11-30 18:32:19 +00:00
|
|
|
dirpath = path;
|
2022-11-30 01:58:33 +00:00
|
|
|
loadForm(path);
|
|
|
|
});
|
|
|
|
|
|
|
|
function saveForm() {
|
|
|
|
var fileval = document.querySelector("input#filePath").value;
|
|
|
|
var xmlval = document.querySelector("input#xmlPath").value;
|
|
|
|
var binds;
|
|
|
|
try {
|
|
|
|
binds = JSON.parse(document.querySelector("textarea#binds").value);
|
|
|
|
binds.idle = document.querySelector("input#idle").value;
|
|
|
|
} catch (e) {
|
|
|
|
alert("JSON is not valid!");
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
var json = {
|
|
|
|
"binds": binds,
|
|
|
|
"charZoom": document.querySelector("input#zoom").value,
|
|
|
|
"opacity": document.querySelector("input#opacity").value,
|
|
|
|
"fps": document.querySelector("input#fps").value,
|
|
|
|
"align": [
|
|
|
|
isInitial(document.querySelector("#alignRadioLeft").checked),
|
|
|
|
isInitial(document.querySelector("#alignRadioRight").checked),
|
|
|
|
isInitial(document.querySelector("#alignRadioUp").checked),
|
|
|
|
isInitial(document.querySelector("#alignRadioDown").checked)
|
|
|
|
]
|
|
|
|
}
|
|
|
|
console.log(json);
|
|
|
|
if (fileval)
|
|
|
|
ipcRenderer.invoke('copyFiles', fileval, xmlval);
|
2022-11-30 18:32:19 +00:00
|
|
|
ipcRenderer.invoke('writeConfig', JSON.stringify(json, null, 2), JSON.stringify(jsonbinds, null, 2));
|
2022-11-30 01:58:33 +00:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
ipcRenderer.on('configGotImage', function (evt, res) {
|
|
|
|
document.querySelector("input#filePath").value = res.filePaths[0];
|
|
|
|
});
|
|
|
|
|
|
|
|
ipcRenderer.on('configGotXml', function (evt, res) {
|
|
|
|
document.querySelector("input#xmlPath").value = res.filePaths[0];
|
|
|
|
seeValidBinds(res.filePaths[0]);
|
|
|
|
});
|
|
|
|
|
|
|
|
function seeValidBinds(path) {
|
|
|
|
var valid = document.querySelector("#validAnims");
|
|
|
|
var rfs = fs.readFileSync(path, {encoding: "utf-8"});
|
|
|
|
var xmlDoc = parser.parseFromString(rfs.replace(/[^ \S]/gm, ""), "text/xml");
|
|
|
|
var indices = xmlDoc.getElementsByTagName("SubTexture");
|
|
|
|
console.log(indices);
|
|
|
|
var validObj = {};
|
|
|
|
Array.from(indices).forEach((subTexture) => {
|
|
|
|
var name = subTexture.getAttribute("name").match(nameGetter).join("");
|
|
|
|
validObj[name] = `<li>${name}</li>`;
|
|
|
|
});
|
|
|
|
valid.innerHTML = Object.values(validObj).join("");
|
|
|
|
}
|
|
|
|
|
|
|
|
function isInitial(x) {
|
|
|
|
return x ? "0" : "initial";
|
|
|
|
}
|
|
|
|
|
|
|
|
function isTrue(x) {
|
|
|
|
return x != "initial";
|
|
|
|
}
|