//natalia@nataliarojas.com //www.nataliarojas.com //19-dec-03 //thanks to joerg muller for the formulas about vectors //thanks to manny tan [uncontrol.com] for the torch theory interpretation int mw = 900; int mh = 280; int xYear; int yYear; boolean overYear = false; boolean moveYear = false; // If mouse down and over boolean pressing = false; boolean haSoltado = false; boolean lanzando = false; int mouseXdist, mouseYdist; float targetPosXyear, targetPosYyear; float velXyear = 0; float oldVelXyear = velXyear; float rigidezYear = .02; float friccionYear = .95; float [][] posiciones; regalo [] regalosArr; int currentRegalo = 0; serpentina [] serpentinasArr; int currentSerpentina = 0; int index = 0; int xYearInit; BFont fontB; BFont fontA; void setup() { size(mw, mh); xYear = xYearInit = mw - 100; yYear = 255; posiciones = new float[5000][4]; regalosArr = new regalo[500]; serpentinasArr = new serpentina[10000]; fontA = loadFont("B_Surfers.vlw"); fontB = loadFont("OCR-B.vlw.gz"); } void loop() { background(0, 0, 0); pintarYear(); pintarMsg(); crearRegalos(); pintarRegalos(); pintarSerpentinas(); } void pintarMsg() { textFont(fontB, 17); fill(255,255,255); stroke(255,255,255); line(105, 36, 109, 36); text("Happy new year\nFeliz ano nuevo", 40, 30); } void pintarYear() { if (overYearFunction() || pressing) { overYear = true; fill(153,0,0); } else { overYear = false; fill(255,255,255); } if (moveYear || lanzando) { if (lanzando) targetPosXyear = targetPosXyear; else targetPosXyear = mouseX; if (moveYear && targetPosXyear>mw) targetPosXyear = mw - 50; if (moveYear && targetPosXyear<0) targetPosXyear = 50; velXyear *= friccionYear; velXyear += (targetPosXyear - xYear) * rigidezYear; xYear += velXyear; if (lanzando && abs(oldVelXyear-velXyear)<0.0005) { lanzando = false; } } oldVelXyear = velXyear; textFont(fontA, 30); text("2004", xYear, yYear); } boolean overYearFunction() { if (mouseX > xYear && mouseX < xYear+80 && mouseY > yYear-30 && mouseY < yYear) { return true; } else return false; } //regalos void crearRegalos() { if (!pressing && !lanzando) return; if (currentRegalo==0) { regalosArr[currentRegalo] = new regalo(currentRegalo); currentRegalo++; } else { if (regalosArr[currentRegalo-1].x < mw-50 && currentRegalo<12) { regalosArr[currentRegalo] = new regalo(currentRegalo); currentRegalo++; } } } void pintarRegalos() { for (int i=0; i x && mouseX < x+ancho && mouseY > y && mouseY < y+alto) { return true; } else return false; } } //serpentinas class serpentina { int id; int idRegalo; float a_x,a_y,b_x,b_y,c_x,c_y,d_x,d_y,e_x,e_y,f_x,f_y; float ba_percentage = 0.050000; float be_percentage = 0.920000; int count; float offset; float offsetX; boolean pintando = false; float [][] posicionesS; int indexTrozos; int dir = (random(2)<1)? 1 : -1; int v; serpentina(int i, int idR) { id = i; idRegalo = idR; initSerpentina(); posicionesS = new float[500][4]; indexTrozos = 0; } void initSerpentina() { a_x = regalosArr[idRegalo].x; a_y = regalosArr[idRegalo].y; b_x = regalosArr[idRegalo].x; b_y = regalosArr[idRegalo].y - 15; c_x = random(20) + regalosArr[idRegalo].x - 10; c_y = regalosArr[idRegalo].y - 15; offsetX = 70*dir; initSerpentinaTrozo(); } void initSerpentinaTrozo() { pintando = true; offset = regalosArr[idRegalo].x + offsetX; count = 1; a_x = random(20 * count) + offset - 20 * count; a_y = a_y - random(20) - 5; } void pintar() { if (pintando) { d_x = (a_x - b_x) * ba_percentage + b_x; d_y = (a_y - b_y) * ba_percentage + b_y; e_x = b_x - (b_x - c_x) - (b_x - d_x); e_y = b_y - (b_y - c_y) - (b_y - d_y); f_x = e_x - (b_x - e_x) * be_percentage; f_y = e_y - (b_y - e_y) * be_percentage; posicionesS[indexTrozos][0] = e_x; posicionesS[indexTrozos][1] = e_y; posicionesS[indexTrozos][2] = e_x + (b_x-e_x); posicionesS[indexTrozos][3] = e_y + (b_y-e_y); for (int i=0; i