Created
September 8, 2010 18:08
-
-
Save zetta/570526 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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