diff --git a/MAVENProject/src/main/java/entity/Character.java b/MAVENProject/src/main/java/entity/Character.java index ed95f57c8700cf2752aee3adea8136de6e1b6771..b1842f31ec6d4efd19183747e26151e98a24d423 100644 --- a/MAVENProject/src/main/java/entity/Character.java +++ b/MAVENProject/src/main/java/entity/Character.java @@ -21,6 +21,7 @@ public class Character extends Entity{ private final double characterHEIGHT= 60; private Map<String,Double> tableCommande; //table des commandes du perso //private BufferedImage sprite; + private Obstacle obstacleBeneath = null; public Character(Coordonnees c, double vitesseMax, double m, double impSaut){ @@ -44,7 +45,7 @@ public class Character extends Entity{ newX = tableCommande.get("CommandX")*delta + this.getCoord().getX(); // frottements enleves (le perso finissait par freiner tout seul donc tant que y'a pas d'interet je les enleve, j'ai tjr les equations de cote) - if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = Jeu.getCoordSol().getZ(); + if ((tableCommande.get("CommandZ") == 0) && (this.getCoord().getZ() >= Jeu.getCoordSol().getZ()))newZ = obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getZ(); else newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ(); //System.out.println("écart de hauteur: "+this.getCoord().getZ()); @@ -80,7 +81,7 @@ public class Character extends Entity{ } public void checkIfOnGround(){ // faut modifier la condition pour la gestion de colisions avec le sol - if (Obstacle.collisionBas(this, Jeu.getObstacleTable()))alpha = 0; + if (!Obstacle.collisionBas(this, Jeu.getObstacleTable()))alpha = 0; else alpha = 1; } @@ -131,5 +132,11 @@ public class Character extends Entity{ public HitBox getHitBox() { return hitBox; } + public Obstacle getObstacleBeneath() { + return obstacleBeneath; + } + public void setObstacleBeneath(Obstacle obstacleBeneath) { + this.obstacleBeneath = obstacleBeneath; + } } diff --git a/MAVENProject/src/main/java/environnement/HitBox.java b/MAVENProject/src/main/java/environnement/HitBox.java index cc8983b34aa1f687629ba5fcdb956a96c4a6a699..28b8dc7423b9107986940ec42bdc44d69a7caaf8 100644 --- a/MAVENProject/src/main/java/environnement/HitBox.java +++ b/MAVENProject/src/main/java/environnement/HitBox.java @@ -38,15 +38,15 @@ public class HitBox { } public static Boolean collisionDroite(HitBox A, HitBox B){ - return !(A.extremites.get("HautGauche").getX() >= B.extremites.get("HautDroite").getX()); + return !(A.extremites.get("HautGauche").getX() >= B.extremites.get("HautDroite").getX());// A est à droite de B } public static Boolean collisionGauche(HitBox A, HitBox B){ - return !(A.extremites.get("HautDroite").getX() <= B.extremites.get("HautGauche").getX()); + return !(A.extremites.get("HautDroite").getX() <= B.extremites.get("HautGauche").getX());// A est à gauche de B } public static Boolean collisionBas(HitBox A, HitBox B){ - return !(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){ - return !(A.extremites.get("BasGauche").getZ() <= B.extremites.get("HautGauche").getZ()); + return !(A.extremites.get("BasGauche").getZ() <= B.extremites.get("HautGauche").getZ());// A est au dessus de B } } \ No newline at end of file diff --git a/MAVENProject/src/main/java/jeu/Jeu.java b/MAVENProject/src/main/java/jeu/Jeu.java index 00f08acfcc6c6b7d055ab7941b98eefe05286eec..fe19cf905ee98d9ec111c1a907eb274844ff6edc 100644 --- a/MAVENProject/src/main/java/jeu/Jeu.java +++ b/MAVENProject/src/main/java/jeu/Jeu.java @@ -96,7 +96,7 @@ public class Jeu implements Game{ gameCharacterLoader.setPathTable(tempMap); obstacleTable.add(sol); - obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),100,120))); + obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128))); } diff --git a/MAVENProject/src/main/java/jeu/Painter.java b/MAVENProject/src/main/java/jeu/Painter.java index 690899200363bfbe01adee50fa68d280426972eb..697bc22f9ae0e5fdf6cbd1a6edd8cd21b51ab7ec 100644 --- a/MAVENProject/src/main/java/jeu/Painter.java +++ b/MAVENProject/src/main/java/jeu/Painter.java @@ -54,8 +54,8 @@ public class Painter implements GamePainter{ private void drawCharacter(Graphics2D crayon,Image imageCharac){ int x = (int) gameCharacter.getCoord().getX(); int y = (int) gameCharacter.getCoord().getZ(); - //crayon.fillRect(x-15,y-30, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT()); - crayon.drawImage(imageCharac, x-(int) gameCharacter.getEntityWIDTH(), y- (int) gameCharacter.getEntityHEIGHT(), null, null); + crayon.fillRect(x-(int) gameCharacter.getEntityWIDTH()/2,y-(int) gameCharacter.getEntityHEIGHT()/2, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT()); + crayon.drawImage(imageCharac, x-(int) gameCharacter.getEntityWIDTH()/2, y- (int) gameCharacter.getEntityHEIGHT()/2, null, null); } diff --git a/MAVENProject/src/main/java/map/Obstacle.java b/MAVENProject/src/main/java/map/Obstacle.java index dd3fbb9695f9a28ebcc513f79366056496c017fc..bb2c88488bdc9fbbdb68dee34e7c476a58b41cc0 100644 --- a/MAVENProject/src/main/java/map/Obstacle.java +++ b/MAVENProject/src/main/java/map/Obstacle.java @@ -4,6 +4,9 @@ import java.util.List; import entity.Character; import environnement.HitBox; +import jeu.Jeu; + + public class Obstacle { @@ -18,8 +21,23 @@ public class Obstacle { public static Boolean collisionBas(Character charac,List<Obstacle> list){ for (Obstacle obs : list){ - if (HitBox.collisionBas(obs.getHitbox(),charac.getHitBox()))return true; - } + if (obs != Jeu.getSol()){ + + + if (HitBox.collisionDroite(charac.getHitBox(),obs.getHitbox()) && HitBox.collisionGauche(charac.getHitBox(),obs.getHitbox()) && HitBox.collisionBas(obs.getHitbox(),charac.getHitBox())){ + + charac.setObstacleBeneath(obs); + return true; + } + + } + else{ + if (HitBox.collisionBas(obs.getHitbox(), charac.getHitBox())) { + charac.setObstacleBeneath(obs); + return true; + } + } + }//a revoir return false; } }