First commit, containing the basic system.

- TODO: Add/Remove item system (so it's not fixed to two).
This commit is contained in:
stijnb1234 2021-04-07 15:34:07 +02:00
parent c2264dd11b
commit 38b4d5562c
4 changed files with 191 additions and 0 deletions

25
dist/css/beautify.css vendored Normal file
View file

@ -0,0 +1,25 @@
pre {
outline: 1px solid #ccc;
padding: 5px;
margin: 5px;
}
.string {
color: green;
}
.number {
color: darkorange;
}
.boolean {
color: blue;
}
.null {
color: magenta;
}
.key {
color: red;
}

21
dist/js/beautify.js vendored Normal file
View file

@ -0,0 +1,21 @@
function syntaxHighlight(json) {
if (typeof json != 'string') {
json = JSON.stringify(json, undefined, 4);
}
json = json.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?)/g, function (match) {
let cls = 'number';
if (/^"/.test(match)) {
if (/:$/.test(match)) {
cls = 'key';
} else {
cls = 'string';
}
} else if (/true|false/.test(match)) {
cls = 'boolean';
} else if (/null/.test(match)) {
cls = 'null';
}
return '<span class="' + cls + '">' + match + '</span>';
});
}

59
dist/js/calculator.js vendored Normal file
View file

@ -0,0 +1,59 @@
//TODO Support more items
const itemDamages = {
'leather_boots': 65
};
/**
* Map an in-game Damage to an texturepack Damage.
*
* @param value The input value.
* @param oldMax The old max value, from the itemDamages array.
*/
function getMappedDamage(value, oldMax) {
return value / oldMax;
}
/**
* Generate the JSON file.
*
* @param item The item to generate it for.
* @param models An array of models to insert.
* @returns {String} The JSON for the texturepack.
*/
function toJSON(item, models) {
const json = {};
//Default values
json['parent'] = 'item/handheld';
json['textures'] = {
'layer0': 'item/leather_boots',
'layer1': 'items/leather_boots_overlay'
};
//Insert models
json['overrides'] = [];
for (let i = 0; i < models.length; i++) {
const model = models[i];
const damage = getMappedDamage(i+1, itemDamages[item]);
json['overrides'][i] = {
'predicate': {
'damaged': 0,
'damage': damage,
'model': 'item/' + model
}
};
}
//Insert damaged model
json['overrides'][models.length] = {
'predicate': {
'damaged': 1,
'damage': 0,
'model': 'item/' + item
}
};
return JSON.stringify(json, null, 2);
}

86
index.html Normal file
View file

@ -0,0 +1,86 @@
<!doctype html>
<html lang="en">
<head>
<title>VehiclesPlus - Damage calculator</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.0.0-beta3/css/bootstrap.min.css"
integrity="sha512-N415hCJJdJx+1UBfULt+i+ihvOn42V/kOjOpp1UTh4CZ70Hx5bDlKryWaqEKfY/8EYOu/C2MuyaluJryK1Lb5Q=="
crossorigin="anonymous"/>
<link rel="stylesheet" href="dist/css/beautify.css">
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1 class="display-4">VolmitSoftware - Damage calculator</h1>
<p class="lead">Simply calculate the damage values for your texture pack.</p>
<hr class="my-4">
<p>You indicate which item you want to use and where the models are for each damage value. This tool then
creates the .json file for you.</p>
</div>
<form id="calculatorForm">
<div class="mb-3">
<label for="item">Select the item:</label>
<select class="form-control" id="item" name="item" required>
<option selected>Select an item...</option>
<option value="leather_boots">Leather Boots</option>
</select>
</div>
<div class="mb-3">
<label for="item1">Item for damage 1:</label>
<input type="text" class="form-control" id="item1" name="item1" placeholder="cars/blue_car" required>
</div>
<div class="mb-3">
<label for="item2">Item for damage 2:</label>
<input type="text" class="form-control" id="item2" name="item2" placeholder="cars/red_car" required>
</div>
<button type="submit" class="btn btn-primary">Calculate</button>
</form>
<hr class="my-4">
<h6>Output JSON:</h6>
<pre id="content" class="mb-3">Fill in the form above to get an output.</pre>
<button id="copyButton" class="btn btn-primary mb-3 mr-3">Copy</button> <a id="downloadButton" class="btn btn-secondary mb-3" href="#">Download</a>
</div>
</body>
<script type="application/javascript" src="dist/js/calculator.js"></script>
<script type="application/javascript" src="dist/js/beautify.js"></script>
<script>
const form = document.getElementById("calculatorForm");
const output = document.getElementById("content");
const copybutton = document.getElementById("copyButton");
const downloadbutton = document.getElementById("downloadButton");
form.addEventListener("submit", function (e) {
if (e.preventDefault) e.preventDefault();
const item = document.getElementById('item').value;
const model1 = document.getElementById('item1').value;
const model2 = document.getElementById('item2').value;
const models = [model1, model2];
const json = toJSON(item, models);
output.innerHTML = syntaxHighlight(json);
const dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(json);
downloadbutton.setAttribute("href", dataStr);
downloadbutton.setAttribute("download", item + ".json");
return false;
});
copybutton.addEventListener("click", function() {
const copyText = output.textContent;
const textArea = document.createElement("textarea");
textArea.textContent = copyText;
document.body.append(textArea);
textArea.select();
document.execCommand("copy");
textArea.remove();
});
</script>
</html>