world config + improved wall clearing
This commit is contained in:
13
dist/index.html
vendored
13
dist/index.html
vendored
@@ -51,7 +51,7 @@
|
||||
<div id='about' class='tab'>
|
||||
<div class='left-half'>
|
||||
<h3>The Life Engine</h3>
|
||||
<p>The Life Engine is a virtual ecosystem that allows organisms to grow, spread, and compete.</p>
|
||||
<p>The Life Engine is a virtual ecosystem that allows organisms to reproduce, compete, and evolve.</p>
|
||||
<p>Each organism is made up of different colored cells. Hover over each color to learn what it does.</p>
|
||||
<div id='cell-legend'>
|
||||
<div class='cell-legend-type' id='mouth' title="Mouth: Eats adjacent food."></div>
|
||||
@@ -169,17 +169,16 @@
|
||||
<br>
|
||||
<button id='resize'>Resize and Reset</button>
|
||||
<h3>Reset Options</h3>
|
||||
<label for="auto-reset">Reset on total extinction</label>
|
||||
<input type="checkbox" id="auto-reset" checked>
|
||||
<br>
|
||||
<p id='reset-count'>Auto reset count: </p>
|
||||
|
||||
<label for="reset-options">Starting state:</label>
|
||||
<select name="reset-options" id="reset-options">
|
||||
<option value="default-org">Simple producer</option>
|
||||
<option value="rand-orgs">Random organisms</option>
|
||||
<option value="empty">No organisms</option>
|
||||
</select>
|
||||
</select> <br>
|
||||
<label for="auto-reset">Reset on total extinction</label>
|
||||
<input type="checkbox" id="auto-reset" checked>
|
||||
<br>
|
||||
<p id='reset-count'>Auto reset count: </p>
|
||||
</div>
|
||||
<div class='right-half'>
|
||||
<button id='random-walls' title="Generates random walls.">Generate random walls</button> <br>
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
6
src/WorldConfig.js
Normal file
6
src/WorldConfig.js
Normal file
@@ -0,0 +1,6 @@
|
||||
const WorldConfig = {
|
||||
headless: false,
|
||||
clear_walls_on_reset: false,
|
||||
}
|
||||
|
||||
module.exports = WorldConfig;
|
||||
Reference in New Issue
Block a user