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;