Skip to content

Instantly share code, notes, and snippets.

@zetta
Created September 8, 2010 18:08
Show Gist options
  • Save zetta/570526 to your computer and use it in GitHub Desktop.
Save zetta/570526 to your computer and use it in GitHub Desktop.
/**
* 1k Boomshine js port
* @author zetta
* @version 0.5
* java -jar compiler/compiler.jar --js source.js --js_output_file min.js --warning_level QUIET --compilation_level ADVANCED_OPTIMIZATIONS
**/
/**
* Iniciamos las variables
* @param _ = document
* @param M = Math
* @param R = Math.random
* @param L = Nivel que se esta jugando
* @param a = document.getElementById('c')
* @param c = document.getElementById('c').getContext('2d')
* @param f = array Variable donde guardamo la informacion de las pelotitas
* @param q = array Cola donde se suscriben los eventos que revientan las pelotitas
* @param X = innerWidth
* @param Y = innerHeight
* @param w = la 'current' pelotita dentro del main loop
* @param v = la pelotita con la que se esta comparando la posicion de current pelotita
* @param g = int numero de bolas visibles en el escenario
**/
//var _=document, M=Math, R=M.random, a=_.getElementById("c"), c=a.getContext("2d"),f=[], X=a.width=innerWidth,Y=a.height=innerHeight, w,v,g, q=[];
//var _=document, M=Math, R=M.random, a=_.getElementById("c"), c=a.getContext("2d"),f=[], q=[], X=a.width=670,Y=a.height=400, w,v,g,z,r,m,k;
Q=L=1;F=[];
t=document, M=Math, R=M.random, a=t.getElementById("c"); // c=a.getContext('2d'); // t.body.children[0] // una vez compilado regresar a la variable children!!
X=a.width=550,Y=a.height=C=E=350;
for(p in c=a.getContext('2d'))
c[p[P=0]+(p[6]||'')]=c[p];
// C = CLEAR // terminamos con todas las bolitas
// E = END // se termino la cola de bolitas (no sabemos si tambien fue un clear)
//W=setInterval(
setInterval(
function(){
// main loop, recorremos el arreglo de pelotitas para calcular su posicion y dibujarla en el escenario
if(C||E)
{
if(P){
L++;
if(!C){
if(confirm('Fail '+P+' pts Share?'))
t.location='http://twitter.com/?status='+escape('I got '+P+' on http://bit.ly/9ehgnG :D #js1k');
P=L=0;
}
}
//console.log('debo entrar aqui');
//console.log(f);
F=[],G=Q=1,C=E=0;
for(k=34+L;k--;G++) F[k]={ x: R()*X, y: R()*Y, s: 3, i: R()+.5, j: R()+.5, c : R()*254, l: 0};
onmousedown = function(d){
// agregamos esta pelotita al array principal, sin movimiento para que comienze su efecto de explosion
//if(f.length!=g)
F.push({x: d.clientX, y: d.clientY, s: 1, i: 0, j: 0, c: 120, l: 0});
onmousedown=null;
};
//console.log(f);
}
//console.log(c);
with(c)
{
ce(0,0,X,Y);
//g=cL(0,0,X,Y);
//g.addColorStop(0,'#fd0');
//g.addColorStop(1,'#fff');
/*fillStyle='#fd0';
ba();
r(0,0,X,Y);
f();*/
//console.log(f);
for(var d=F.length,B=d;B--;){
//console.log('aqui no');
/**
* agregamos un alias del indice actual y verificamos si este es un array, si es falso, quiere decir que la pelotita
* ya estalló y no hay necesidad de dibujarla en el espacio
* @param w, la pelotita con la que trabajamos actualmente
*/
if(w=F[B]){
// efecto de explosion
if(w.j)
{
for(A=d;A--;){
v=F[A];
if(A!=B&&!v.j){
// i es la distancia x entre el actual y el 'otro'
// j es la distancia y entre el actual y el 'otro'
// u es la raiz cuadrada de la suma de cuadrados (teorema de pitagoras) (distancia total) entre las pelotitas
i=v.x-w.x, j=v.y-w.y;
// si ya "tocamos" la explosion, tenemos que explotar tambien
if(v.s>M.sqrt(i*i+j*j)&&w.j) {w.i=w.j=0; Q++}
}
}
// calculemos su nueva posicion
w.x+=w.i;
w.y+=w.j;
// si tocamos los bordes, el movimiento tiene que ser hacia el otro lado
if(w.x>X||w.x<0) w.i*=-1;
if(w.y>Y||w.y<0) w.j*=-1;
}
// si la pelotita ya no tiene movimiento (esta estallando)
// tenemos que hacer un ease hacia el nuevo size
else {
w.s += ((40-w.s)/40);
w.l++;
}
// ahora dibujamos la bolita actual
// hue, saturation, luminosity
fillStyle="hsl("+w.c+",70%,70%)";
//var COLOR="rgb("+[M.ceil(w.c/2),w.c,M.ceil(w.c/3),0.5]+")";
//console.log(COLOR);
//fillStyle = COLOR;
ba(); // begin path
a(w.x,w.y,w.s,0,M.PI*2,1);
f(); // fill
if(3e2==w.l) {
F[B]=0; G--; Q--;
E=!Q?1:E;
C=!G?1:C;
P+=250
};
}
}
strokeRect(0,0,X,Y);
fillStyle="#000";
fx('L '+L+' P '+P,5,15);
}
},5);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment