1
1
fn make_polka_dots(pos: vec2<f32>, time: f32) -> vec4<f32> {
2
- // Create repeating circles
3
2
let scaled_pos = pos * 6.0;
4
3
let cell = vec2<f32>(fract(scaled_pos.x), fract(scaled_pos.y));
5
- let dist_from_center = distance(cell, vec2<f32>(0.5));
6
-
7
- // Make dots alternate between pink and purple
4
+ var dist_from_center = distance(cell, vec2<f32>(0.5));
5
+
8
6
let is_even = (floor(scaled_pos.x) + floor(scaled_pos.y)) % 2.0;
9
7
10
8
var dot_color = vec3<f32>(0.0);
9
+ var is_dot = 0.0;
10
+
11
11
@if(!PARTY_MODE) {
12
12
let color1 = vec3<f32>(1.0, 0.4, 0.8); // pink
13
13
let color2 = vec3<f32>(0.6, 0.2, 1.0); // purple
14
14
dot_color = mix(color1, color2, is_even);
15
- }
16
- // Animate the colors in party mode
17
- @if(PARTY_MODE) {
18
- let color1 = vec3<f32>(1.0, 0.2, 0.2); // red
19
- let color2 = vec3<f32>(0.2, 0.2, 1.0); // blue
20
- let oscillation = (sin(time * 10.0) + 1.0) * 0.5;
21
- let animated_color1 = mix(color1, color2, oscillation);
22
- let animated_color2 = mix(color2, color1, oscillation);
15
+ is_dot = step(dist_from_center, 0.3);
16
+ } @else {
17
+ let grid_x = floor(scaled_pos.x);
18
+ let grid_y = floor(scaled_pos.y);
19
+ let wave_speed = 3.0;
20
+ let wave_phase = time * wave_speed;
21
+
22
+ let diagonal_pos = (grid_x + grid_y) * 0.5;
23
+ let wave_value = sin(diagonal_pos + wave_phase);
24
+
25
+ let wave_normalized = (wave_value + 1.0) * 0.5;
26
+
27
+ let color1 = vec3<f32>(1.0, 0.3, 0.7);
28
+ let color2 = vec3<f32>(0.5, 0.1, 1.0);
29
+ let intense_color1 = vec3<f32>(1.0, 0.1, 0.9);
30
+ let intense_color2 = vec3<f32>(0.8, 0.0, 1.0);
31
+
32
+ let animated_color1 = mix(color1, intense_color1, wave_normalized);
33
+ let animated_color2 = mix(color2, intense_color2, wave_normalized);
34
+
23
35
dot_color = mix(animated_color1, animated_color2, is_even);
36
+
37
+ let size_mod = 0.15 * wave_value;
38
+ dist_from_center = dist_from_center * (1.0 - size_mod);
39
+ // Animate whether something is a dot by position but also time
40
+ is_dot = step(dist_from_center, 0.3 + wave_normalized * 0.2);
24
41
}
25
42
26
- // Draw the dot
27
- let is_dot = step(dist_from_center, 0.3);
28
43
return vec4<f32>(dot_color * is_dot, is_dot);
29
44
}
0 commit comments