11import { fnusin , fusin } from 'animation' ;
22import { GREEN , layer , RED , WHITE } from 'color' ;
33import { sprite , texturePosition } from 'image' ;
4- import { PI , rotateVector , TAU } from 'math' ;
4+ import { PI , rotateVector } from 'math' ;
55import { sdfCircle , sdfLine2 , sdfSquare , sdfSegment } from 'sdf' ;
66import { structs } from './structs.js' ;
77
@@ -16,7 +16,7 @@ ${sdfCircle}
1616${ sdfSquare }
1717${ rotateVector }
1818${ sprite }
19- ${ TAU }
19+
2020${ PI }
2121${ layer }
2222${ fusin }
@@ -102,14 +102,27 @@ fn sdRectangle1(position:vec2f, size:vec2f, feather:f32, uv:vec2f) -> f32 {
102102 return st;
103103}
104104
105+ fn sdfngon(position:vec2f, numSides:f32, radius:f32, feather:f32, uv:vec2f) -> f32 {
106+ let uv2 = uv - position;
107+ let angle = atan2(uv2.y, uv2.x);
108+ let distance = length(uv2);
109+
110+ let border = -.05;
111+
112+ let sector = TAU / numSides;
113+ let d = 1 - cos(floor(0.5 + angle / sector) * sector - angle) * length(uv2) - radius;
114+ return mix(0,1, step(border, d) * step(d, border + feather));
115+ }
116+
105117fn sdRectangle2(position0:vec2f, position1:vec2f, uv:vec2f) -> f32 {
106118 let d = max(position0 - uv, uv - position1);
107119 // If the point is inside the rectangle, return the negative distance to the closest edge
108120 return length(max(d, vec2f())) + min(max(d.x, d.y), 0.0);
109121}
110122
111123
112-
124+ const TAU = PI * 2; // TODO: fix on main library
125+ const TAUQUARTER = TAU * .25;
113126const NUMCHARS = 128;
114127const MAXBITS = 256;
115128const CHLEN = 0.125;
@@ -226,18 +239,25 @@ fn main(
226239 stringMask2 += sprite(font, textImageSampler, space + fontPosition + charPosition, textUVR + .0005, charIndex - charOffset, charSize).x;
227240 }
228241
242+ var messageStringMask = 0.;
243+ let messagePosition = vec2(.15, .19) * ratio;
244+ for (var index = 0; index < 21; index++) {
245+ let charIndex = u32(message[index]);
246+ let charPosition = charSizeF32 * vec2(f32(index), sin(params.time + f32(index) * .1));
247+ let space = spaceRatio * vec2(f32(index), 0);
248+ messageStringMask += sprite(font, textImageSampler, space + messagePosition + charPosition, textUVR, charIndex - charOffset, charSize).x;
249+ }
229250
230251
231-
232-
233- var equiTriUV = uvr_minus_center / .156; // .31
234- let c2Visible = step(.001, c2); // to revert value only if c2 (triangle ) is visible
252+ let minNumSides = 3.;
253+ let numSides = minNumSides + floor(5 * c7);
254+ var equiTriUV = uvr_minus_center / .156 * minNumSides / numSides ; // .31
255+ let c2Visible = step(.001, c2); // to revert value only if c2 (poligon ) is visible
235256 variables.triRotation += TRIROTATION * c7 * c6 + c5 * TRIROTATION; // rotate gradually
236257 variables.triRotation -= .000001 * step(0., variables.triRotation) * c2Visible;
237258 variables.triRotation = variables.triRotation % TAU; // cap rotation to avoid it getting stuck
238- equiTriUV = rotateVector(equiTriUV, variables.triRotation);
239- let equiTriMask = sdfEquiTriangle2(vec2f(), 1 - c2 * .5, .007, equiTriUV) * c2Visible;
240-
259+ equiTriUV = rotateVector(equiTriUV, variables.triRotation + TAUQUARTER);
260+ let poliMask = sdfngon(vec2f(), numSides, .5 + (c7 * .5), .01, equiTriUV) * c2Visible;
241261
242262 let progressBarMask = sdfLine2(vec2(), vec2(params.progress,0) * ratio, .005, uvr);
243263
@@ -251,7 +271,7 @@ fn main(
251271 var audioWave = vec4f();
252272 var audioWave2 = vec4f();
253273 var progressBar = vec4f();
254- var triangle = vec4f();
274+ var poligon = vec4f();
255275 var stringColor = vec4f();
256276 var stringColor2 = vec4f();
257277
@@ -262,23 +282,23 @@ fn main(
262282 audioWave = vec4f(lineMask, lineMask*audioX, lineMask*uvrRotate.x, 1);
263283 audioWave2 = vec4f(lineMask2, lineMask2*audioX2, lineMask2*uvrRotate.x, 1);
264284 progressBar = vec4f(1,audioX,uvrRotate.x,1) * progressBarMask;
265- triangle = vec4f(1,.4 + .1 * c4, step(.5, c2) * .4,1) * equiTriMask ;
266- stringColor = stringMask * mix(vec4(1 * fusin(.132) , 1 * fusin(.586) ,0,1), vec4(1,.5, 1 * fusin(.7589633), 1), c0);
267- stringColor2 = stringMask2 * mix( vec4( 1-vec3(1 * fusin(.132) , 1 * fusin(.586), 0), 1), vec4(1-vec3(1,.5, 1 * fusin(.7589633)), 1), c0);
285+ poligon = vec4f(1,.4 + .1 * c4, step(.5, c2) * .4,1) * poliMask ;
286+ stringColor = stringMask * mix(vec4(fusin(.132) , fusin(.586) ,0,1), vec4(1,.5, fusin(.7589633), 1), c0);
287+ stringColor2 = stringMask2 * mix( vec4( 1-vec3(fusin(.132) , fusin(.586), 0), 1), vec4(1-vec3(1,.5, fusin(.7589633)), 1), c0);
268288 }
269289 case 1 { // matrix
270290 audioWave = vec4f( vec3f(.129,.145,.039) * lineMask, 1);
271291 audioWave2 = vec4f( vec3f(.231,.274,.117) * lineMask2, 1);
272292 progressBar = vec4f( vec3f(.2,.282,.152) * progressBarMask, 1);
273- triangle = vec4f( vec3f(.309,.4,.290) * equiTriMask , 1);
293+ poligon = vec4f( vec3f(.309,.4,.290) * poliMask , 1);
274294 stringColor = vec4f( .572,.717,.549, 1) * stringMask;
275295 stringColor2 = stringMask2 * GREEN;
276296 }
277297 case 2 { // artwork
278298 audioWave = vec4f( mix(artworkColors[9].rgb, artworkColors[0].rgb, audioX) * lineMask, 1);
279299 audioWave2 = vec4f( mix(artworkColors[8].rgb, artworkColors[1].rgb,audioX) * lineMask2, 1);
280300 progressBar = vec4f( mix(artworkColors[7].rgb, artworkColors[2].rgb, uvrRotate.x) * progressBarMask, 1);
281- triangle = vec4f( mix(artworkColors[6].rgb, artworkColors[3].rgb, c4) * equiTriMask , 1);
301+ poligon = vec4f( mix(artworkColors[6].rgb, artworkColors[3].rgb, c4) * poliMask , 1);
282302 stringColor = mix(artworkColors[5], artworkColors[4], c0) * stringMask;
283303 stringColor2 = stringMask2 * WHITE;
284304 }
@@ -287,23 +307,24 @@ fn main(
287307 audioWave = vec4f( B * (1-lineMask), lineMask);
288308 audioWave2 = vec4f( B * (1-lineMask2), lineMask2);
289309 progressBar = vec4f( B * (1-progressBarMask), progressBarMask);
290- triangle = vec4f( B * (1-equiTriMask ), equiTriMask );
310+ poligon = vec4f( B * (1-poliMask ), poliMask );
291311 stringColor = vec4f(vec3f(1-stringMask), stringMask);
292312 stringColor2 = stringMask2 * WHITE;
293313 }
294314 }
295315
296316
297317
298- var finalColor = layer(audioWave2 + audioWave + progressBar + triangle + feedbackColor, layer(stringColor2, stringColor));
318+ var finalColor = layer(audioWave2 + audioWave + progressBar + poligon + feedbackColor, layer(stringColor2, stringColor));
299319 if(colorScheme == 3){
300320 finalColor = layer(bg, finalColor);
301321 }
302322 // let finalColor = layer(bg, audioWave);
303323 // let finalColor = vec4f(1,s,0,1);
304324
305- return finalColor;
306- // return vec4(st, 0, 1);
325+ return finalColor + (messageStringMask * WHITE * params.showMessage * .1);
326+ // return finalColor + (poliMask * WHITE * params.showMessage * .1);
327+ // return poliMask * WHITE;
307328}
308329` ;
309330
0 commit comments