-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRoutineShootingStars.pde
130 lines (114 loc) · 3.09 KB
/
RoutineShootingStars.pde
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
public class StarFactory implements RoutineFactory {
public Routine create(PApplet parent) {
return new RoutineShootingStars();
}
}
public class RoutineShootingStars extends Routine {
public RoutineShootingStars() {
super(450, 450);
}
ArrayList stars = new ArrayList();
ArrayList palettes = new ArrayList();
float speed = 3, interval = 5;
long timeLimit = 10 * 1000L;
long paletteSwitchTime = 0;
int paletteIndex = 0;
int[] angles = { 60, 75, 90 };
// Disorient colors
float[][] palette1 = {
{255, 140, 0}, // orange
{255, 105, 180}, // bright pink
{255, 0, 255}, // purple
{255, 255, 255} // white
};
// Icy
float[][] palette2 = {
{0, 0, 255}, // blue
{0, 255, 255}, // cyan
{255, 255, 255} // white
};
// Primary rainbow colors
float[][] palette3 = {
{255, 0, 0}, // red
{255, 255, 0}, // yellow
{0, 255, 0}, // green
{0, 0, 255}, // blue
{0, 255, 255}, // cyan
{255, 0, 255} // purple
};
// Green colors
float[][] palette4 = {
{0, 255, 0}, // green
{0, 128, 0}, // dark green
{212, 175, 55}, // gold
{160, 255, 170} // mint
};
public void setup() {
pg.background(0);
pg.strokeWeight(3);
// pg.translate(width / 2, height / 2);
palettes.add(palette1);
palettes.add(palette2);
palettes.add(palette3);
palettes.add(palette4);
paletteSwitchTime = System.currentTimeMillis();
}
public void draw() {
//pg.background(0);
pg.translate(pg.width/2, pg.height/2);
if ((frameCount % interval) == 0 && stars.size() < 360) {
for (int i = 0; i < 360; i += 60) {
stars.add(new Star(pg, (frameCount + i), random(250, 450)));
}
}
for (int i = 0; i < stars.size(); i++) {
Star s = (Star)stars.get(i);
s.draw();
s.move();
}
long timeDelta = System.currentTimeMillis() - paletteSwitchTime;
if (timeDelta >= timeLimit) {
paletteIndex++;
if (paletteIndex % palettes.size() == 0)
paletteIndex = 0;
paletteSwitchTime = System.currentTimeMillis();
}
//dome.sendData(map.applyMap());
}
class Star {
PGraphics pg;
PVector v1, v2;
float r, g, b;
float distance, delta1 = 0, delta2 = 0;
Star(PGraphics pg, float i, float d) {
this.pg = pg;
v1 = new PVector(sin(radians(i)), cos(radians(i)));
v2 = v1.get();
float[][] palette = (float[][])palettes.get(paletteIndex);
int idx = (int)random(palette.length);
r = palette[idx][0];
g = palette[idx][1];
b = palette[idx][2];
distance = d;
}
void draw() {
pg.stroke(r, g, b);
pg.line(v1.x * delta1, v1.y * delta1, v2.x * delta2, v2.y * delta2);
}
void move() {
if (delta1 < distance) {
delta1 += speed;
} else if (delta2 >= distance) {
delta1 = 0;
}
if (delta1 > distance / 4 && delta2 < distance ) {
delta2 += speed;
} else {
delta2 = 0;
}
if (delta1 == 0 && delta2 == 0) {
stars.remove(this);
}
}
} // class Star
} // class RoutineShootingStars