From 1341e0e135c0f477688366706676a9bf4df1e483 Mon Sep 17 00:00:00 2001
From: Louis <malterre.louis@laposte.net>
Date: Sun, 11 Dec 2022 00:32:05 +0100
Subject: [PATCH] chauve-souris creees, boss cree (j'aimerais le faire sauter a
 terme) LM

---
 MAVENProject/src/main/java/entity/Bat.java    | 44 +++++++++++++++++++
 MAVENProject/src/main/java/entity/Boss.java   | 12 +++++
 .../src/main/java/entity/Character.java       |  5 ---
 MAVENProject/src/main/java/entity/Kunai.java  |  2 +-
 .../src/main/java/entity/Monster.java         | 23 ++++++----
 MAVENProject/src/main/java/jeu/Jeu.java       |  8 +++-
 6 files changed, 77 insertions(+), 17 deletions(-)
 create mode 100644 MAVENProject/src/main/java/entity/Bat.java
 create mode 100644 MAVENProject/src/main/java/entity/Boss.java

diff --git a/MAVENProject/src/main/java/entity/Bat.java b/MAVENProject/src/main/java/entity/Bat.java
new file mode 100644
index 0000000..fd0a6a0
--- /dev/null
+++ b/MAVENProject/src/main/java/entity/Bat.java
@@ -0,0 +1,44 @@
+package entity;
+
+import environnement.Coordonnees;
+import environnement.HitBox;
+import static jeu.Jeu.getGameCharacter;
+
+public class Bat extends Monster{
+        int directionZ = 1; //meme principe que direction pour x
+        final double vitesseMaxZ = 1000;
+        
+    public Bat(Coordonnees c,int atkStt,int nbLP){
+        super(c, 1000, 20, 30, atkStt, nbLP);
+        coordInit = coord;
+    }
+
+    public void deplacements(){
+
+        double delta = Math.pow(10, -3);
+
+        //oscillement selon z
+        if (coordInit.getZ()-coord.getZ() >= 50){
+            directionZ = 1;
+        }
+        else if (coordInit.getZ()-coord.getZ() <= -50){
+            directionZ = -1;
+        }
+
+        //oscillement selon x
+        if (coord.getX() < 0)direction = 1;
+        else if (coord.getX() >= 1000)direction = -1;
+
+        //actualisation des coordonnees
+        double newX = coord.getX() + direction*vitesseMax*delta;
+        double newZ = coord.getZ() + directionZ*vitesseMaxZ*delta;
+        coord = new Coordonnees(newX, newZ);
+    }
+
+    public void attaque(){
+        if (HitBox.collision(hitBox, getGameCharacter().getHitBox()) && getGameCharacter().nbFramesInvincible == 0){
+            getGameCharacter().setNbLifePoints(Math.max(getGameCharacter().getNbLifePoints()-attackStat, 0));
+            getGameCharacter().nbFramesInvincible = getGameCharacter().nbMaxFramesInvicible;
+        }
+    }
+}
diff --git a/MAVENProject/src/main/java/entity/Boss.java b/MAVENProject/src/main/java/entity/Boss.java
new file mode 100644
index 0000000..99257fb
--- /dev/null
+++ b/MAVENProject/src/main/java/entity/Boss.java
@@ -0,0 +1,12 @@
+package entity;
+
+import environnement.Coordonnees;
+//import environnement.Physique;
+
+public class Boss extends Monster{
+
+    public Boss(Coordonnees c, double vitesseMax,double width,double height,int atkStt,int nbLP){
+        super(c, vitesseMax, width, height, atkStt, nbLP);
+    }
+    
+}
diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index dd3c9ac..79ad89d 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -53,11 +53,6 @@ public class Character extends Entity{
 
         
         newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
-        
-        /*if (newZ+entityHEIGHT/2 >= Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()){
-            newZ = Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2; //on remet sur le sol
-            alpha = 1;
-        }*/
 
         this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees 
  
diff --git a/MAVENProject/src/main/java/entity/Kunai.java b/MAVENProject/src/main/java/entity/Kunai.java
index cd864ad..05caa7b 100644
--- a/MAVENProject/src/main/java/entity/Kunai.java
+++ b/MAVENProject/src/main/java/entity/Kunai.java
@@ -60,7 +60,7 @@ public class Kunai {
             kunai.evolveKunai();
         }
         int k = 0;
-        while (k < liste.size()){
+        while (k < liste.size()){ //on supprime les kunais utilises
             if (liste.get(k).disappear) liste.remove(liste.get(k));
             else k++;
         }
diff --git a/MAVENProject/src/main/java/entity/Monster.java b/MAVENProject/src/main/java/entity/Monster.java
index d7b9bc8..f1916d4 100644
--- a/MAVENProject/src/main/java/entity/Monster.java
+++ b/MAVENProject/src/main/java/entity/Monster.java
@@ -17,14 +17,18 @@ import java.util.List;
 public class Monster extends Entity{
 
     
-    private double vitesseActuZ = 0;
-    private Obstacle obstacleBeneath = Jeu.getSol(); //obstacle en dessous
-    private int isAttacking = 0;//pour qu'il s'arrete si il attaque
+    double vitesseActuZ = 0;
+    Obstacle obstacleBeneath = Jeu.getSol(); //obstacle en dessous
+    int isAttacking = 0;//pour qu'il s'arrete si il attaque
+    Coordonnees coordInit; // coordonnees initiales
+    PositionCollision collisionOnSide = NONE;
+    int impulsionSaut = 0;
 
     public Monster(Coordonnees c, double vitesseMax,double width,double height,int atkStt,int nbLP) {
         super(c, vitesseMax,width,height,atkStt);
         maxLifePoints = nbLP;
         nbLifePoints = maxLifePoints;
+        coordInit = coord;
     }
 
     public void deplacements(){
@@ -33,16 +37,16 @@ public class Monster extends Entity{
         //on se souvient de ses anciennes positions
         oldCoord = coord;
 
-        //temporaire, pour faire un deplacement cyclique
-        if (coord.getX() < 0 || coord.getX() <= obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getX())direction = 1;
-        else if (coord.getX() >= 1000 || coord.getX() >= obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getX())direction = -1;
+        //pour faire un deplacement cyclique
+        if ((coordInit.getX()-coord.getX() >= 500 && direction == -1) || coord.getX() <= obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getX())direction = 1;
+        else if ((coordInit.getX()-coord.getX() <= -500 && direction == 1) || coord.getX() >= obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getX())direction = -1;
         //******************
 
         double newX = coord.getX() + (1-Math.min(isAttacking,1))*direction*vitesseMax*delta;
         
         double newZ = (1-alpha)*Physique.g/2*delta*delta + this.vitesseActuZ*delta + this.getCoord().getZ();
         setCoord(new Coordonnees(newX, newZ));
-        vitesseActuZ = vitesseActuZ + 7*(1-alpha)*Physique.g*delta;
+        vitesseActuZ = vitesseActuZ + 8*(1-alpha)*Physique.g*delta;
     }
 
     public void collisionGestion(){
@@ -62,7 +66,8 @@ public class Monster extends Entity{
         //on parcourt pour tester si il est sur un block
         for (int i=0;i<collisionsPresentes.size();i++){
             //si on trouve on sort de la boucle (pas besoin d'aller plus loin)
-            if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){           
+            if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){  
+                //si on a donné une impulsion, on regarde pas les collisions bas         
                 this.vitesseActuZ = 0;
                 this.setCoord(new Coordonnees(this.getCoord().getX(), listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2));
                 alpha = 1;
@@ -70,7 +75,7 @@ public class Monster extends Entity{
                 break;
             }
         }
-        
+
         //on gere les collisions laterales
         for (int i=0;i<collisionsPresentes.size();i++){
             if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.direction == -1){
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index ab5301c..4c9ea5e 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -9,6 +9,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import entity.Bat;
+import entity.Boss;
 import entity.Character;
 import entity.Kunai;
 import entity.Monster;
@@ -111,10 +113,12 @@ public class Jeu implements Game{
         monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
         monsterList.add(new Monster(new Coordonnees(500, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
         monsterList.add(new Monster(new Coordonnees(100, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
-        monsterList.add(new Monster(new Coordonnees(300, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
+        monsterList.add(new Monster(new Coordonnees(320, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
+        monsterList.add(new Bat(new Coordonnees(1500, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1, 3));
+        monsterList.add(new Boss(new Coordonnees(3000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 500, 90, 180, 3, 50));
 
         //on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite")
-        gameCharacterLoader = new CharacterLoader(characterSkinPath,new ShootingCharacter(new Coordonnees(300, 300), 1500, 1,600000));
+        gameCharacterLoader = new CharacterLoader(characterSkinPath,new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000));
         gameCharacter = new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000);
 
         //on remplit la map des frames
-- 
GitLab