From 8e276981f13b9d11b44eee55c5bab771d6b645bd Mon Sep 17 00:00:00 2001
From: Louis MALTERRE <malterre.louis@laposte.net>
Date: Tue, 29 Nov 2022 11:58:58 +0100
Subject: [PATCH] collisions sur le cote marchent encore pas

---
 .../src/main/java/entity/Character.java       | 31 ++++++++++++++-----
 MAVENProject/src/main/java/entity/Entity.java |  8 ++++-
 .../src/main/java/environnement/HitBox.java   |  2 +-
 MAVENProject/src/main/java/map/Obstacle.java  | 12 +++++--
 4 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 0c7bec7..6d9d7a3 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -16,7 +16,7 @@ public class Character extends Entity{
     private final double impulsionSaut;
     private double masse;
     private int alpha = 1; // gere les collisions avec le sol
-    
+    private int beta = 1; // gere les collisions avec les murs
     private final double entityWIDTH = 30; // pour l'instant je les ai renommes, ca peut changer
     private final double entityHEIGHT = 60;
     private Map<String,Double> tableCommande; //table des commandes du perso
@@ -46,7 +46,8 @@ public class Character extends Entity{
         //on se souvient de ses anciennes positions
         this.oldCoord = this.getCoord();
 
-        newX =  tableCommande.get("CommandX")*delta + this.getCoord().getX();
+        newX =  beta*tableCommande.get("CommandX")*delta + this.getCoord().getX();
+        //if (newX + Math.signum(tableCommande.get("CommandX")*entityWIDTH/2 ))
 
         
         newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
@@ -58,14 +59,14 @@ public class Character extends Entity{
         //(tableCommande.get("CommandZ") == 0) this.getCoord().getZ()(tableCommande.get("CommandZ") == 0) && 
 
         this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees
-        System.out.println("z = "+this.getCoord().getZ());
+ 
  
         //on actualise les vitesses
-        vitesseActuX = tableCommande.get("CommandX");
+        vitesseActuX = beta*tableCommande.get("CommandX");
 
         if (alpha == 1) vitesseActuZ = 0;
         /*else*/ vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
-        System.out.println("vitesse z = "+vitesseActuZ);
+
 
 
            
@@ -110,8 +111,24 @@ public class Character extends Entity{
 
     public void checkIfNextToWall(){
         if ((Obstacle.collisionDroite(this, Jeu.getObstacleTable()) && tableCommande.get("CommandX") == -vitesseMax) || (Obstacle.collisionGauche(this, Jeu.getObstacleTable()) && tableCommande.get("CommandX") == vitesseMax)){
-            this.setCoord(new Coordonnees(this.oldCoord.getX(), this.getCoord().getZ()));
+            beta = 0;
+        }else {
+            beta = 1;
+        }
+        if (obstacleNextTo != null){
+            if (tableCommande.get("CommandX") > 0){
+                if (this.getCoord().getX()+entityWIDTH/2 >= obstacleNextTo.getHitbox().getExtremites().get("HautGauche").getX()){
+                    this.setCoord(new Coordonnees(obstacleNextTo.getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
+                }
+            }
+            else if (tableCommande.get("CommandX") < 0){
+                if (this.getCoord().getX()-entityWIDTH/2 <= obstacleNextTo.getHitbox().getExtremites().get("HautDroite").getX()){
+                    this.setCoord(new Coordonnees(obstacleNextTo.getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
+                }
+            }
         }
+        
+
     }
 
     public void resetCommand(){
@@ -121,7 +138,7 @@ public class Character extends Entity{
     }
 
     public void evolveCharacter(){
-        System.out.println(alpha);
+        System.out.println(beta);
         getGameCommand();
         checkIfOnGround();
         //checkIfNextToWall();
diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java
index 4efaaa3..1b302ba 100644
--- a/MAVENProject/src/main/java/entity/Entity.java
+++ b/MAVENProject/src/main/java/entity/Entity.java
@@ -10,7 +10,7 @@ public abstract class Entity {
     protected Coordonnees oldCoord;
     final double vitesseMax;
     protected HitBox hitBox;
-
+    protected Obstacle obstacleNextTo = null;
     private final double entityWIDTH = 10;
     private final double entityHEIGHT = 10;
 
@@ -50,6 +50,12 @@ public abstract class Entity {
     public void setObstacleBeneath(Obstacle obstacleBeneath) {
         this.obstacleBeneath = obstacleBeneath;
     }
+    public Obstacle getObstacleNextTo() {
+        return obstacleNextTo;
+    }
+    public void setObstacleNextTo(Obstacle obstacleNextTo) {
+        this.obstacleNextTo = obstacleNextTo;
+    }
 
     
 }
diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java
index 74aa6ca..cd30ac7 100644
--- a/MAVENProject/src/main/java/environnement/HitBox.java
+++ b/MAVENProject/src/main/java/environnement/HitBox.java
@@ -63,7 +63,7 @@ public class HitBox {
         return !(A.extremites.get("HautDroite").getX() < B.extremites.get("HautGauche").getX());// A est à gauche de B
     }
     public static Boolean collisionBas(HitBox A, HitBox B){
-        System.out.println(A.extremites.get("HautGauche").getZ()+"     "+B.extremites.get("BasGauche").getZ());
+        //System.out.println(A.extremites.get("HautGauche").getZ()+"     "+B.extremites.get("BasGauche").getZ());
         return !(A.extremites.get("HautGauche").getZ() > B.extremites.get("BasGauche").getZ());// A est en dessous de B
     }
     public static Boolean collisionHaut(HitBox A, HitBox B){
diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java
index acd13a7..8cc4e20 100644
--- a/MAVENProject/src/main/java/map/Obstacle.java
+++ b/MAVENProject/src/main/java/map/Obstacle.java
@@ -53,17 +53,25 @@ public class Obstacle {
 
     public static Boolean collisionGauche(Entity charac,List<Obstacle> list){
         for (Obstacle obs : list){
-            if (HitBox.collisionGauche(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) return true;
+            if (HitBox.collisionGauche(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())){
+                charac.setObstacleNextTo(obs);
+                return true;
+            }
 
         }
+        charac.setObstacleNextTo(null);
         return false;
     }
 
     public static Boolean collisionDroite(Entity charac,List<Obstacle> list){
         for (Obstacle obs : list){
-            if (HitBox.collisionDroite(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) return true;
+            if (HitBox.collisionDroite(charac.getHitBox(), obs.getHitbox()) && obs != Jeu.getSol() && !HitBox.collisionHaut(obs.getHitbox(),charac.getHitBox())) {
+                charac.setObstacleNextTo(obs);
+                return true;
+            }
 
         }
+        charac.setObstacleNextTo(null);
         return false;
     }
 }
-- 
GitLab