/* @pjs font="arial.ttf";globalKeyEvents=true; */ /* ############################################################ Vertige sur N+* Régis Hervé - avril 2013 Creative Commons CC BY-SA Pour Nino :) H : afficher aide commandes Cliquer pour avancer Entrée : afficher boites / modifier couleurs 0:niet 1:boites unies 2:/dizaines 3:/centaines 4:/milliers +/- : modifier vitesse (x1 x2 x4 x8 x16 x32 x100) P: pause V: activer/désactiver opengl depth test et nombres C: modifier taille B: options de rafraichissement 1:normal 2:pas de 'clear' 3:alpha 90% A: animation auto (WIP) ############################################################ */ int pas=40,vc=10,nbe=100; int cotem = 300; //côté des boites //pas:espace entre 2 //vc:vitesse/frame //nbe:nombre d'éléments à afficher !=éléments affichés int x,y,i,k,m,mx,my,cote; int corrx,corry; //correction '3D' int vi=1; //vitesse de départ 1-7 int bg=1; //clear interframe 1:oui 2:non 3:alpha 90% int cpt=0; //compteur pour affichage texte int ts=48; //text size boolean anim=false,pause=false,dt=true,noir=false; //modes int afb = 0; // afficher boites/couleurs 0 1 2 3 int camz=0; //déplacement caméra selon z int index; //dessiner de 1+index à nbe+index float t; void setup(){ size(1000,618,P2D); //size(1000,618); x = width/2; y = height/2; index = 0; rectMode(CENTER); noStroke(); } //fin setup() void draw(){ colorMode(RGB,255,255,255); switch(bg){ //options de rafraichissement case 1:background(0);break; case 2://niet break; case 3: fill(0,10);noStroke(); rect(x,y,width,height);break; } pushMatrix(); mx=mouseX; my=mouseY; dessiner(); popMatrix(); afficher_texte(); //if(frameCount%30 == 0){println(XXXX);} //debug controls(); } //fin draw() void controls(){ if(!anim){ if(!pause){ int v; switch(vi){ //v=int(vc*pow(10,vi-1)); case 1:default:v=vc;break; case 2:v=2*vc;break; case 3:v=4*vc;break; case 4:v=8*vc;break; case 5:v=16*vc;break; case 6:v=32*vc;break; case 7:v=100*vc;break; } if(!mousePressed && camz>0){ v=-v; }else if(!mousePressed){v=0; } camz+=v; } //fin if !pause }else{ //animation auto t = millis()-m; camz=int(pow(t/100,2)*(sin(t/5000)+1)); } // if !anim } //fin controls void dessiner(){ if(camz=1+index; z--){ i=z-index; //de nbe à 1 cote=cotem*(nbe-i)/nbe; corrx=floor((mx-x)*(i-nbe)/nbe); corry=floor((my-y)*(i-nbe)/nbe); if(z>0){ // ### dessiner boites ### colorMode(HSB,360,100,100); if(dt){ //mode boite noStroke(); switch(afb){ case 2:fill(240,75,11*(z%10));break; //dizaines case 3:fill(int(250-1.5*(z%100)),75,11*(z%10));break; //centaines case 4:fill(int(300-1.5*floor((z%1000)/10)-z%100),75,11*(z%10));break; //milliers default:fill(200,75,20); } }else{ //mode vortex noFill(); switch(afb){ case 2:stroke(240,75,11*(z%10));break; //dizaines case 3:stroke(int(250-1.5*(z%100)),75,11*(z%10));break; //centaines case 4:stroke(int(300-1.5*floor((z%1000)/10)-z%100),75,11*(z%10));break; //milliers default:stroke(200,75,20); } } //fin if !dt if(afb != 0){ if(z%1000==0){ rect(corrx,corry,2*cote,2*cote); }else if(z%100==0){ rect(corrx,corry,1.5*cote,1.5*cote); }else{ rect(corrx,corry,cote,cote); } } // ### dessiner numéros et texte sur boite ### if(dt){ //textSize(floor(ts/2*(1+2*(nbe/2-i)/(nbe/2)))); colorMode(RGB,255,255,255); fill(0,102,153,204); if(z%1000==0){ text(floor(z/1000),-2*cote/2+5+corrx,-2*cote/2+ts+corry); text(floor(z/100),-1.5*cote/2+5+corrx,-1.5*cote/2+ts+corry); if(z==10000){text("myriade",-cote/2+5+corrx,-cote/2+2.5*ts+corry);} }else if(z%100==0){ if(i3000){cpt=0;} switch(k){ case ENTER:case RETURN:case 1234: //correction pjs switch(afb){ default:st="pas de boites";break; case 1:st="sais-tu compter ?";break; case 2:st="couleurs/dizaines";break; case 3:st="couleurs/centaines";break; case 4:st="couleurs/milliers";break; };break; case '+':case '-': switch(vi){ case 1:default:st="+/- : changer vitesse";break; case 2:st="vitesse x2";break; case 3:st="vitesse x4";break; case 4:st="vitesse x8";break; case 5:st="vitesse x16";break; case 6:st="vitesse x32";break; case 7:st="vitesse x100";break; };break; case 'b': st="background "+bg; break; case 'p':st="pause";break; default : st="H : aide"; } //fin switch k if(noir){st="";}; text(st,10,10+ts/3); if(k=='h' || k == 'H'){ text("CLIQUER POUR AVANCER",10,10+3*ts/3); text("+/- : changer vitesse",10,17+4*ts/3); text("Enter : boites/couleurs",10,24+5*ts/3); text("touches V, C, B, P, A : ...",10,31+6*ts/3); //text("V : afficher/masquer nombres et surfaces",10,31+6*ts/3); //text("...plus de commandes dans le code source",10,38+7*ts/3); } } //fin if cpt!=0 } //fin afficher texte void keyPressed(){ k=key; cpt=millis(); //init compteur if(k == ENTER || k == RETURN){ afb++;if(afb>4){afb=0;} k=1234; //correction pjs } if(k == 'a'){ //animation auto anim = !anim; if(anim){ m=millis();} //init animation else{camz=0;} } if(k=='b'){bg++;if(bg>3){bg=1;}} //options de rafraichissement if(k == 'p'){ //pause pause = !pause; } if(k == '+'){ //changer vitesse + vi++; if(vi==8){vi=1;} } if(k == '-'){ //changer vitesse - vi--; if(vi==0){vi=7;} } if(k == ESC){ //à faire : retour arrière manuel } if(k =='v'){dt=!dt; } if(k == 'c'){if(cotem == 300){cotem=height;}else{cotem = 300;} //beurk } if(afb==0 && !dt){noir=true;}else{noir=false;} } /* void keyReleased(){ k=0; }*/