space_inviders/Boss.pde

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();
}
}