xxxxxxxxxx
166
let bacterium = []
let b
let emitters = []
let bacteriaNum = 500
let threshold = 0.25
let bacteriaRadius = 5
let bacteriaSpeed = 0
let bacteriaNumBox
let emitterRadius = 2 * bacteriaRadius
let attractNum = 0
let attractFreq = 1
let repelNum = 0
let repelFreq = 1
let emitterMovement = 0
let emitterSpeed = 0.5
let pulseSize = 40
let minPulseSpeed = 0.25
let chemicalMode = "ring"
let chemicalDecay = 0.999
let speedMod = 1
let attract
let repel
let enterButton
let firstTime = true
function firstSetup() {
bacteriaNumBox = createInput()
bacteriaNumBox.value(bacteriaNum)
bacteriaNumBox.size(50, 15)
bacteriaNumBox.position(0, 20)
updateButton = createButton('Update Bacteria')
updateButton.mouseClicked(assignBacteria)
updateButton.position(bacteriaNumBox.width, 20)
bacteriaTypeThresholdBox = createInput()
bacteriaTypeThresholdBox.value(0.1)
bacteriaTypeThresholdBox.size(50, 15)
bacteriaTypeThresholdBox.position(updateButton.x + updateButton.width + 10, 20)
resetButton = createButton('Reset Bacteria')
resetButton.mouseClicked(assignThreshold)
resetButton.position(bacteriaTypeThresholdBox.x + bacteriaTypeThresholdBox.width, 20)
undoButton = createButton('Undo Emitter Placement')
undoButton.mouseClicked(deleteEmitter)
undoButton.position(resetButton.x + undoButton.width + 20, 20)
}
function assignBacteria() {
bacteriaNum = bacteriaNumBox.value()
}
function assignThreshold() {
threshold = bacteriaTypeThresholdBox.value()
if (threshold > 1) {
threshold = 1
bacteriaTypeThresholdBox.value(1)
} else if (threshold < 0) {
threshold = 0
bacteriaTypeThresholdBox.value(0)
}
bacteriaNum = 0
editBacteria()
assignBacteria()
editBacteria()
}
function mousePressed() {
if ((0 < mouseX && mouseX < width) && (0 < mouseY && mouseY < height)) {
if (mouseButton === LEFT) {
emitters.push(new emitter(mouseX, mouseY, attract, 1, 10, 0.5))
}
if (mouseButton === CENTER) {
emitters.push(new emitter(mouseX, mouseY, repel, 1, 10, 0.5))
}
}
}
function addBacteria() {
for (b = bacterium.length; b < bacteriaNum; b++) {
if (random(0, 1) > threshold) {
bacterium.push(new bacteria(random(0, width), random(0, height), random(0.5,1.25), attract, repel, bacteriaRadius))
} else {
bacterium.push(new bacteria(random(0, width), random(0, height), random(0.5,1.25), repel, attract, bacteriaRadius))
}
}
}
function addAttract() {
for (e = 0; e < attractNum; e++) {
emitters.push(new emitter(random(0, width), random(0, height), attract, attractFreq, emitterRadius, 0.5))
}
}
function addRepel() {
for (e = 0; e < repelNum; e++) {
emitters.push(new emitter(random(0, width), random(0, height), repel, repelfreq, emitterRadius, 0.5))
}
}
function editBacteria() {
if (bacterium.length > bacteriaNum) {
while (bacterium.length > bacteriaNum) {
bacterium.splice(0, 1)
}
} else if (bacterium.length < bacteriaNum) {
addBacteria()
}
}
function deleteEmitter() {
emitters.splice(emitters.length - 1, 1)
}
function setup() {
let canvasWidth = windowWidth - 20
let canvasHeight = windowHeight - 100
bacteriaNum = round((canvasWidth * canvasHeight) / 1500)
if (firstTime) {
firstSetup()
firstTime = false
}
let canvas = createCanvas(canvasWidth, canvasHeight);
canvas.position(0, 45)
ellipseMode(CENTER)
attract = color(0, 255, 0, 100)
repel = color(255, 0, 0, 100)
addBacteria()
addAttract()
addRepel()
}
function draw() {
background(0);
editBacteria()
for (let b of bacterium) {
b.update()
b.draw()
}
for (let e of emitters) {
e.emit()
e.draw()
}
}