Skip to content

Commit d51e17d

Browse files
committed
Add basis movement
1 parent d747326 commit d51e17d

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

main.js

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,26 @@ const SPACE_COLOR = [63, 63, 70];
88
const BASIS1_COLOR = [239, 68, 68];
99
const BASIS2_COLOR = [34, 197, 94];
1010
const GRID_COLOR = [3, 7, 18];
11+
const INITIAL_GRID_COLOR = [3, 7, 18, 80];
12+
const HANDLE_COLOR = [253, 224, 71];
1113

1214
// Values
1315

1416
let CANVAS_HAS_CHANGED = true;
1517
let SCALE = 50;
1618
let BASIS = [null, null];
17-
19+
let INITIAL_BASIS = [null, null];
20+
let BASIS_HANDLE_ACTIVE = [false, false];
21+
let MOUSE_TOLERANCE = 0.2;
1822

1923
// P5
2024

2125
function setup() {
2226
createCanvas(windowWidth + 200, windowHeight + 200, P2D, DOM_CANVAS);
2327
BASIS[0] = createVector(1, 0);
2428
BASIS[1] = createVector(0, 1);
29+
INITIAL_BASIS[0] = createVector(1, 0);
30+
INITIAL_BASIS[1] = createVector(0, 1);
2531
}
2632

2733
function draw() {
@@ -31,10 +37,13 @@ function draw() {
3137

3238
translate(windowWidth / 2, windowHeight / 2);
3339
scale(1, -1);
40+
cursor(ARROW);
3441

3542
background(SPACE_COLOR);
3643
drawBasisGrid(BASIS, GRID_COLOR);
44+
drawBasisGrid(INITIAL_BASIS, INITIAL_GRID_COLOR);
3745
drawBasisArrows(BASIS);
46+
drawBasisHandles(BASIS);
3847

3948
CANVAS_HAS_CHANGED = false;
4049
}
@@ -44,6 +53,55 @@ function windowResized() {
4453
CANVAS_HAS_CHANGED = true;
4554
}
4655

56+
function mouseMoved() {
57+
const col = (mouseX - (windowWidth / 2)) / SCALE;
58+
const row = ((windowHeight / 2) - mouseY) / SCALE;
59+
60+
if (abs(col - BASIS[0].x) < MOUSE_TOLERANCE &&
61+
abs(row - BASIS[0].y) < MOUSE_TOLERANCE) {
62+
BASIS_HANDLE_ACTIVE[0] = true;
63+
CANVAS_HAS_CHANGED = true;
64+
}
65+
else if (BASIS_HANDLE_ACTIVE[0] === true) {
66+
BASIS_HANDLE_ACTIVE[0] = false;
67+
CANVAS_HAS_CHANGED = true;
68+
}
69+
70+
if (abs(col - BASIS[1].x) < MOUSE_TOLERANCE &&
71+
abs(row - BASIS[1].y) < MOUSE_TOLERANCE) {
72+
BASIS_HANDLE_ACTIVE[1] = true;
73+
CANVAS_HAS_CHANGED = true;
74+
}
75+
else if (BASIS_HANDLE_ACTIVE[1] === true) {
76+
BASIS_HANDLE_ACTIVE[1] = false;
77+
CANVAS_HAS_CHANGED = true;
78+
}
79+
}
80+
81+
function mouseDragged() {
82+
let col = (mouseX - (windowWidth / 2)) / SCALE;
83+
const nearestCol = round(col);
84+
let row = ((windowHeight / 2) - mouseY) / SCALE;
85+
const nearestRow = round(row);
86+
87+
if (abs(col - nearestCol) < 0.1) {
88+
col = nearestCol;
89+
}
90+
91+
if (abs(row - nearestRow) < 0.1) {
92+
row = nearestRow;
93+
}
94+
95+
if (BASIS_HANDLE_ACTIVE[0]) {
96+
BASIS[0].set(col, row);
97+
CANVAS_HAS_CHANGED = true;
98+
}
99+
else if (BASIS_HANDLE_ACTIVE[1]) {
100+
BASIS[1].set(col, row);
101+
CANVAS_HAS_CHANGED = true;
102+
}
103+
}
104+
47105
// Canvas utils
48106

49107
function drawBasisArrows(basis) {
@@ -107,3 +165,17 @@ function drawBasisGrid(basis, color) {
107165
line(start.x, start.y, end.x, end.y);
108166
}
109167
}
168+
169+
function drawBasisHandles(basis) {
170+
stroke(HANDLE_COLOR);
171+
strokeWeight(6);
172+
173+
if (BASIS_HANDLE_ACTIVE[0]) {
174+
point(BASIS[0].x * SCALE, BASIS[0].y * SCALE);
175+
cursor(HAND);
176+
}
177+
else if (BASIS_HANDLE_ACTIVE[1]) {
178+
point(BASIS[1].x * SCALE, BASIS[1].y * SCALE);
179+
cursor(HAND);
180+
}
181+
}

0 commit comments

Comments
 (0)