From 302eeae2fb8db4ea4f480acf9504a15da22fdee3 Mon Sep 17 00:00:00 2001 From: MaxRobinsonTheGreat Date: Sat, 18 Dec 2021 15:05:35 -0600 Subject: [PATCH] added saving/loading sim controls --- dist/css/style.css | 3 +-- dist/index.html | 5 ++++- src/Controllers/ControlPanel.js | 27 +++++++++++++++++++++++++++ src/Hyperparameters.js | 8 ++++++-- 4 files changed, 38 insertions(+), 5 deletions(-) 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();