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