Annuaire › Code ouvert
Code publié par son auteur, en lecture seule. « Copier dans mon espace » crée un nouveau site à vous (non publié) que vous pouvez modifier librement.
js/gousse.js · 3.3 Ko
/* ============================================================
gousse.js - la classe Gousse (la vanille à ramasser)
============================================================
La vanille est la grande richesse de la région d'Antalaha !
Les gousses tombent depuis le haut de l'écran (en réalité, c'est
la pirogue qui avance : tout défile vers le bas).
Une gousse DORÉE rapporte plus de points.
============================================================ */
class Gousse {
/* ----------------------------------------------------------
constructor(x, y, doree)
Paramètres :
x, y : position de départ
doree : true pour une gousse dorée (valeur spéciale)
---------------------------------------------------------- */
constructor(x, y, doree) {
this.x = x;
this.y = y;
this.doree = doree;
this.angle = random(TWO_PI); // orientation de départ au hasard
this.rotation = random(-1.5, 1.5); // vitesse de rotation (radians par seconde)
this.rx = 16; // demi-largeur, utilisée pour éviter les chevauchements
this.mort = false; // passe à true quand elle est ramassée
}
/* ----------------------------------------------------------
mettreAJour(dt, vitesse)
But : faire descendre la gousse avec le défilement et la faire tourner.
Paramètres : dt = secondes écoulées ; vitesse = vitesse de l'eau
---------------------------------------------------------- */
mettreAJour(dt, vitesse) {
this.y += vitesse * dt;
this.angle += this.rotation * dt;
}
/* ----------------------------------------------------------
estSortie()
Retour : true si la gousse est passée sous l'écran (on peut l'oublier).
---------------------------------------------------------- */
estSortie() {
return this.y > HAUTEUR_JEU + 40;
}
/* ----------------------------------------------------------
boite()
But : rectangle de collision, généreux (facile à ramasser).
Retour : {x, y, l, h}
---------------------------------------------------------- */
boite() {
return { x: this.x - 14, y: this.y - 14, l: 28, h: 28 };
}
/* ----------------------------------------------------------
dessiner()
But : dessiner la gousse (une longue courbe sombre, ou dorée),
avec un contour clair pour bien la voir sur l'eau.
---------------------------------------------------------- */
dessiner() {
push();
translate(this.x, this.y);
rotate(this.angle);
noFill();
strokeCap(ROUND);
if (this.doree) {
// Halo lumineux qui "pulse" avec le temps (sin de millis()).
const pulse = 0.5 + 0.5 * Math.sin(millis() / 180);
noStroke();
fill(255, 215, 0, 50 + 40 * pulse);
circle(0, 0, 38 + 6 * pulse);
noFill();
}
// 1) contour clair (dessiné en premier, plus épais)
stroke(255, 255, 255, 200);
strokeWeight(8);
bezier(0, -16, 9, -6, -9, 6, 0, 16);
// 2) la gousse elle-même, par-dessus
stroke(this.doree ? COULEURS.gousseDoree : COULEURS.gousse);
strokeWeight(5);
bezier(0, -16, 9, -6, -9, 6, 0, 16);
// 3) petite queue à une extrémité
strokeWeight(2);
line(0, -16, 2, -21);
pop();
}
}