From d403849e8db63e30de3ba3c4cc5d0e6d95079406 Mon Sep 17 00:00:00 2001
From: Louis <malterre.louis@laposte.net>
Date: Sat, 10 Dec 2022 01:52:10 +0100
Subject: [PATCH] =?UTF-8?q?monstres=20s'arr=C3=AAtent=20d=C3=A9sormais=20a?=
 =?UTF-8?q?vant=20attaque,=20cam=20un=20peu=20sur-elevee=20LM?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/main/java/entity/Monster.java         | 35 +++++++++++++------
 MAVENProject/src/main/java/jeu/Painter.java   |  9 ++---
 2 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/MAVENProject/src/main/java/entity/Monster.java b/MAVENProject/src/main/java/entity/Monster.java
index 235f9ee..d7b9bc8 100644
--- a/MAVENProject/src/main/java/entity/Monster.java
+++ b/MAVENProject/src/main/java/entity/Monster.java
@@ -19,6 +19,7 @@ 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
 
     public Monster(Coordonnees c, double vitesseMax,double width,double height,int atkStt,int nbLP) {
         super(c, vitesseMax,width,height,atkStt);
@@ -37,7 +38,8 @@ public class Monster extends Entity{
         else if (coord.getX() >= 1000 || coord.getX() >= obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getX())direction = -1;
         //******************
 
-        double newX = coord.getX()+direction*vitesseMax*delta;
+        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;
@@ -85,15 +87,24 @@ public class Monster extends Entity{
     }
 
     
-    public void attaque(){
-        if (direction*(this.coord.getX()-getGameCharacter().coord.getX()) <= 10 && Math.abs(this.coord.getZ()-getGameCharacter().coord.getZ()) <= entityHEIGHT){ //n'attaque que si perso pas invincible
-            //on cree l'attaque
-            Coordonnees coordAttack = new Coordonnees(this.coord.getX() + direction*entityWIDTH/2,this.coord.getZ());
-            Attack monsterAttack = new Attack(attackStat, coordAttack, new HitBox(coordAttack, entityHEIGHT, entityWIDTH+20));
-            //si il ya collision entre le perso et l'attaque
-            if (HitBox.collision(monsterAttack.getHitBox(), getGameCharacter().hitBox)){
-                //l'attaque fait ses degats
-                monsterAttack.dealDamage(getGameCharacter());
+    public void attaque(){//isAttacking > 0 pour dire que si il est entrain d'attaquer, il finit son attaque
+        if ((Math.abs(this.coord.getX()-getGameCharacter().coord.getX()) <= 2+entityWIDTH/2+getGameCharacter().entityWIDTH/2 && Math.abs(this.coord.getZ()-getGameCharacter().coord.getZ()) <= entityHEIGHT && characInFrontOf()) || isAttacking > 0){ //n'attaque que si perso pas invincible
+            //si il n'est pas immobile il s'arrete
+            if (isAttacking < 100){
+                isAttacking++;
+            }
+            //sinon on cree l'attaque
+            else{
+                Coordonnees coordAttack = new Coordonnees(this.coord.getX() + direction*entityWIDTH/2,this.coord.getZ());
+                Attack monsterAttack = new Attack(attackStat, coordAttack, new HitBox(coordAttack, entityHEIGHT, entityWIDTH+20));
+
+                //si il ya collision entre le perso et l'attaque
+                if (HitBox.collision(monsterAttack.getHitBox(), getGameCharacter().hitBox)){
+                    //l'attaque fait ses degats
+                    monsterAttack.dealDamage(getGameCharacter());
+                }
+                isAttacking++;//il peut rebouger
+                if (isAttacking > 200)isAttacking = 0; //animation d'attaque finie
             }
         }
     }
@@ -102,6 +113,10 @@ public class Monster extends Entity{
         nbFramesInvincible = Math.max(0, nbFramesInvincible-1);
     }
 
+    private Boolean characInFrontOf(){
+        return (direction == 1 && getGameCharacter().getCoord().getX() >= this.coord.getX()) || (direction == -1 && getGameCharacter().getCoord().getX() <= this.coord.getX());
+    }
+
     public void evolveMonster(){ //evolution du monstre
         deplacements();
         collisionGestion(); // ca merde
diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java
index d9a82c3..f07b223 100644
--- a/MAVENProject/src/main/java/jeu/Painter.java
+++ b/MAVENProject/src/main/java/jeu/Painter.java
@@ -28,6 +28,7 @@ public class Painter implements GamePainter{
     private static Coordonnees coordonneesCam;
     private int xCam;
     private int zCam;
+    private int decalage = 225;
 
     public Painter() {
         
@@ -37,7 +38,7 @@ public class Painter implements GamePainter{
     public void draw(BufferedImage im) {
         coordonneesCam = gameCharacter.getCoord();
         xCam = -WIDTH/2 + (int) coordonneesCam.getX();
-        zCam = -HEIGHT/2 +(int) coordonneesCam.getZ();
+        zCam = -HEIGHT/2 +(int) coordonneesCam.getZ()-decalage;
 
         Graphics2D crayon = (Graphics2D) im.getGraphics();
         crayon.setColor(Color.blue);
@@ -53,13 +54,13 @@ public class Painter implements GamePainter{
 
     private void drawCharacter(Graphics2D crayon,Image imageCharac){
         if (gameCharacter.getNbFramesInvincible() > 0)crayon.setColor(Color.black);
-        crayon.fillRect(WIDTH/2-(int) gameCharacter.getEntityWIDTH()/2,WIDTH/2-(int) gameCharacter.getEntityHEIGHT()/2, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT());
+        crayon.fillRect(WIDTH/2-(int) gameCharacter.getEntityWIDTH()/2,HEIGHT/2-(int) gameCharacter.getEntityHEIGHT()/2+decalage, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT());
         crayon.drawRect(WIDTH/2-500,WIDTH/2-500, 1000,1000);
         if (gameCharacter.getDirection() == 1){
-            crayon.drawImage(imageCharac, WIDTH/2- (int) gameCharacter.getEntityWIDTH()/2-10, HEIGHT/2 - (int) gameCharacter.getEntityHEIGHT()/2-3, null, null);
+            crayon.drawImage(imageCharac, WIDTH/2- (int) gameCharacter.getEntityWIDTH()/2-10, HEIGHT/2 - (int) gameCharacter.getEntityHEIGHT()/2-3+decalage, null, null);
         }
         else{
-            crayon.drawImage(imageCharac, WIDTH/2- (int) gameCharacter.getEntityWIDTH()/2-10-30, HEIGHT/2 - (int) gameCharacter.getEntityHEIGHT()/2-3, null, null); 
+            crayon.drawImage(imageCharac, WIDTH/2- (int) gameCharacter.getEntityWIDTH()/2-10-30, HEIGHT/2 - (int) gameCharacter.getEntityHEIGHT()/2-3+decalage, null, null); 
         }
     }
 
-- 
GitLab