-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsimulation.js
87 lines (70 loc) · 1.71 KB
/
simulation.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
let flock;
let obstacles = [];
let running = true;
let obstacleMode = false;
let debugMode = false;
let canvasContainer;
function setup() {
canvasContainer = document.getElementById("canvas-container");
const myCanvas = createCanvas(
canvasContainer.clientWidth,
canvasContainer.clientHeight,
P2D
);
myCanvas.parent("canvas-container");
myCanvas.mouseClicked(addObstacle);
separationSlider = createSlider(0, 2, 1.4, 0.1);
alignSlider = createSlider(0, 2, 1, 0.1);
cohesionSlider = createSlider(0, 2, 1.1, 0.1);
separationSlider.parent("seperation");
alignSlider.parent("alignment");
cohesionSlider.parent("cohesion");
imageMode(CENTER);
img = loadImage("img/bug20.svg");
obstacle = loadImage("img/tornado.svg");
flock = new Flock();
}
function draw() {
if (!running) {
return;
}
background(255);
for (let o of obstacles) {
o.render();
}
flock.run(obstacles);
flock.update();
let fps = frameRate();
fill(0);
text("FPS: " + fps.toFixed(2), 15, height - 15);
}
function vmin(viewportPercent) {
viewportPercent = viewportPercent / 100;
var viewportMinSize = Math.min(window.innerWidth, window.innerHeight);
return viewportPercent * viewportMinSize;
}
function keyPressed() {
switch (key) {
case "p":
running = !running;
break;
case "o":
obstacles = [];
obstacleMode = !obstacleMode;
break;
case "d":
debugMode = !debugMode;
break;
default:
break;
} // flip the boolean
}
function addObstacle() {
if (!obstacleMode) {
return;
}
obstacles.push(new Obstacle(mouseX, mouseY));
}
function windowResized() {
resizeCanvas(canvasContainer.clientWidth, canvasContainer.clientHeight);
}