fixed walls, species names, added max org

This commit is contained in:
MaxRobinsonTheGreat
2023-05-27 18:42:09 -05:00
parent 53118e9340
commit aeb0d1861c
9 changed files with 42 additions and 13 deletions

View File

@@ -1,4 +1,8 @@
[
{
"name": "⚔Battle Royale (upcoming competition!)",
"value": "battle_royale"
},
{
"name": "Colony",
"value": "colony"

1
dist/assets/worlds/battle_royale.json vendored Normal file

File diff suppressed because one or more lines are too long

2
dist/css/style.css vendored
View File

@@ -193,7 +193,7 @@ input:hover,input:active {
grid-column: 2;
}
.global-mutation-in {
.global-mutation-container {
display: none;
}

14
dist/index.html vendored
View File

@@ -110,6 +110,7 @@
<div class='right-half'>
<div id='organism-details' style="display:none;">
<h3>Organism Details</h3>
<p class='species-name'>Species Name: </p>
<p class='cell-count'>Cell count: </p>
<p id='move-range'>Move Range: </p>
<p id='mutation-rate'>Mutation Rate: </p>
@@ -234,12 +235,15 @@
</div>
<div class='right-half'>
<button id='reset-rules'>Reset all controls</button>
<h4>Mutation Rate</h4>
<button id='reset-rules'>Reset all controls</button><br>
<label for="org-limit" title='Maximum number of organisms (-1 is unlimited)'>Maximum Organisms:</label>
<input type="number" id="org-limit" min="-1" value=-1 step="1"><br>
<label for="evolved-mutation" title='When on, each organism has its own mutation rate that can increase or decrease. When off, all organisms have the same mutation rate.'>Use evolved mutation rate</label>
<input type="checkbox" id="evolved-mutation" checked> </br>
<label class="global-mutation-in" for="global-mutation">Global mutation rate: </label>
<input class="global-mutation-in" type="number" id="global-mutation" min="0" max="100" value=5 step="1">
<input type="checkbox" id="evolved-mutation" checked>
<div class="global-mutation-container">
<label class="global-mutation-in" for="global-mutation">Global mutation rate: </label>
<input class="global-mutation-in" type="number" id="global-mutation" min="0" max="100" value=5 step="1">
</div>
<h4 title='When an organism mutates, it can choose from one of the following mutation types.'>Mutation Type Probabilities</h4>
<label for="add-prob" title='A new cell will stem from an existing one'>Add Cell:</label>
<input class="mut-prob" type="number" id="add-prob" min="0" max="100" value=33>

View File

@@ -122,7 +122,7 @@ class ControlPanel {
this.slider = document.getElementById("slider");
this.slider.oninput = function() {
const max_fps = 300;
this.fps = this.slider.value;
this.fps = parseInt(this.slider.value);
if (this.fps>=max_fps) this.fps = 1000;
if (this.engine.running) {
this.changeEngineSpeed(this.fps);
@@ -180,6 +180,8 @@ class ControlPanel {
});
$('#resize').click(function() {
if (!confirm('The current environment will be lost. Proceed?'))
return;
var cell_size = $('#cell-size').val();
var fill_window = $('#fill-window').is(":checked");
if (fill_window) {
@@ -190,7 +192,7 @@ class ControlPanel {
var rows = $('#row-input').val();
this.engine.env.resizeGridColRow(cell_size, cols, rows);
}
this.engine.env.reset();
this.engine.env.reset(false);
this.stats_panel.reset();
}.bind(this));
@@ -286,14 +288,17 @@ class ControlPanel {
$('#extra-mover-cost').change(function() {
Hyperparams.extraMoverFoodCost = parseInt($('#extra-mover-cost').val());
});
$('#org-limit').change(function() {
Hyperparams.maxOrganisms = parseInt($('#org-limit').val());
});
$('#evolved-mutation').change( function() {
if (this.checked) {
$('.global-mutation-in').css('display', 'none');
$('.global-mutation-container').css('display', 'none');
$('#avg-mut').css('display', 'block');
}
else {
$('.global-mutation-in').css('display', 'block');
$('.global-mutation-container').css('display', 'block');
$('#avg-mut').css('display', 'none');
}
Hyperparams.useGlobalMutability = !this.checked;
@@ -369,16 +374,17 @@ class ControlPanel {
$('#food-blocks').prop('checked', Hyperparams.foodBlocksReproduction);
$('#food-drop-rate').val(Hyperparams.foodDropProb);
$('#extra-mover-cost').val(Hyperparams.extraMoverFoodCost);
$('#org-limit').val(Hyperparams.maxOrganisms);
$('#look-range').val(Hyperparams.lookRange);
$('#see-through-self').prop('checked', Hyperparams.seeThroughSelf);
$('#global-mutation').val(Hyperparams.globalMutability);
if (!Hyperparams.useGlobalMutability) {
$('.global-mutation-in').css('display', 'none');
$('.global-mutation-container').css('display', 'none');
$('#avg-mut').css('display', 'block');
}
else {
$('.global-mutation-in').css('display', 'block');
$('.global-mutation-container').css('display', 'block');
$('#avg-mut').css('display', 'none');
}
}

View File

@@ -53,6 +53,7 @@ class EditorController extends CanvasController{
}
updateDetails() {
$('.species-name').text("Species name: "+this.env.organism.species.name);
$('.cell-count').text("Cell count: "+this.env.organism.anatomy.cells.length);
if (this.env.organism.isNatural()){
$('#unnatural-org-warning').css('display', 'none');

View File

@@ -93,6 +93,10 @@ class WorldEnvironment extends Environment{
this.largest_cell_count = organism.anatomy.cells.length;
}
canAddOrganism() {
return this.organisms.length < Hyperparams.maxOrganisms || Hyperparams.maxOrganisms < 0;
}
averageMutability() {
if (this.organisms.length < 1)
return 0;
@@ -195,6 +199,9 @@ class WorldEnvironment extends Environment{
FossilRecord.clear_record();
this.resizeGridColRow(this.grid_map.cell_size, env.grid.cols, env.grid.rows)
this.grid_map.loadRaw(env.grid);
for (let wall of env.grid.walls) {
this.walls.push(this.grid_map.cellAt(wall.c, wall.r));
}
// create species map
let species = {};
@@ -218,6 +225,7 @@ class WorldEnvironment extends Environment{
s.anatomy = org.anatomy;
s.calcAnatomyDetails();
}
s.name = orgRaw.species_name;
org.species = s;
}
for (let name in species)

View File

@@ -27,6 +27,8 @@ const Hyperparams = {
this.foodDropProb = 0;
this.extraMoverFoodCost = 0;
this.maxOrganisms = -1;
},
loadJsonObj(obj) {

View File

@@ -102,7 +102,10 @@ class Organism {
var new_c = this.c + (direction_c*basemovement) + (direction_c*offset);
var new_r = this.r + (direction_r*basemovement) + (direction_r*offset);
if (org.isClear(new_c, new_r, org.rotation, true) && org.isStraightPath(new_c, new_r, this.c, this.r, this)){
if (org.isClear(new_c, new_r, org.rotation, true) &&
org.isStraightPath(new_c, new_r, this.c, this.r, this) &&
this.env.canAddOrganism())
{
org.c = new_c;
org.r = new_r;
this.env.addOrganism(org);