diff --git a/dist/css/style.css b/dist/css/style.css
index 1714871..3b15873 100644
--- a/dist/css/style.css
+++ b/dist/css/style.css
@@ -37,7 +37,7 @@ body{
bottom: 0;
position: fixed;
background-color: #3a4b68;
- display: grid;
+ display: none;
grid-template-columns: repeat(3, 1fr);
/* opacity: 0.8; */
}
@@ -236,7 +236,7 @@ button:active{
position: fixed;
bottom: 10px;
padding-left: 10px;
- display: none;
+ /* display: none; */
}
#headless-notification {
diff --git a/dist/index.html b/dist/index.html
index 0166f53..99fba39 100644
--- a/dist/index.html
+++ b/dist/index.html
@@ -20,9 +20,9 @@
-
+
-
+
@@ -32,12 +32,13 @@
Target FPS: 60
-
-
+
+
+
+
Auto reset count:
-
Grid Size
@@ -46,7 +47,6 @@
-
@@ -266,9 +266,9 @@
-
+
-
+
diff --git a/src/Controllers/ControlPanel.js b/src/Controllers/ControlPanel.js
index 5ec9e54..5396a9e 100644
--- a/src/Controllers/ControlPanel.js
+++ b/src/Controllers/ControlPanel.js
@@ -23,6 +23,7 @@ class ControlPanel {
this.headless_opacity = 1;
this.opacity_change_rate = -0.8;
this.paused=false;
+ this.setHyperparamDefaults();
}
defineMinMaxControls(){
@@ -248,33 +249,37 @@ class ControlPanel {
$('#food-blocks').change( function() {
Hyperparams.foodBlocksReproduction = this.checked;
});
- $('#reset-rules').click( function() {
- Hyperparams.setDefaults();
- $('#food-prod-prob').val(Hyperparams.foodProdProb);
- $('#lifespan-multiplier').val(Hyperparams.lifespanMultiplier);
- $('#mover-rot').prop('checked', Hyperparams.moversCanRotate);
- $('#offspring-rot').prop('checked', Hyperparams.offspringRotate);
- $('#insta-kill').prop('checked', Hyperparams.instaKill);
- $('#evolved-mutation').prop('checked', !Hyperparams.useGlobalMutability);
- $('#add-prob').val(Hyperparams.addProb);
- $('#change-prob').val(Hyperparams.changeProb);
- $('#remove-prob').val(Hyperparams.removeProb);
- $('#movers-produce').prop('checked', Hyperparams.moversCanProduce);
- $('#food-blocks').prop('checked', Hyperparams.foodBlocksReproduction);
- $('#food-drop-rate').val(Hyperparams.foodDropProb);
- $('#look-range').val(Hyperparams.lookRange);
-
- if (!Hyperparams.useGlobalMutability) {
- $('.global-mutation-in').css('display', 'none');
- $('#avg-mut').css('display', 'block');
- }
- else {
- $('.global-mutation-in').css('display', 'block');
- $('#avg-mut').css('display', 'none');
- }
+ $('#reset-rules').click(() => {
+ this.setHyperparamDefaults();
});
}
+ setHyperparamDefaults() {
+ Hyperparams.setDefaults();
+ $('#food-prod-prob').val(Hyperparams.foodProdProb);
+ $('#lifespan-multiplier').val(Hyperparams.lifespanMultiplier);
+ $('#mover-rot').prop('checked', Hyperparams.moversCanRotate);
+ $('#offspring-rot').prop('checked', Hyperparams.offspringRotate);
+ $('#insta-kill').prop('checked', Hyperparams.instaKill);
+ $('#evolved-mutation').prop('checked', !Hyperparams.useGlobalMutability);
+ $('#add-prob').val(Hyperparams.addProb);
+ $('#change-prob').val(Hyperparams.changeProb);
+ $('#remove-prob').val(Hyperparams.removeProb);
+ $('#movers-produce').prop('checked', Hyperparams.moversCanProduce);
+ $('#food-blocks').prop('checked', Hyperparams.foodBlocksReproduction);
+ $('#food-drop-rate').val(Hyperparams.foodDropProb);
+ $('#look-range').val(Hyperparams.lookRange);
+
+ if (!Hyperparams.useGlobalMutability) {
+ $('.global-mutation-in').css('display', 'none');
+ $('#avg-mut').css('display', 'block');
+ }
+ else {
+ $('.global-mutation-in').css('display', 'block');
+ $('#avg-mut').css('display', 'none');
+ }
+ }
+
defineModeControls() {
var self = this;
$('.edit-mode-btn').click( function() {
@@ -313,21 +318,34 @@ class ControlPanel {
var env = this.engine.env;
$('#reset-env').click( function() {
- this.engine.env.reset();
+ env.reset();
this.stats_panel.reset();
}.bind(this));
+ $('#clear-env').click( () => {
+ env.reset(true, false);
+ this.stats_panel.reset();
+ env.auto_reset = false;
+ $('#auto-reset').prop('checked', false);;
+ });
$('#auto-reset').change(function() {
env.auto_reset = this.checked;
});
$('#clear-walls').click( function() {
- if (confirm("Are you sure you want to clear all the walls?")) {
- this.engine.env.clearWalls();
- }
+ this.engine.env.clearWalls();
}.bind(this));
$('#clear-editor').click( function() {
this.engine.organism_editor.clear();
this.editor_controller.setEditorPanel();
- }.bind(this));
+ }.bind(this))
+
+ window.onbeforeunload = function (e) {
+ e = e || window.event;
+ let return_str = 'this will cause a confirmation on page close'
+ if (e) {
+ e.returnValue = return_str;
+ }
+ return return_str;
+ };
}
defineChallenges() {
@@ -367,9 +385,10 @@ class ControlPanel {
updateHeadlessIcon(delta_time) {
if (this.paused)
return;
+ const min_opacity = 0.4;
var op = this.headless_opacity + (this.opacity_change_rate*delta_time/1000);
- if (op <= 0.4){
- op=0.4;
+ if (op <= min_opacity){
+ op=min_opacity;
this.opacity_change_rate = -this.opacity_change_rate;
}
else if (op >= 1){
diff --git a/src/Controllers/EnvironmentController.js b/src/Controllers/EnvironmentController.js
index 73aa0fc..828fe08 100644
--- a/src/Controllers/EnvironmentController.js
+++ b/src/Controllers/EnvironmentController.js
@@ -9,7 +9,7 @@ const Hyperparams = require("../Hyperparameters");
class EnvironmentController extends CanvasController{
constructor(env, canvas) {
super(env, canvas);
- this.mode = Modes.Drag;
+ this.mode = Modes.FoodDrop;
this.org_to_clone = null;
this.add_new_species = false;
this.defineZoomControls();
diff --git a/src/Environments/WorldEnvironment.js b/src/Environments/WorldEnvironment.js
index da7bb40..1da6c73 100644
--- a/src/Environments/WorldEnvironment.js
+++ b/src/Environments/WorldEnvironment.js
@@ -64,7 +64,7 @@ class WorldEnvironment extends Environment{
}
if (this.organisms.length == 0 && this.auto_reset){
this.reset_count++;
- this.reset();
+ this.reset(false);
}
}
@@ -130,14 +130,19 @@ class WorldEnvironment extends Environment{
}
}
- reset() {
+ reset(confirm_reset=true, reset_life=true) {
+ if (confirm_reset && !confirm('The current environment will be lost. Proceed?'))
+ return;
+
this.organisms = [];
this.grid_map.fillGrid(CellStates.empty);
this.renderer.renderFullGrid(this.grid_map.grid);
this.total_mutability = 0;
this.total_ticks = 0;
FossilRecord.clear_record();
- this.OriginOfLife();
+ if (reset_life)
+ this.OriginOfLife();
+
}
resizeGridColRow(cell_size, cols, rows) {
diff --git a/src/Hyperparameters.js b/src/Hyperparameters.js
index 64073f8..4199cd9 100644
--- a/src/Hyperparameters.js
+++ b/src/Hyperparameters.js
@@ -5,8 +5,7 @@ const Hyperparams = {
this.headless = false;
this.lifespanMultiplier = 100;
- this.foodProdProb = 4;
- this.foodProdProbScalar = 4;
+ this.foodProdProb = 5;
this.killableNeighbors = Neighbors.adjacent;
this.edibleNeighbors = Neighbors.adjacent;
this.growableNeighbors = Neighbors.adjacent;