From 70efa298da796f72fa703627e26bd57d5209d8d4 Mon Sep 17 00:00:00 2001
From: Louis MALTERRE <malterre.louis@laposte.net>
Date: Tue, 13 Dec 2022 00:59:29 +0100
Subject: [PATCH] en fait y'a tjr le pb sur les cotes des piles de blocs (car
 j'ai perdu le code faisant ca jsp pk) donc le plus simple c est la deuxieme
 solution Louis. LM

---
 .../src/main/java/entity/Character.java       | 36 +++++++++++++++----
 .../src/main/java/environnement/HitBox.java   |  4 +--
 MAVENProject/src/main/java/jeu/Jeu.java       |  2 +-
 MAVENProject/src/main/java/jeu/Painter.java   |  4 +--
 MAVENProject/src/main/java/map/Obstacle.java  |  5 +++
 5 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 9015ede..d58619d 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -57,10 +57,8 @@ public class Character extends Entity{
 
         newX = tableCommande.get("CommandX")*delta + this.getCoord().getX();
 
-        
         newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
-
-        this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees 
+        this.setCoord(new Coordonnees((int)newX, (int)newZ));
  
         //on actualise les vitesses
         vitesseActuX = tableCommande.get("CommandX");
@@ -68,7 +66,9 @@ public class Character extends Entity{
             direction = (int) Math.signum(vitesseActuX);
         }
 
-        vitesseActuZ = vitesseActuZ + 8*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
+        vitesseActuZ = vitesseActuZ + 10*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
+        //System.out.println(vitesseActuZ);
+        if (Math.abs(vitesseActuZ) > vitesseMax*500)vitesseActuZ = Math.signum(vitesseActuZ)*vitesseMax*500;
     }
 
     public void collisionGestion(){
@@ -83,13 +83,19 @@ public class Character extends Entity{
             collisionsPresentes.put(listeObstaclesInVoisinage.get(i),posCol);
         }
 
+        
+
+        //on gere celles du bas
         //on set alpha a 0 (on suppose qu'il est en l'air)
         alpha = 0;
-        if (this.hitBox.getExtremites().get("BasDroite").getZ()+entityHEIGHT/2-obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getZ()>-1 && this.coord.getX()>=obstacleBeneath.getHitbox().getExtremites().get("BasGauche").getX() && this.coord.getX()<=obstacleBeneath.getHitbox().getExtremites().get("BasDroite").getX()) {
+
+        if (this.hitBox.getExtremites().get("BasDroite").getZ()+entityHEIGHT/2-obstacleBeneath.getHitbox().getExtremites().get("HautDroite").getZ()>=-1 && this.hitBox.getExtremites().get("HautDroite").getX()>obstacleBeneath.getHitbox().getExtremites().get("BasGauche").getX() && this.hitBox.getExtremites().get("HautGauche").getX()<obstacleBeneath.getHitbox().getExtremites().get("BasDroite").getX()) {
 
             alpha = 1;
+
         }
         else {
+            //par defaut l'obstacle en dessous c'est le sol
             obstacleBeneath=Jeu.sol;
             //on parcourt pour tester si il est sur un block
             for (int i=0;i<collisionsPresentes.size();i++){
@@ -102,13 +108,25 @@ public class Character extends Entity{
                     this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2-1));
                     obstacleBeneath=listeObstaclesInVoisinage.get(i);
                     alpha = 1;
+
                     break;
                 }
             }
+            /*for (Obstacle obs : listeObstaclesInVoisinage){ //on cherche l'obstacle en-dessous du perso
+                if (obs.getHitbox().getExtremites().get("HautGauche").getZ() <= obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getZ() && obs.getHitbox().getExtremites().get("HautGauche").getZ() >= hitBox.getExtremites().get("BasDroite").getZ()){
+                    obstacleBeneath = obs;
+                }
+            }
+            
+            if (collisionsPresentes.get(obstacleBeneath) == BAS && tableCommande.get("CommandAttack") == 0){
+                this.vitesseActuZ = 0;
+                    this.setCoord(new Coordonnees(this.getCoord().getX(), obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2-1));
+                    alpha = 1;
+                    onGround = true;
+            }*/
 
 
         }
-
         //on gere les collisions laterales et celle du haut
         for (int i=0;i<collisionsPresentes.size();i++){
 
@@ -116,12 +134,15 @@ public class Character extends Entity{
                 this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2+1, this.getCoord().getZ()));
                 break;
             }
+
             else if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.vitesseActuX > 0){
                 this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2-1, this.getCoord().getZ()));
                 break;
             }
 
         }
+        
+        //celles du haut
         for (int i=0;i<collisionsPresentes.size();i++){
             if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == HAUT){
                 this.vitesseActuZ = 0;
@@ -195,8 +216,9 @@ public class Character extends Entity{
         getGameCommand();
         deplacements();
         collisionGestion();
+        //System.out.println(obstacleBeneath);
         keyGestion();
-        //updateVoisinage();
+        updateVoisinage();
         this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH)); // mise à jour moins crade pour l'instant
         if (tableCommande.get("CommandAttack") == 1) attaque();
         updateNbFrameInvincible();
diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java
index 8506ef2..c10728e 100644
--- a/MAVENProject/src/main/java/environnement/HitBox.java
+++ b/MAVENProject/src/main/java/environnement/HitBox.java
@@ -51,8 +51,8 @@ public class HitBox {
 
     public static Boolean collision(HitBox A, HitBox B){
         Boolean a = !(A.extremites.get("HautGauche").getX() > B.extremites.get("HautDroite").getX()); // A est à droite de B
-        Boolean b = !(A.extremites.get("HautDroite").getX() < B.extremites.get("HautGauche").getX()); // A est à gauche de B
-        Boolean c = !(A.extremites.get("HautGauche").getZ() > B.extremites.get("BasGauche").getZ()); // A est en dessous de B
+        Boolean b = !(A.extremites.get("HautDroite").getX() <= B.extremites.get("HautGauche").getX()); // A est à gauche de B
+        Boolean c = !(A.extremites.get("HautGauche").getZ() >= B.extremites.get("BasGauche").getZ()); // A est en dessous de B
         Boolean d = !(A.extremites.get("BasGauche").getZ() < B.extremites.get("HautGauche").getZ()); // A est au dessus de B
         return a && b && c && d;
     }
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index 6b784f7..4f9ffee 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -195,7 +195,7 @@ public class Jeu implements Game{
         }
 
         if (!characterAttacking){ //animation d'attaque prioritaire
-            if ( gameCharacter.getAlpha()==0 || gameCharacter.getHitBox().getExtremites().get("BasDroite").getZ()+gameCharacter.getEntityHEIGHT()/2-gameCharacter.getObstacleBeneath().getHitbox().getExtremites().get("HautDroite").getZ()<-1) {
+            if ( gameCharacter.getAlpha()==0) {
                 movement = "character_jump";} // pour savoir si il jump ou non
             else{
                 if (Right && Left)movement = "character_idle";
diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java
index 233a5fd..3d88e48 100644
--- a/MAVENProject/src/main/java/jeu/Painter.java
+++ b/MAVENProject/src/main/java/jeu/Painter.java
@@ -24,8 +24,8 @@ public class Painter implements GamePainter{
 
     //protected static final int WIDTH = TILES_SIZE*TILES_IN_WIDTH;
     //protected static final int HEIGHT = TILES_SIZE*TILES_IN_HEIGHT;
-    protected static final int WIDTH =1500;
-    protected static final int HEIGHT=1000;
+    protected static final int WIDTH =1000;
+    protected static final int HEIGHT=700;
     private LevelManager levelManager;
     public static Obstacle test = new Obstacle(new HitBox(new Coordonnees(300,550),32,128));
 
diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java
index 9c1ddd5..f64afc2 100644
--- a/MAVENProject/src/main/java/map/Obstacle.java
+++ b/MAVENProject/src/main/java/map/Obstacle.java
@@ -21,4 +21,9 @@ public final class Obstacle {
         return hitbox;
     }
 
+    @Override
+    public String toString() {
+        return "Obstacle coordonnees" + Double.toString(hitbox.getCentre().getX()) + " " + Double.toString(hitbox.getCentre().getZ());
+    }
+
 }
-- 
GitLab