-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathradialMenu.pde
More file actions
62 lines (54 loc) · 1.46 KB
/
radialMenu.pde
File metadata and controls
62 lines (54 loc) · 1.46 KB
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
float mainR = 200;
float innerR = mainR-100;
float outerR = mainR+100;
float mouseAngle, mouseDistance, centerX, centerY;
float[] widths = new float[]{1,2,3,4,5,6};
ArrayList<Float> segAngleWidths = new ArrayList<Float>();
float totalWidth = 0;
ArrayList<Segment> segments = new ArrayList<Segment>();
void setup()
{
size(800, 600);
centerX = width/2;
centerY = height/2;
for (int i = 0; i < widths.length; i++)
{
totalWidth += widths[i];
}
for (int i = 0; i < widths.length; i++)
{
segAngleWidths.add((widths[i]/totalWidth) * TWO_PI);
}
float angle = 0;
for (int i = 0; i < segAngleWidths.size(); i++)
{
float sa = angle;
float ea = sa + segAngleWidths.get(i);
segments.add(new Segment(sa, ea, mainR));
angle += segAngleWidths.get(i);
}
}
void draw()
{
background(0);
mouseAngle = atan((mouseY - centerY) / (mouseX - centerX));
if (mouseX < centerX)
mouseAngle += PI;
else if (mouseY < centerY)
mouseAngle += TWO_PI;
mouseDistance = dist(mouseX, mouseY, centerX, centerY);
for (Segment segment : segments)
{
if (mouseAngle > segment.sa && mouseAngle < segment.ea && mouseDistance < segment.r && mouseDistance > innerR)
{
segment.r = lerp(segment.r, outerR, 0.15);
} else
{
segment.r = lerp(segment.r, mainR, 0.1);
}
segment.show();
}
fill(0);
ellipse(centerX, centerY, innerR*2, innerR*2);
fill(255);
}