The Life Engine
-
The Life Engine is a virtual ecosystem that allows organisms to grow, spread, and compete.
+
The Life Engine is a virtual ecosystem that allows organisms to reproduce, compete, and evolve.
Each organism is made up of different colored cells. Hover over each color to learn what it does.
@@ -169,17 +169,16 @@
Reset Options
-
-
-
-
Auto reset count:
-
+
+
+
+
+
Auto reset count:
diff --git a/src/Controllers/ControlPanel.js b/src/Controllers/ControlPanel.js
index a7369a5..5e8030e 100644
--- a/src/Controllers/ControlPanel.js
+++ b/src/Controllers/ControlPanel.js
@@ -1,6 +1,7 @@
const Hyperparams = require("../Hyperparameters");
const Modes = require("./ControlModes");
const StatsPanel = require("../Stats/StatsPanel");
+const WorldConfig = require("../WorldConfig");
class ControlPanel {
constructor(engine) {
@@ -137,14 +138,14 @@ class ControlPanel {
$('.headless').click(function() {
$('.headless').find("i").toggleClass("fa fa-eye");
$('.headless').find("i").toggleClass("fa fa-eye-slash");
- if (Hyperparams.headless){
+ if (WorldConfig.headless){
$('#headless-notification').css('display', 'none');
this.engine.env.renderFull();
}
else {
$('#headless-notification').css('display', 'block');
}
- Hyperparams.headless = !Hyperparams.headless;
+ WorldConfig.headless = !WorldConfig.headless;
}.bind(this));
}
@@ -411,7 +412,7 @@ class ControlPanel {
$('#fps-actual').text("Actual FPS: " + Math.floor(this.engine.actual_fps));
$('#reset-count').text("Auto reset count: " + this.engine.env.reset_count);
this.stats_panel.updateDetails();
- if (Hyperparams.headless)
+ if (WorldConfig.headless)
this.updateHeadlessIcon(delta_time);
}
diff --git a/src/Controllers/EnvironmentController.js b/src/Controllers/EnvironmentController.js
index 5e8b963..17da00f 100644
--- a/src/Controllers/EnvironmentController.js
+++ b/src/Controllers/EnvironmentController.js
@@ -4,7 +4,7 @@ const Modes = require("./ControlModes");
const CellStates = require("../Organism/Cell/CellStates");
const Neighbors = require("../Grid/Neighbors");
const FossilRecord = require("../Stats/FossilRecord");
-const Hyperparams = require("../Hyperparameters");
+const WorldConfig = require("../WorldConfig");
const Perlin = require("../Utils/Perlin");
class EnvironmentController extends CanvasController{
@@ -98,7 +98,7 @@ class EnvironmentController extends CanvasController{
}
performModeAction() {
- if (Hyperparams.headless && this.mode != Modes.Drag)
+ if (WorldConfig.headless && this.mode != Modes.Drag)
return;
var mode = this.mode;
var right_click = this.right_click;
diff --git a/src/Environments/WorldEnvironment.js b/src/Environments/WorldEnvironment.js
index fdf48c3..ed07327 100644
--- a/src/Environments/WorldEnvironment.js
+++ b/src/Environments/WorldEnvironment.js
@@ -6,6 +6,7 @@ const CellStates = require('../Organism/Cell/CellStates');
const EnvironmentController = require('../Controllers/EnvironmentController');
const Hyperparams = require('../Hyperparameters.js');
const FossilRecord = require('../Stats/FossilRecord');
+const WorldConfig = require('../WorldConfig');
class WorldEnvironment extends Environment{
constructor(cell_size) {
@@ -45,7 +46,7 @@ class WorldEnvironment extends Environment{
}
render() {
- if (Hyperparams.headless) {
+ if (WorldConfig.headless) {
this.renderer.cells_to_render.clear();
return;
}
@@ -136,7 +137,7 @@ class WorldEnvironment extends Environment{
return;
this.organisms = [];
- this.grid_map.fillGrid(CellStates.empty);
+ this.grid_map.fillGrid(CellStates.empty, !WorldConfig.clear_walls_on_reset);
this.renderer.renderFullGrid(this.grid_map.grid);
this.total_mutability = 0;
this.total_ticks = 0;
diff --git a/src/Grid/GridMap.js b/src/Grid/GridMap.js
index 24f167c..84db4ca 100644
--- a/src/Grid/GridMap.js
+++ b/src/Grid/GridMap.js
@@ -21,9 +21,10 @@ class GridMap {
}
}
- fillGrid(state) {
+ fillGrid(state, ignore_walls=false) {
for (var col of this.grid) {
for (var cell of col) {
+ if (ignore_walls && cell.state===CellStates.wall) continue;
cell.setType(state);
cell.owner = null;
cell.cell_owner = null;
diff --git a/src/Organism/Cell/GridCell.js b/src/Organism/Cell/GridCell.js
index 10d637b..fd3bdff 100644
--- a/src/Organism/Cell/GridCell.js
+++ b/src/Organism/Cell/GridCell.js
@@ -5,7 +5,7 @@ const Hyperparams = require("../../Hyperparameters");
class Cell{
constructor(state, col, row, x, y){
this.owner = null; // owner organism
- this.cell_owner = null; // owner cell of ^that organism
+ this.cell_owner = null; // specific body cell of the owner organism that occupies this grid cell
this.setType(state);
this.col = col;
this.row = row;
diff --git a/src/WorldConfig.js b/src/WorldConfig.js
new file mode 100644
index 0000000..91910d3
--- /dev/null
+++ b/src/WorldConfig.js
@@ -0,0 +1,6 @@
+const WorldConfig = {
+ headless: false,
+ clear_walls_on_reset: false,
+}
+
+module.exports = WorldConfig;
\ No newline at end of file