- float phase_x = (s.x - phase * model_width / ( 2 * PI)) % model_width;
- float d = sqrt(pow(p.x - phase_x, 2) + pow(p.y - s.y, 2) + pow(p.z - s.z, 2));
- float r = (s.radius);
- float value = max(0, 1 - max(0, d - r) / 10);
-
- c = blendColor(c, color(hue_color + 180 % 360, 70, min(1, value) * 100), ADD);
+ float phase_x = (s.x - phase * modelWidth / ( 2 * PI)) % modelWidth;
+ float x_dist = LXUtils.wrapdistf(p.x, phase_x, modelWidth);
+
+ float sphere_z = (s == spheres[0]) ? (s.z + sphere1Z.getValuef()) : (s.z - sphere2Z.getValuef());
+
+ float d = sqrt(pow(x_dist, 2) + pow(p.y - s.y, 2) + pow(p.z - sphere_z, 2));
+ float r = 25;
+
+ float distance_value = max(0, 1 - max(0, d - r) / 10);
+ float beat_value = 1.0;
+ if (s == spheres[0]) {
+ // beat_value = .2 + ((beat % 4 >= 2) ? ((4 - (ramp + beat)) / 2) *.8 : 0);
+ }
+ else {
+ // beat_value = .2 + ((beat % 4 < 2) ? ((2 - (ramp + beat)) / 2) *.8 : 0);
+ }
+
+ float value = min(beat_value, distance_value);
+
+ c = blendColor(c, color((hue_color + 90) % 360, 100, min(1, value) * 100), ADD);