From 7f2bf12afd823d5f514f645e4fa72ae49c2743cc Mon Sep 17 00:00:00 2001
From: Louis MALTERRE <malterre.louis@laposte.net>
Date: Mon, 5 Dec 2022 21:20:06 +0100
Subject: [PATCH] normalement les collisions sont debuguees LM

---
 .../src/main/java/entity/Character.java       | 17 ++---
 MAVENProject/src/main/java/entity/Entity.java | 35 +++++++--
 .../src/main/java/entity/Monster.java         | 72 ++++++++++++++++++-
 .../src/main/java/environnement/HitBox.java   |  9 ++-
 MAVENProject/src/main/java/jeu/Jeu.java       | 26 ++-----
 MAVENProject/src/main/java/jeu/Painter.java   | 15 ++--
 MAVENProject/src/main/java/map/Obstacle.java  |  6 ++
 7 files changed, 128 insertions(+), 52 deletions(-)

diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java
index 2a9bc27..c30a993 100644
--- a/MAVENProject/src/main/java/entity/Character.java
+++ b/MAVENProject/src/main/java/entity/Character.java
@@ -14,7 +14,7 @@ import environnement.PositionCollision;
 import jeu.Jeu;
 import map.Obstacle;
 
-import static environnement.HitBox.collisionObstacle;
+
 import static jeu.Jeu.getObstacleTable;
 
 public class Character extends Entity{
@@ -24,7 +24,6 @@ public class Character extends Entity{
     private final double impulsionSaut;
     private double masse;
     private int clef;
-
     private Map<String,Double> tableCommande; //table des commandes du perso
 
     //private BufferedImage sprite;
@@ -67,6 +66,9 @@ public class Character extends Entity{
         //on actualise les vitesses
         vitesseActuX = tableCommande.get("CommandX");
 
+        direction = (int) Math.signum(vitesseActuX);
+        System.out.println(direction);
+
         vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
     }
 
@@ -77,7 +79,7 @@ public class Character extends Entity{
         
         //recupere les collisions
         for (int i=0;i<listeObstaclesInVoisinage.size();i++) {
-            collisionsPresentes.put(listeObstaclesInVoisinage.get(i),collisionObstacle(this.getHitBox(), listeObstaclesInVoisinage.get(i).getHitbox(), i));
+            collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i));
         }
 
         //on set alpha a 0 (on suppose qu'il est en l'air)
@@ -100,7 +102,6 @@ public class Character extends Entity{
         //on gere les collisions laterales et celle du haut
         for (int i=0;i<collisionsPresentes.size();i++){
             if (collisionsPresentes.get(getObstacleTable().get(i)) == DROITE && this.vitesseActuX < 0){
-                System.out.println("coucou");
                 this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
             }
             else if (collisionsPresentes.get(getObstacleTable().get(i)) == GAUCHE && this.vitesseActuX > 0){
@@ -133,13 +134,6 @@ public class Character extends Entity{
         }
     }
     
-    public void clef(){
-        for (Coffre coffre : Jeu.getCoffreTable()){
-            if (HitBox.collision(this.hitBox, coffre.getHitBox()){
-                monster.setNbLifePoints(Math.max(monster.getNbLifePoints()-attackStat,0));
-            }
-        }
-    }
 
     public void getGameCommand(){
 
@@ -153,7 +147,6 @@ public class Character extends Entity{
             if ((alpha == 1) && (this.getVitesseActuZ() == 0)){
                 
                 tableCommande.replace("CommandZ", impulsionSaut);
-                System.out.println(tableCommande.get("CommandZ"));
             }      
         }
 
diff --git a/MAVENProject/src/main/java/entity/Entity.java b/MAVENProject/src/main/java/entity/Entity.java
index db7e35d..cf83ac5 100644
--- a/MAVENProject/src/main/java/entity/Entity.java
+++ b/MAVENProject/src/main/java/entity/Entity.java
@@ -1,10 +1,17 @@
 package entity;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import environnement.Coordonnees;
 import environnement.HitBox;
+import environnement.PositionCollision;
+import static environnement.PositionCollision.NONE;
+import map.Obstacle;
 
 
 public abstract class Entity {
+
     protected Coordonnees coord; 
     protected Coordonnees oldCoord;
     protected final double vitesseMax;
@@ -16,9 +23,12 @@ public abstract class Entity {
     protected final double entityHEIGHT;
     protected int alpha = 1; // gere les collisions avec le sol
     protected HitBox voisinage;
+    protected int direction = 1; // direction selon l'axe des x, -1 pour la gauche et 1 pour la droite
+    protected List<PositionCollision>  obstacleTableCollision = new ArrayList<>();
 
     
     public Entity(Coordonnees c,double vitesseMax,double width,double height,int atkStt){
+        
         this.coord = c;
         this.attackStat = atkStt;
         this.oldCoord = this.coord;
@@ -27,10 +37,22 @@ public abstract class Entity {
         this.entityWIDTH = width;
         this.hitBox = new HitBox(c, entityHEIGHT, entityWIDTH);
         this.voisinage = new HitBox(c, 600, 600);
+        obstacleTableCollision.add(NONE);
+        obstacleTableCollision.add(NONE);
+        obstacleTableCollision.add(NONE);
+        obstacleTableCollision.add(NONE);
     }
     public void deplacements(){}
 
     public void attaque(){}
+
+    public void updateVoisinage(){}
+
+    public void collisionGestion(){}
+
+    public List<Obstacle> obstacleInVoisinage(){return new ArrayList<Obstacle>();}
+   
+    public Boolean death(){return false;}
     
     public Coordonnees getCoord(){
         return this.coord;
@@ -84,9 +106,14 @@ public abstract class Entity {
         return attackStat;
     }
 
-    public void updateVoisinage(){
-        
+    
+
+    public List<PositionCollision> getObstacleTableCollision() {
+        return obstacleTableCollision;
     }
-   
-    public Boolean death(){return false;}
+
+    public int getDirection() {
+        return direction;
+    }   
+    
 }
diff --git a/MAVENProject/src/main/java/entity/Monster.java b/MAVENProject/src/main/java/entity/Monster.java
index 8b54a6a..c84f544 100644
--- a/MAVENProject/src/main/java/entity/Monster.java
+++ b/MAVENProject/src/main/java/entity/Monster.java
@@ -2,13 +2,23 @@ package entity;
 
 import environnement.Coordonnees;
 import environnement.HitBox;
+import environnement.Physique;
+import environnement.PositionCollision;
+import static environnement.PositionCollision.*;
+import jeu.Jeu;
+import map.Obstacle;
+
 import static jeu.Jeu.getGameCharacter;
+import static jeu.Jeu.getObstacleTable;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 public class Monster extends Entity{
 
-    int direction = -1; // direction selon l'axe des x, -1 pour la gauche et 1 pour la droite
+    
+    double vitesseActuZ = 0;
 
     public Monster(Coordonnees c, double vitesseMax,double width,double height,int atkStt,int nbLP) {
         super(c, vitesseMax,width,height,atkStt);
@@ -28,7 +38,48 @@ public class Monster extends Entity{
         //******************
 
         double newX = coord.getX()+direction*vitesseMax*delta;
-        setCoord(new Coordonnees(newX, coord.getZ()));
+        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;
+    }
+
+    public void collisionGestion(){
+        List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage();
+        //stocke l'obstacle avec lequel il y a eu collision
+        HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>();
+        
+        //recupere les collisions
+        for (int i=0;i<listeObstaclesInVoisinage.size();i++) {
+            collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i));
+        }
+
+        //on set alpha a 0 (on le suppose dans les airs)
+        alpha = 0;
+
+        //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(getObstacleTable().get(i)) == BAS){           
+                this.vitesseActuZ = 0;
+                this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2));
+                alpha = 1;
+                break;
+            }
+        }
+        
+        //on gere les collisions laterales
+        for (int i=0;i<collisionsPresentes.size();i++){
+            if (collisionsPresentes.get(getObstacleTable().get(i)) == DROITE && this.direction == -1){
+                this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
+                this.direction = 1;
+                break;
+            }
+            else if (collisionsPresentes.get(getObstacleTable().get(i)) == GAUCHE && this.direction == 1){
+                this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
+                this.direction = -1;
+                break;
+            }
+        }
     }
     
     public void attaque(){
@@ -40,7 +91,9 @@ public class Monster extends Entity{
 
     public void evolveMonster(){ //evolution du monstre
         deplacements();
+        collisionGestion(); // ca merde
         attaque();
+        updateVoisinage();
         this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH));
         
     }
@@ -49,6 +102,7 @@ public class Monster extends Entity{
         if (!liste.isEmpty()){
             for (Monster monster : liste)monster.evolveMonster();
         }
+        //on supprime tous les monstres morts
         int i = 0;
         while (i < liste.size()){
             if (liste.get(i).death())liste.remove(i);
@@ -57,6 +111,20 @@ public class Monster extends Entity{
 
     }
 
+    public List<Obstacle> obstacleInVoisinage(){
+        List<Obstacle> liste = new ArrayList<>();
+        for (Obstacle obs : Jeu.getObstacleTable()){
+            if (HitBox.collision(voisinage, obs.getHitbox())){
+                liste.add(obs);
+            }
+        }
+        return liste;
+    }
+
+    public void updateVoisinage(){
+        voisinage = new HitBox(coord, 600, 600);
+    }
+
     public Boolean death(){
         return nbLifePoints == 0;
     }
diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java
index 0242c1a..8506ef2 100644
--- a/MAVENProject/src/main/java/environnement/HitBox.java
+++ b/MAVENProject/src/main/java/environnement/HitBox.java
@@ -4,8 +4,7 @@ import java.util.HashMap;
 import java.util.List;
 
 import static environnement.PositionCollision.*;
-import static jeu.Jeu.getObstacleTableCollisionCharac;
-import static jeu.Jeu.setObstacleTableCollisionCharac;
+
 
 public class HitBox {
 
@@ -61,8 +60,8 @@ public class HitBox {
         return extremites;
     }
 
-    public static PositionCollision collisionObstacle(HitBox A, HitBox B,int i) {
-        List<PositionCollision> L = getObstacleTableCollisionCharac();
+    public static PositionCollision collisionObstacle(HitBox A, HitBox B,int i,List<PositionCollision> L) {
+
         boolean a = !(A.getExtremites().get("HautGauche").getX() > B.getExtremites().get("HautDroite").getX()); // A est à droite de B
         boolean b = !(A.getExtremites().get("HautDroite").getX() < B.getExtremites().get("HautGauche").getX()); // A est à gauche de B
         boolean c = !(A.getExtremites().get("HautGauche").getZ() > B.getExtremites().get("BasGauche").getZ()); // A est en dessous de B
@@ -95,7 +94,7 @@ public class HitBox {
             if (!d) {
                 L.set(i, BAS);
             }
-            setObstacleTableCollisionCharac(L);
+
         }
 
         if (somme == 4) {
diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java
index 7499c22..7098eb2 100644
--- a/MAVENProject/src/main/java/jeu/Jeu.java
+++ b/MAVENProject/src/main/java/jeu/Jeu.java
@@ -14,13 +14,9 @@ import entity.Monster;
 import engine.Game;
 import environnement.Coordonnees;
 import environnement.HitBox;
-import environnement.PositionCollision;
 import map.Obstacle;
-import map.Coffre;
 import loaders.CharacterLoader;
 
-import static environnement.PositionCollision.*;
-
 
 public class Jeu implements Game{
 
@@ -56,9 +52,8 @@ public class Jeu implements Game{
     public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),1,1000000));
 
     private static List<Obstacle> obstacleTable = new ArrayList<>();
-    private static List<PositionCollision>  obstacleTableCollisionCharac= new ArrayList<>();
     private static List<Monster> monsterList = new ArrayList<>();
-    private static List<Coffre> coffreTable = new ArrayList<>();
+    //private static List<Coffre> coffreTable = new ArrayList<>();
 
     
 
@@ -110,14 +105,10 @@ public class Jeu implements Game{
         obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128)));
         obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(800, 625),150,50)));
         obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(600, 662.5),75,50)));
-        coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30)));
+        //coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30)));
 
-        obstacleTableCollisionCharac.add(NONE);
-        obstacleTableCollisionCharac.add(NONE);
-        obstacleTableCollisionCharac.add(NONE);
-        obstacleTableCollisionCharac.add(NONE);
 
-        monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-30), 1000, 30, 60, 1,1));
+        monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10));
 
     }
 
@@ -206,15 +197,10 @@ public class Jeu implements Game{
     public static List<Obstacle> getObstacleTable() {
         return obstacleTable;
     }
-    public static List<Coffre> getCoffreTable() {
+    /*public static List<Coffre> getCoffreTable() {
         return coffreTable;
-    }
-    public static List<PositionCollision> getObstacleTableCollisionCharac() {
-        return obstacleTableCollisionCharac;
-    }
-    public static void setObstacleTableCollisionCharac(List<PositionCollision> obstacleTableCollisionCharac) {
-        Jeu.obstacleTableCollisionCharac = obstacleTableCollisionCharac;
-    }
+    }*/
+
     public static Character getGameCharacter() {
         return gameCharacter;
     }
diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java
index 0772b7b..62cf336 100644
--- a/MAVENProject/src/main/java/jeu/Painter.java
+++ b/MAVENProject/src/main/java/jeu/Painter.java
@@ -6,9 +6,6 @@ import environnement.Coordonnees;
 import environnement.HitBox;
 import loaders.ObstacleLoader;
 import map.Obstacle;
-import loaders.CoffreLoader;
-import map.Coffre;
-
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.util.HashMap;
@@ -85,7 +82,7 @@ public class Painter implements GamePainter{
         crayon.drawLine((int)hg.getX(),(int)hg.getZ(),(int)hd.getX(),(int)hd.getZ());
 
     }
-    private void drawCoffre(Graphics2D crayon, Coffre coffre){
+    /*private void drawCoffre(Graphics2D crayon, Coffre coffre){
         HashMap<String, Coordonnees> extremites = coffre.getHitbox().getExtremites();
         Coordonnees hd = extremites.get("HautDroite");
         Coordonnees bd = extremites.get("BasDroite");
@@ -96,7 +93,7 @@ public class Painter implements GamePainter{
         crayon.drawLine((int)bg.getX(),(int)bg.getZ(),(int)hg.getX(),(int)hg.getZ());
         crayon.drawLine((int)hg.getX(),(int)hg.getZ(),(int)hd.getX(),(int)hd.getZ());
 
-    }
+    }*/
 
     private void drawSol(Graphics2D crayon){
         ObstacleLoader loader = new ObstacleLoader(Jeu.getSol(),"Terre.png");
@@ -117,7 +114,7 @@ public class Painter implements GamePainter{
             }
             drawObstacle(crayon,obs);
         }
-        for (Coffre obs : Jeu.getCoffreTable()){
+        /*for (Coffre obs : Jeu.getCoffreTable()){
             if (!collision(gameCharacter.getHitBox(), obs.getHitbox())){
                 crayon.setColor(Color.blue);
             }
@@ -125,7 +122,7 @@ public class Painter implements GamePainter{
                 crayon.setColor(Color.red);
             }
             drawCoffre(crayon,obs);
-        }
+        }*/
     }
 
     private void drawObstacleBis(Graphics2D crayon, Obstacle obstacle, String nom){
@@ -136,13 +133,13 @@ public class Painter implements GamePainter{
         crayon.drawImage(loader.getImageObstacle(), x - (int) hitBox.getWidth()/2,z - (int) hitBox.getHeight()/2,null,null);
     }
     
-    private void drawCoffreBis(Graphics2D crayon, Coffre coffre, String nom){
+    /*private void drawCoffreBis(Graphics2D crayon, Coffre coffre, String nom){
         CoffreLoader loader = new CoffreLoader(coffre,nom);
         HitBox hitBox = loader.getCoffre().getHitbox();
         int z = (int) hitBox.getCentre().getZ();
         int x = (int) hitBox.getCentre().getX();
         crayon.drawImage(loader.getImageCoffre(), x - (int) hitBox.getWidth()/2,z - (int) hitBox.getHeight()/2,null,null);
-    }
+    }*/
 
     private void drawMonsters(Graphics2D crayon){
         int x;
diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java
index dca88ff..9e80fc3 100644
--- a/MAVENProject/src/main/java/map/Obstacle.java
+++ b/MAVENProject/src/main/java/map/Obstacle.java
@@ -1,6 +1,8 @@
 package map;
 
+import entity.Entity;
 import environnement.HitBox;
+import environnement.PositionCollision;
 
 
 
@@ -11,6 +13,10 @@ public class Obstacle {
     public Obstacle(HitBox h){
         this.hitbox = h;
     }
+
+    public static PositionCollision collision(Entity entity,Obstacle obs,int i){
+        return HitBox.collisionObstacle(entity.getHitBox(), obs.getHitbox(), i, entity.getObstacleTableCollision());
+    }
     public HitBox getHitbox() {
         return hitbox;
     }
-- 
GitLab