diff --git a/scripts/javascript/examples/acid_geo.js b/scripts/javascript/examples/acid_geo.js new file mode 100644 index 00000000..216384a2 --- /dev/null +++ b/scripts/javascript/examples/acid_geo.js @@ -0,0 +1,278 @@ +// dinges met iets acid-achtigs, met vierkantjes en rondjes ofzo, geen idee nog precies, maar iig 'jaren 90-ish' +// buZz, Puik. + +W=640 +H=480 + +set_resolution(W,H); + +kbd = new KeyboardController(); + +srand(); + +acidpalet = new Array(6); + +for (i = 0; i < acidpalet.length ; ++i) { + + acidpalet [i] = new Array(3); + +} + +//viez blauw +acidpalet [0][0] = "0"; +acidpalet [0][1] = "159"; +acidpalet [0][2] = "247"; + +//supergeel +acidpalet [1][0] = "255"; +acidpalet [1][1] = "245"; +acidpalet [1][2] = "0"; + +//ranziggroen +acidpalet [2][0] = "46"; +acidpalet [2][1] = "255"; +acidpalet [2][2] = "84"; + +//gayroze +acidpalet [3][0] = "254"; +acidpalet [3][1] = "0"; +acidpalet [3][2] = "124"; + +//gewoon wit, mja, vet acid weetje +acidpalet [4][0] = "255"; +acidpalet [4][1] = "255"; +acidpalet [4][2] = "255"; + +//mehoranje +acidpalet [5][0] = "255"; +acidpalet [5][1] = "168"; +acidpalet [5][2] = "0"; + +//encoder = new VideoEncoder(50, 64000, 0, 0); +//register_encoder(encoder); + + +//kbd.pressed_x = function() { +// encoder.stop_filesave(); +//} + +//kbd.pressed_z = function() { +// encoder.start_filesave("acidvid.ogm"); +//} + +function brand ( n ) +{ + return ( Math.floor ( Math.random ( ) * n + 1 ) ); +} + +function drawRotatedtriangle(layer, centerx, centery, radius, rotation) { + +// rotation = (rotation/180)*Math.PI; + + ax = Math.cos((rotation/180)*Math.PI) * radius; + ay = Math.sin((rotation/180)*Math.PI) * radius; + bx = Math.cos(((rotation+120)/180)*Math.PI) * radius; + by = Math.sin(((rotation+120)/180)*Math.PI) * radius; + cx = Math.cos(((rotation+240)/180)*Math.PI) * radius; + cy = Math.sin(((rotation+240)/180)*Math.PI) * radius; + + layer.trigon_fill(ax+centerx,ay+centery,bx+centerx,by+centery,cx+centerx,cy+centery); + +} + +function drawRotatedsquare(layer, centerx, centery, radius, rotation) { + +// rotation = (rotation/180)*Math.PI; + + ax = Math.cos((rotation/180)*Math.PI) * radius; + ay = Math.sin((rotation/180)*Math.PI) * radius; + bx = Math.cos(((rotation+90)/180)*Math.PI) * radius; + by = Math.sin(((rotation+90)/180)*Math.PI) * radius; + cx = Math.cos(((rotation+180)/180)*Math.PI) * radius; + cy = Math.sin(((rotation+180)/180)*Math.PI) * radius; + dx = Math.cos(((rotation+270)/180)*Math.PI) * radius; + dy = Math.sin(((rotation+270)/180)*Math.PI) * radius; + + layer.trigon_fill(ax+centerx,ay+centery,bx+centerx,by+centery,cx+centerx,cy+centery); + layer.trigon_fill(ax+centerx,ay+centery,dx+centerx,dy+centery,cx+centerx,cy+centery); + +} + +kbd.pressed_esc = function() { quit(); } +//kbd.released_q = function() { quit(); } +register_controller( kbd ); + +geo = new GeometryLayer(); +//geo.color(255,255,255,255); +geo.set_blit("alpha"); +//geo.set_blit_value(1); +geo.set_fps(); +geo.activate(true); +add_layer(geo); + +//drawStar(geo,30,1); + +framec = 24; + +xinc = 2; +yinc = 1; +zinc = 0; + +forceshape = 0; +forcedshape = 1; + +acidmode = 1; + +kbd.pressed_w = function() { yinc--; } +kbd.pressed_s = function() { yinc++; } +kbd.pressed_a = function() { xinc--; } +kbd.pressed_d = function() { xinc++; } +kbd.pressed_q = function() { zinc--; } +kbd.pressed_e = function() { zinc++; } + +kbd.pressed_c = function() { xinc=0; yinc=0; } + +kbd.pressed_1 = function() { forceshape=1; forcedshape=1; } +kbd.pressed_2 = function() { forceshape=1; forcedshape=2; } +kbd.pressed_3 = function() { forceshape=1; forcedshape=3; } +kbd.pressed_4 = function() { forceshape=1; forcedshape=4; } +kbd.pressed_5 = function() { forceshape=1; forcedshape=5; } +kbd.pressed_6 = function() { forceshape=1; forcedshape=6; } +kbd.pressed_7 = function() { forceshape=1; forcedshape=7; } + +kbd.released_1 = function() { forceshape=0; } +kbd.released_2 = function() { forceshape=0; } +kbd.released_3 = function() { forceshape=0; } +kbd.released_4 = function() { forceshape=0; } +kbd.released_5 = function() { forceshape=0; } +kbd.released_6 = function() { forceshape=0; } +kbd.released_7 = function() { forceshape=0; } + + +kbd.pressed_0 = function() { acidmode=-acidmode; } + +objectnum = 35; +maxz = 20; + + +object = new Array(objectnum) + +function randomizeObjects() { + for (i = 0; i < object.length ; ++i) { + // ieder object is 7 dingen : r g b x y z en type + object [i] = new Array(7); + + // kleur instellen + + object [i][0] = brand(256)-1; //r + object [i][1] = brand(256)-1; //g + object [i][2] = brand(256)-1; //b + // alpha zou hier ook nog kunnen, maar meh + + // posities instellen + + object [i][3] = brand(W); //x + object [i][4] = brand(H); //y + object [i][5] = brand(maxz)-1; //z + + // type instellen + + // ehm sja, 1 is circle :D + + object [i][6] = brand(8); // hihi + + // acidkleur kiezen ;) + + object [i][7] = brand(acidpalet.length)-1; + + } +} + +randomizeObjects(); + +kbd.released_r = function() { randomizeObjects(); } + +bang = new TriggerController(); +register_controller(bang); +bang.frame = function() { + if(framec>0) { + framec--; + } else { + // ehm, ja, hier is dus een frame ofzo? + // ja val me niet lastig, ik copypaste er ook maar op los :D + +// geo.set_blit("alpha"); +// geo.set_blit_value(256); + + + geo.color(0,0,0,0); + geo.clear(); + + for (i = 0; i < object.length ; ++i) { + + // oude object wissen? + + // object updaten + + object [i][3] = (object [i][3])+(xinc * ((maxz-(object [i][5]))/2)); + if (object [i][3]<0) object [i][3]=W; + if (object [i][3]>W) object [i][3]=0; + + object [i][4] = (object [i][4])+(yinc * ((maxz-(object [i][5]))/2)); + if (object [i][4]<0) object [i][4]=H; + if (object [i][4]>H) object [i][4]=0; + + // object tekenen + +// geo.set_blit("add"); +// geo.set_blit_value(255); + + if (acidmode<0) { + geo.color(object [i][0], object [i][1], object [i][2]); + } else { + die = object [i][7]; + geo.color(acidpalet [die][0], acidpalet [die][1], acidpalet [die][2]); + } + + objectshape = object [i][6]; + + if (forceshape) objectshape = forcedshape; + + switch (objectshape) { + case 1: + geo.circle_fill(object [i][3], object [i][4], 30 - object [i][5]); + break; + case 2: + geo.pie_fill(object [i][3], object [i][4], 30 - object [i][5], (360/W)*object [i][3], (360/H)*object [i][4]); + break; + case 3: + rotation = (((360/W)*object[i][3])+((360/H)*object[i][4]))/2; + drawRotatedsquare(geo, object [i][3], object [i][4], (50 - object [i][5]), rotation); + break; + case 4: + rotation = 360-((((360/W)*object[i][3])+((360/H)*object[i][4]))/2); + drawRotatedsquare(geo, object [i][3], object [i][4], (50 - object [i][5]), rotation); + break; + case 5: + geo.rectangle_fill(object [i][3] - (10 - object [i][5]), object [i][4] - (30 - object [i][5]), object [i][3] + (10 - object [i][5]), object [i][4] + (30 - object [i][5])); + break; + case 6: + geo.rectangle_fill(object [i][3] - (30 - object [i][5]), object [i][4] - (10 - object [i][5]), object [i][3] + (30 - object [i][5]), object [i][4] + (10 - object [i][5])); + break; + case 7: + rotation = (((360/W)*object[i][3])+((360/H)*object[i][4]))/2; + drawRotatedtriangle(geo, object [i][3], object [i][4], (50 - object [i][5]), rotation); + break; + case 8: + rotation = 360-((((360/W)*object[i][3])+((360/H)*object[i][4]))/2); + drawRotatedtriangle(geo, object [i][3], object [i][4], (50 - object [i][5]), rotation); + break; + default: + // huuuuuuuuuuuuuuuuuu + } + + } + + } +} +