diff --git a/dist/css/style.css b/dist/css/style.css
index f0a008f..ea7e16e 100644
--- a/dist/css/style.css
+++ b/dist/css/style.css
@@ -271,8 +271,7 @@ button:active{
}
#video {
- height: 100%;
- max-height: 190px;
+ height: 200px;
margin: auto;
margin-bottom: 0;
padding-bottom: 0;
diff --git a/dist/index.html b/dist/index.html
index 0835452..846801a 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -233,7 +233,10 @@
-
+
+
+
+
diff --git a/src/Controllers/ControlPanel.js b/src/Controllers/ControlPanel.js
index f566692..c45c03c 100644
--- a/src/Controllers/ControlPanel.js
+++ b/src/Controllers/ControlPanel.js
@@ -269,10 +269,37 @@ class ControlPanel {
$('#reset-rules').click(() => {
this.setHyperparamDefaults();
});
+ $('#save-controls').click(() => {
+ let data = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(Hyperparams));
+ let downloadEl = document.getElementById('download-el');
+ downloadEl.setAttribute("href", data);
+ downloadEl.setAttribute("download", "controls.json");
+ downloadEl.click();
+ });
+ $('#load-controls').click(() => {
+ $('#upload-el').click();
+ });
+ $('#upload-el').change((e)=>{
+ let files = e.target.files;
+ if (!files.length) {return;};
+ let reader = new FileReader();
+ reader.onload = (e) => {
+ let result=JSON.parse(e.target.result);
+ Hyperparams.loadJsonObj(result);
+ this.updateHyperparamUIValues();
+ // have to clear the value so change() will be triggered if the same file is uploaded again
+ $('#upload-el')[0].value = '';
+ };
+ reader.readAsText(files[0]);
+ });
}
setHyperparamDefaults() {
Hyperparams.setDefaults();
+ this.updateHyperparamUIValues();
+ }
+
+ updateHyperparamUIValues(){
$('#food-prod-prob').val(Hyperparams.foodProdProb);
$('#lifespan-multiplier').val(Hyperparams.lifespanMultiplier);
$('#rot-enabled').prop('checked', Hyperparams.rotationEnabled);
diff --git a/src/Hyperparameters.js b/src/Hyperparameters.js
index 67ece3c..b4dfa02 100644
--- a/src/Hyperparameters.js
+++ b/src/Hyperparameters.js
@@ -2,8 +2,6 @@ const Neighbors = require("./Grid/Neighbors");
const Hyperparams = {
setDefaults: function() {
- this.headless = false;
-
this.lifespanMultiplier = 100;
this.foodProdProb = 5;
this.killableNeighbors = Neighbors.adjacent;
@@ -27,6 +25,12 @@ const Hyperparams = {
this.foodDropProb = 0;
},
+
+ loadJsonObj(obj) {
+ for (let key in obj) {
+ this[key] = obj[key];
+ }
+ }
}
Hyperparams.setDefaults();