Kunai.java 3.33 KiB
package entity;
import java.net.URL;
import java.util.List;
import environnement.Coordonnees;
import environnement.HitBox;
import jeu.Jeu;
import map.Obstacle;
import static jeu.Jeu.getMonsterList;
public class Kunai {
private final int direction; //1 si vers la droite, -1 si vers la gauche
private final int damage;
private final double vitesse = 5;
private HitBox hitBox;
private Coordonnees coord;
private final Coordonnees coordInit; //coordonnees initiales
private boolean disappear = false; //variable disant si le kunai doit disparaitre ou non
private static final int height = 12;
private static final int width = 24;
private final String sprite;
public Kunai(int dir,int dmg,Coordonnees c){
coord = c;
coordInit = coord;
damage = dmg;
direction = dir;
hitBox = new HitBox(coord,height,width);
//cest la pour les sprites, remplacer Jeu.class par classedanslaquelletues.class
String fn = "Frames_perso";
URL url = Monster.class.getClassLoader().getResource(fn);
assert url != null;
String beginPath = url.toString().substring(6)+"/";
String d;
if (direction == 1)d = "_R1";
else d = "_L1";
sprite = beginPath + "character_kunai" + d + ".png";
//************************* */
}
private void deplacement(){ //deplacement du kunai
double newX = coord.getX() + direction*vitesse;
this.coord = new Coordonnees(newX, this.coord.getZ());
}
private void updateHitBox(){ //on update la hitbox du kunai
hitBox = new HitBox(coord,height,width);
}
private void dealsDamage(Entity entity){
if (HitBox.collision(hitBox, entity.getHitBox())){
if (entity.nbFramesInvincible == 0){
entity.setNbLifePoints(Math.max(entity.getNbLifePoints()-damage,0));
entity.nbFramesInvincible = entity.nbMaxFramesInvicible;//l'entity devient invincible qq frames
}
disappear = true; //disparait apres choc avec un monstre
}
}
private void collisionsObstacles(){
for (Obstacle obs : Jeu.getObstacleTable()){
if (HitBox.collision(this.hitBox, obs.getHitbox()))disappear = true;
}
}
private void evolveKunai(){
deplacement();
updateHitBox();
collisionsObstacles();
for (Monster monster : getMonsterList()){
dealsDamage(monster);
if (disappear)break; //si le kunai a disparu on arrete de regarder les autres monstres
}
if (Math.abs(coordInit.getX()-coord.getX()) >= 500) disappear = true; //au bout d'une certaine distance parcourue, il disparait
}
public static void evolveAllKunais(List<Kunai> liste){
for (Kunai kunai : liste){
kunai.evolveKunai();
}
int k = 0;
while (k < liste.size()){ //on supprime les kunais utilises
if (liste.get(k).disappear) liste.remove(liste.get(k));
else k++;
}
}
public Coordonnees getCoord() {
return coord;
}
public HitBox getHitBox() {
return hitBox;
}
public static int getHeight() {
return height;
}
public static int getWidth() {
return width;
}
public String getSprite() {
return sprite;
}
}