xxxxxxxxxx
104
// Ernst Schmidt
// www.ernst-schmidt.com
// open file tree on the left to see all files
var movels = [];
var predator;
var sliderBoxes = [];
// user settings
var paused = false;
var displayQuadtree = true;
var displayUnits = true;
var displayHighlight = true;
var displayPredatorPath = false;
var pred = true;
var edges = true;
// screen settings
var wScreen = 570;
var wSettingsArea = 130;
function setup() {
createCanvas(700, 610);
setupUserInterface();
let boundary = new Rectangle(wScreen / 2, height / 2, wScreen, height);
qt = new QuadTree(boundary, sliderCapacity.value());
for (let i = 0; i < sliderUnitCount.value(); i++) {
let movel = new Movel();
movels.push(movel);
}
movels[movels.length - 1].highlighted = true; // needs to be the last element
predator = new Predator();
for (let m of movels) {
qt.insert(m);
}
}
function draw() {
background(0);
updateUnitCount();
qt.capacity = sliderCapacity.value();
qt.clear();
for (let m of movels) {
qt.insert(m);
}
for (let m of movels) {
m.update();
}
if (pred) predator.update();
updateFrameRate();
displayAll();
}
function displayAll() {
if (displayQuadtree) qt.display();
if (displayUnits) {
for (let m of movels) {
m.display();
}
if (pred) predator.display();
}
displayFrameRate("white");
displaySettingsArea();
for (let b of sliderBoxes) {
b.display();
}
}
function displaySettingsArea() {
fill(0);
noStroke();
rectMode(CORNER);
rect(width - wSettingsArea, 0, wSettingsArea, height);
strokeWeight(1);
stroke(255, 150);
line(wScreen, 0, wScreen, height);
}
function updateUnitCount() {
let diff;
if (movels.length > sliderUnitCount.value()) {
diff = movels.length - sliderUnitCount.value();
movels.splice(0, diff);
} else if (movels.length < sliderUnitCount.value()) {
diff = sliderUnitCount.value() - movels.length;
for (let i = 0; i < diff; i++) {
movels.unshift(new Movel());
}
}
}