137 lines
4.0 KiB
Plaintext
137 lines
4.0 KiB
Plaintext
class Boss {
|
|
int pv, pv_baseboss;
|
|
boolean invincible = false;
|
|
float boss_time;
|
|
boolean boss_d_ou_g = false;
|
|
int boss_vitesse;
|
|
PImage visu_boss;
|
|
int y;
|
|
int x; //égale à ancien "boss_bouge"
|
|
boolean show = true;
|
|
int NUMEROXEPLO = 0;
|
|
int deta_time;
|
|
int time_inv_boss, invisi_time = 1000; // temps de d'invincibilité en millisecondes (2 secondes)
|
|
int time_cligno_boss, deta_cligno_time = 150; // temps de clignotage en millisecondes
|
|
//jauge des pv du boss
|
|
int H_jpv = 25, W_jpv = 650, x_jpv, y_jpv = 20;
|
|
|
|
//var à récup
|
|
boolean collision_laser = false;
|
|
float boss_cooldown = 5;
|
|
int boss_stop = 4;
|
|
int Xa, Xb, Xc, Ya, Yb, Yc, Xd, Yd, Xe, Ye;
|
|
float time_game = millis()/1000;
|
|
float ABC, DBC, ACB, DCB, EBC, ECB;
|
|
int largeur_bar_vie_T = W_jpv;
|
|
int largeur_bar_vie_cible = W_jpv;
|
|
boolean son_Laser = false, clignote = false;
|
|
|
|
|
|
|
|
Boss (int pvboss, String visuboss, int start_x, int start_y, int vitboss){
|
|
boss_vitesse = vitboss;
|
|
x = start_x;
|
|
y = start_y;
|
|
pv = pv_baseboss = pvboss;
|
|
boss_time = millis()/1000;
|
|
visu_boss = loadImage("data/images/" + visuboss);
|
|
|
|
}
|
|
|
|
void verifiercollisions(){
|
|
|
|
//vérifie s'il y a une collisions avec le vaisseau
|
|
if ( dist(ship.x, ship.y, x, y) < 200 && show) {
|
|
ship.collision = true;
|
|
}
|
|
|
|
//println("pv : " + pv);
|
|
|
|
//vérifie les collisions du missile du notre vaisseau sur le boss
|
|
if ( dist(xm, ym, x, y) < 114 && !invincible && show){
|
|
//invincible = true;
|
|
clignote = false;
|
|
pv = pv - 1;
|
|
sonCollision.play();
|
|
if (pv > 0) {
|
|
time_inv_boss = millis() + invisi_time;
|
|
invincible = true;
|
|
} else {
|
|
show = false;
|
|
}
|
|
//calcul delai en miliseconds pour chaque pixels a supprimer de la bars de vie en fonction du temps d'invincibilité du boss
|
|
// temps / pixels a suprimmer de la barre :
|
|
deta_time = invisi_time / (W_jpv - (W_jpv * pv / pv_baseboss));
|
|
println("pv : " + pv + " :: invincible : " + invincible+ " :: deta_time : " + deta_time);
|
|
|
|
//Suppression du missile
|
|
lancermisile = false; //a voir pour faire une classe pour le missile du ship
|
|
}
|
|
|
|
}
|
|
|
|
void bouge_boss(){
|
|
|
|
if (boss_d_ou_g == true){ //si le boss vas vers la gauche
|
|
if (x > 0){ //si le boss il n'est pas tout a gauche
|
|
x -= boss_vitesse; //on le fais aller a gauche
|
|
} else { //sinon
|
|
boss_d_ou_g = false; //on lui dit d'aller a gauche
|
|
}
|
|
}
|
|
|
|
if (boss_d_ou_g == false && x < width){
|
|
x += boss_vitesse;
|
|
} else {
|
|
boss_d_ou_g = true;
|
|
}
|
|
|
|
}
|
|
|
|
void apparaitre(){
|
|
|
|
//println("invincible : " + invincible + " :: time_inv_boss : " + time_inv_boss + " :: millis() : " + millis() );
|
|
|
|
// invincibileté :
|
|
if (invincible && time_inv_boss > millis()) {
|
|
//time_inv_boss = millis();
|
|
invincible = true;
|
|
} else {
|
|
clignote = invincible = false;
|
|
}
|
|
|
|
//if (largeur_bar_vie_T > largeur_bar_vie_cible){
|
|
// largeur_bar_vie_T -- ;
|
|
//}
|
|
|
|
// clignotement :
|
|
if (invincible && time_cligno_boss + deta_cligno_time <= millis()) {
|
|
time_cligno_boss = millis();
|
|
clignote = !clignote;
|
|
}
|
|
|
|
//affiche l'anime de explosion :
|
|
if ( !show && NUMEROXEPLO<50 ) {
|
|
// Ou Methode avec un if :
|
|
if ( String.valueOf(NUMEROXEPLO).length()==1 ) visu_boss = loadImage("data/images/explosion/explosion000"+NUMEROXEPLO+".png");
|
|
else visu_boss = loadImage("data/images/explosion/explosion00"+NUMEROXEPLO+".png");
|
|
NUMEROXEPLO += 1;
|
|
}
|
|
|
|
if (NUMEROXEPLO == 1 && son) sonExposion.play();
|
|
|
|
//Affiche le ship ou explosion s'il n'est pas détruis (l'anime de explosion est pas finie)
|
|
if (NUMEROXEPLO < 50 && !clignote) image(visu_boss, x, y);
|
|
//println("boss ..");
|
|
|
|
}
|
|
|
|
void affiche_et_mets_a_jour_le_boss(){
|
|
verifiercollisions();
|
|
bouge_boss();
|
|
apparaitre();
|
|
|
|
}
|
|
|
|
}
|