Skip to content
Snippets Groups Projects
Commit 86f72cb5 authored by Louis MALTERRE's avatar Louis MALTERRE
Browse files

collisions implementees...

collisions implementees (OUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUAAAAAAAAAAAAAAAAAAAAAAAAIIIIIIIIIIIIIIIIIIIIIIIIIIS)
LM
parent 7b1dee6d
No related branches found
No related tags found
No related merge requests found
...@@ -7,12 +7,13 @@ import java.util.Map; ...@@ -7,12 +7,13 @@ import java.util.Map;
import environnement.Coordonnees; import environnement.Coordonnees;
import environnement.HitBox; import environnement.HitBox;
import environnement.Physique; import environnement.Physique;
import static environnement.PositionCollision.*;
import environnement.PositionCollision;
import jeu.Jeu; import jeu.Jeu;
import map.Obstacle;
import static environnement.HitBox.collisionObstacle; import static environnement.HitBox.collisionObstacle;
import static jeu.Jeu.getObstacleTable; import static jeu.Jeu.getObstacleTable;
import static jeu.Jeu.getObstacleTableCollisionCharac;
public class Character extends Entity{ public class Character extends Entity{
...@@ -22,15 +23,17 @@ public class Character extends Entity{ ...@@ -22,15 +23,17 @@ public class Character extends Entity{
private int nbLifePoints = 3; private int nbLifePoints = 3;
private double masse; private double masse;
private int alpha = 1; // gere les collisions avec le sol 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 entityWIDTH = 30; // pour l'instant je les ai renommes, ca peut changer
private final double entityHEIGHT = 60; private final double entityHEIGHT = 60;
private Map<String,Double> tableCommande; //table des commandes du perso private Map<String,Double> tableCommande; //table des commandes du perso
//private BufferedImage sprite; //private BufferedImage sprite;
public Character(Coordonnees c, double vitesseMax, double m, double impSaut){ public Character(Coordonnees c, double vitesseMax, double m, double impSaut){
super(c,vitesseMax); // comme tous les entities ont une hitbox, j'ai factorise super(c,vitesseMax); // comme tous les entities ont une hitbox, j'ai factorise
this.masse = m; this.masse = m;
this.oldCoord = this.getCoord(); this.oldCoord = this.getCoord();
...@@ -38,16 +41,12 @@ public class Character extends Entity{ ...@@ -38,16 +41,12 @@ public class Character extends Entity{
this.setHitBox(new HitBox(c,entityHEIGHT,entityWIDTH)); this.setHitBox(new HitBox(c,entityHEIGHT,entityWIDTH));
this.tableCommande = new HashMap<>(); this.tableCommande = new HashMap<>();
tableCommande.put("CommandX",(double)0); tableCommande.put("CommandX",(double)0);
tableCommande.put("CommandZ",(double)0); tableCommande.put("CommandZ",(double)0);
//sprite = CharacterLoader.getImageCharacter();
} }
@Override @Override
public void deplacements(){ // alpha indique si il est au sol ou non, il vaut 0 (en l'air) ou 1 (au sol) en fonction public void deplacements(){ // alpha indique si il est au sol ou non, il vaut 0 (en l'air) ou 1 (au sol) en fonction
if (this.getCoord().getZ()>= 700 ) {
alpha = 1;
}
else { alpha = 0;}
double delta = Math.pow(10, -3); // pas de temps remis en secondes double delta = Math.pow(10, -3); // pas de temps remis en secondes
//on actualise les positions //on actualise les positions
...@@ -55,33 +54,67 @@ public class Character extends Entity{ ...@@ -55,33 +54,67 @@ public class Character extends Entity{
//on se souvient de ses anciennes positions //on se souvient de ses anciennes positions
this.oldCoord = this.getCoord(); this.oldCoord = this.getCoord();
newX = beta*tableCommande.get("CommandX")*delta + this.getCoord().getX(); newX = 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(); newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
if (newZ+entityHEIGHT/2 >= obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getZ()){
newZ = obstacleBeneath.getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2; if (newZ+entityHEIGHT/2 >= Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()){
newZ = Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2; //on remet sur le sol
alpha = 1; alpha = 1;
} }
//(tableCommande.get("CommandZ") == 0) this.getCoord().getZ()(tableCommande.get("CommandZ") == 0) && System.out.println(newZ-this.getCoord().getZ());
this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees
//on actualise les vitesses //on actualise les vitesses
vitesseActuX = beta*tableCommande.get("CommandX"); vitesseActuX = tableCommande.get("CommandX");
if (alpha == 1) vitesseActuZ = 0; vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
/*else*/ vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
} }
public void collisionGestion(){ public void collisionGestion(){
//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<getObstacleTable().size();i++) { for (int i=0;i<getObstacleTable().size();i++) {
collisionObstacle(this.getHitBox(), getObstacleTable().get(i).getHitbox(), i); collisionsPresentes.put(getObstacleTable().get(i),collisionObstacle(this.getHitBox(), getObstacleTable().get(i).getHitbox(), i));
System.out.println(collisionObstacle(this.getHitBox(), getObstacleTable().get(i).getHitbox(),i).toString());
} }
//on set alpha a 0 (on suppose qu'il est en l'air)
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), on n'étudie qui si on ne donne pas de commande
if (tableCommande.get("CommandZ") != 0){
break;
}
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 et celle du haut
for (int i=0;i<collisionsPresentes.size();i++){
if (collisionsPresentes.get(getObstacleTable().get(i)) == DROITE && this.vitesseActuX < 0){
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){
this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
}
else if (collisionsPresentes.get(getObstacleTable().get(i)) == HAUT){
this.vitesseActuZ = 0;
this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("BasGauche").getZ()+entityHEIGHT/2+1));
}
}
} }
@Override @Override
public void attaque(){ public void attaque(){
...@@ -89,6 +122,7 @@ public class Character extends Entity{ ...@@ -89,6 +122,7 @@ public class Character extends Entity{
} }
public void getGameCommand(){ public void getGameCommand(){
Map<String,Boolean> commandeJeu = Jeu.getDirectionJeu(); Map<String,Boolean> commandeJeu = Jeu.getDirectionJeu();
if (commandeJeu.get("Right") && commandeJeu.get("Left")){tableCommande.replace("CommandX", (double)0);} if (commandeJeu.get("Right") && commandeJeu.get("Left")){tableCommande.replace("CommandX", (double)0);}
else if (commandeJeu.get("Right")) tableCommande.replace("CommandX", vitesseMax); else if (commandeJeu.get("Right")) tableCommande.replace("CommandX", vitesseMax);
...@@ -97,7 +131,9 @@ public class Character extends Entity{ ...@@ -97,7 +131,9 @@ public class Character extends Entity{
if (commandeJeu.get("Jump")) { if (commandeJeu.get("Jump")) {
if ((alpha == 1) && (this.getVitesseActuZ() == 0)){ if ((alpha == 1) && (this.getVitesseActuZ() == 0)){
tableCommande.replace("CommandZ", impulsionSaut); tableCommande.replace("CommandZ", impulsionSaut);
System.out.println(tableCommande.get("CommandZ"));
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment