xxxxxxxxxx
92
let targetEnemyCount = 14;
let enemyPadding = 5;
// config ^
let triesPerRadius = 2;
let enemySize = 10;
let searchRadiusInterval = 3;
let startingSearchRadius = 5;
let tryIncrease = 5;
let searchRadius = startingSearchRadius;
let tryCount = 0;
let enemies = [];
let slider;
function setup() {
createCanvas(400, 400);
noStroke();
angleMode(DEGREES);
rectMode(CENTER);
}
function draw() {
update();
background(220);
push();
translate(width/2, height/2);
fill(255, 0, 0, 50);
if (enemies.length < targetEnemyCount) ellipse(0, 0, searchRadius*2);
fill(255, 0, 0);
for (let i = 0; i < enemies.length; i++) {
let enemy = enemies[i];
ellipse(enemy.x, enemy.y, enemySize);
}
pop();
}
function update() {
if (enemies.length == targetEnemyCount) return;
let attempt = createVector(searchRadius, 0);
attempt.setHeading(random(360));
if (isViablePlacement(attempt)) addEnemy(attempt);
tryCount++;
if (tryCount >= triesPerRadius) {
tryCount = 0;
searchRadius += searchRadiusInterval;
triesPerRadius += tryIncrease;
}
}
function addEnemy(attempt) {
enemies.push({x:attempt.x, y:attempt.y});
}
function isViablePlacement(attempt) {
let viable = true;
for (let i = 0; i < enemies.length; i++) {
let enemy = enemies[i];
let distance = dist(attempt.x, attempt.y, enemy.x, enemy.y);
if (distance < enemySize + enemyPadding) {
viable = false;
break;
}
}
if (viable) return true;
}