//Alcys_Karting version du 9/05/2004 /////////////////////////////////////////////////////////////////// //SETUP /////////////////////////////////////////////////////////////////// Systeme sys; void setup(){ size(700,400); sys=new Systeme(); ellipseMode(CENTER_DIAMETER); } /////////////////////////////////////////////////////////////////// //LOOP /////////////////////////////////////////////////////////////////// void loop(){ background(55); push(); if (mousePressed == true) {sys.voiture.vitesse+=20; }; if (keyPressed==true){ if(key==UP){sys.voiture.vitesse+=10;}; if(key==DOWN){if(sys.voiture.coords.x/2000>sys.ch.t) sys.voiture.vitesse-=10;}; if(key==RIGHT){sys.voiture.anglevoiture-=0.05;}; if(key==LEFT){sys.voiture.anglevoiture+=0.05;}; } sys.afficher(); pop(); } //////////////////////////////////////////////////// //CLASSE SYSTEME //////////////////////////////////////////////////// class Systeme { Mobile voiture; Trajectoire trajet; Camera lacamera; Chemins ch; public Systeme(){ this.ch=new Chemins(); this.lacamera=new Camera(ch); this.trajet=new Trajectoire(lacamera,ch); Vecteur c=new Vecteur(800,700,0); this.voiture=new Mobile(c,ch); } void afficher(){ ch.t+=((voiture.coords.x-2200)/2000-ch.t)/4;//la camera suit la voiture souplement,avec retard ch.actualiser(); lacamera.placercamera(); trajet.dessinerlaroute(); voiture.dessinerlavoiture(); } } //////////////////////////////////////////////////// //CLASSE MOBILE //////////////////////////////////////////////////// class Mobile { Vecteur coords ,ancCoords; float angleroue,vitesse,anglevoiture; Chemins ch; Mobile(Vecteur c,Chemins ch){ this.ch=ch; this.coords=c; this.vitesse=20; this.ancCoords=new Vecteur(0,0,0); this.angleroue=0; this.anglevoiture=0; } void dessinerlavoiture(){ float anglz=ch.routeT(coords.x/2000).z; vitesse*=0.99; //calculs dans le repere absolu:choc avec les bords Vecteur posbords=ch.route(coords.x/2000); float lim=posbords.y; if(coords.ylim+1380){modifiervitesse(anglz);coords.y=lim+1380;}; coords.x+=vitesse*cos(anglevoiture); coords.y+=vitesse*sin(anglevoiture); posbords=ch.route(coords.x/2000); coords.z=posbords.z; Vecteur posbordsT=ch.routeT(coords.x/2000); Vecteur angls=posbordsT.anguler(); //les angles pour la voiture push();fill(75,80,180);translate(coords.x,coords.y,coords.z-100); rotateY(-angls.y);rotateZ(anglevoiture); box(500,180,100); translate(0,100,90);fill(0,0,0,10);box(600,500,2);translate(0,-100,-90);//ombre push();fill(130,130,250);translate(-200,0,-150);rotateY(-0.4);box(300,500,20);fill(0);pop();//aileron push(); translate(200,180,-30);rotateY(angleroue-=vitesse/50);box(150,80,150);translate(0,-360,0);box(150,80,150); pop(); translate(-200,200,-30);rotateY(angleroue-=vitesse/50);box(150,100,150);translate(0,-400,0);box(150,100,150); pop(); } void modifiervitesse(float anglez){ anglevoiture=2*anglez-anglevoiture; coords.x+=vitesse*cos(anglevoiture); coords.y+=vitesse*sin(anglevoiture); vitesse/=2; } } //////////////////////////////////////////////////// //CLASSE TRAJECTOIRE //////////////////////////////////////////////////// class Trajectoire{ Camera lacamera; Chemins ch; public Trajectoire(Camera lacamera,Chemins ch){ this.lacamera=lacamera; this.ch=ch; } void dessinerlaroute(){ Vecteur ancp=ch.route(ch.t);//init pour entrer dans la boucle de dessin for(float i=ch.t+0.03;i2){ for(int i=0;i2){ beginShape(POLYGON); for(int i=0;i