Files
FreeJ/scripts/javascript/examples/acid_geo.js
2009-08-30 22:48:57 +02:00

279 lines
7.0 KiB
JavaScript

// dinges met iets acid-achtigs, met vierkantjes en rondjes ofzo, geen idee nog precies, maar iig 'jaren 90-ish'
// buZz, Puik.
W=get_width();
H=get_height();
echo("w=" + W);
//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(W,H);
//geo.color(255,255,255,255);
geo.set_blit("alpha");
//geo.set_blit_value(1);
geo.start();
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
}
}
}
}