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

le systeme dee voisinage n'est tjr pas 100% opti, lorsqu'il est trop petit y'...

le systeme dee voisinage n'est tjr pas 100% opti, lorsqu'il est trop petit y' a des pbs dans les collisions
ca reste un mystere pour moi atm. Mais sinon la le voisinage est normalement assez grand pour que ca marche. LM
parent 7f2bf12a
No related branches found
No related tags found
No related merge requests found
......@@ -56,18 +56,18 @@ public class Character extends Entity{
newZ = ((1-alpha)*Physique.g - tableCommande.get("CommandZ"))/2*delta*delta + vitesseActuZ*delta + this.getCoord().getZ();
if (newZ+entityHEIGHT/2 >= Jeu.getSol().getHitbox().getExtremites().get("HautGauche").getZ()){
/*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;
}
}*/
this.setCoord(new Coordonnees(newX, newZ)); // on set les nouvelles coordonnees
//on actualise les vitesses
vitesseActuX = tableCommande.get("CommandX");
direction = (int) Math.signum(vitesseActuX);
System.out.println(direction);
if (vitesseActuX != 0){
direction = (int) Math.signum(vitesseActuX);
}
vitesseActuZ = vitesseActuZ + 7*((1-alpha)*Physique.g - tableCommande.get("CommandZ"))*delta;
}
......@@ -79,7 +79,9 @@ public class Character extends Entity{
//recupere les collisions
for (int i=0;i<listeObstaclesInVoisinage.size();i++) {
collisionsPresentes.put(listeObstaclesInVoisinage.get(i),Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i));
PositionCollision posCol = Obstacle.collision(this, listeObstaclesInVoisinage.get(i), i);
collisionsPresentes.put(listeObstaclesInVoisinage.get(i),posCol);
}
//on set alpha a 0 (on suppose qu'il est en l'air)
......@@ -91,7 +93,7 @@ public class Character extends Entity{
if (tableCommande.get("CommandZ") != 0){
break;
}
if (collisionsPresentes.get(getObstacleTable().get(i)) == BAS){
if (collisionsPresentes.get(listeObstaclesInVoisinage.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;
......@@ -101,20 +103,27 @@ 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){
this.setCoord(new Coordonnees(getObstacleTable().get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.vitesseActuX < 0){
this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautDroite").getX()+entityWIDTH/2, this.getCoord().getZ()));
break;
}
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(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.vitesseActuX > 0){
this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
break;
}
else if (collisionsPresentes.get(getObstacleTable().get(i)) == HAUT){
}
for (int i=0;i<collisionsPresentes.size();i++){
if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == HAUT){
this.vitesseActuZ = 0;
this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("BasGauche").getZ()+entityHEIGHT/2+1));
this.setCoord(new Coordonnees(this.getCoord().getX(), listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("BasGauche").getZ()+entityHEIGHT/2+1));
break;
}
}
}
public List<Obstacle> obstacleInVoisinage(){
public List<Obstacle> obstacleInVoisinage(){ //recupere la liste des obstacles presents dans le voisinage
List<Obstacle> liste = new ArrayList<>();
for (Obstacle obs : getObstacleTable()){
if (HitBox.collision(voisinage, obs.getHitbox())){
......@@ -124,6 +133,7 @@ public class Character extends Entity{
return liste;
}
@Override
public void attaque(){
for (Monster monster : Jeu.getMonsterList()){
......@@ -187,7 +197,7 @@ public class Character extends Entity{
}
public void updateVoisinage(){
voisinage = new HitBox(coord, 600, 600);
voisinage = new HitBox(coord, 1000, 1000);
}
public Boolean death(){
......
......@@ -6,6 +6,7 @@ import java.util.List;
import environnement.Coordonnees;
import environnement.HitBox;
import environnement.PositionCollision;
import static jeu.Jeu.getObstacleTable;
import static environnement.PositionCollision.NONE;
import map.Obstacle;
......@@ -37,10 +38,9 @@ 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);
for (int i = 0;i<getObstacleTable().size();i++){
obstacleTableCollision.add(NONE);
}
}
public void deplacements(){}
......@@ -114,6 +114,9 @@ public abstract class Entity {
public int getDirection() {
return direction;
}
public HitBox getVoisinage() {
return voisinage;
}
}
......@@ -44,6 +44,7 @@ public class Monster extends Entity{
}
public void collisionGestion(){
//recupere la liste des obstacles dans le voisinage
List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage();
//stocke l'obstacle avec lequel il y a eu collision
HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>();
......@@ -59,9 +60,9 @@ public class Monster extends Entity{
//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){
if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == BAS){
this.vitesseActuZ = 0;
this.setCoord(new Coordonnees(this.getCoord().getX(), getObstacleTable().get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2));
this.setCoord(new Coordonnees(this.getCoord().getX(), listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getZ()-entityHEIGHT/2));
alpha = 1;
break;
}
......@@ -69,18 +70,19 @@ public class Monster extends Entity{
//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()));
if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == DROITE && this.direction == -1){
this.setCoord(new Coordonnees(listeObstaclesInVoisinage.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()));
else if (collisionsPresentes.get(listeObstaclesInVoisinage.get(i)) == GAUCHE && this.direction == 1){
this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2, this.getCoord().getZ()));
this.direction = -1;
break;
}
}
}
public void attaque(){
if (HitBox.collision(this.hitBox, getGameCharacter().getHitBox())){
......@@ -111,7 +113,7 @@ public class Monster extends Entity{
}
public List<Obstacle> obstacleInVoisinage(){
public List<Obstacle> obstacleInVoisinage(){ //recupere la liste des obstacles presents dans le voisinage
List<Obstacle> liste = new ArrayList<>();
for (Obstacle obs : Jeu.getObstacleTable()){
if (HitBox.collision(voisinage, obs.getHitbox())){
......
......@@ -70,8 +70,7 @@ public class Jeu implements Game{
characterSkinPath = beginPath + movement + numberOfMovement + ".png"; // path premiere frame
/*A = new ArrayList<Double>();
n = 0;*/
gameCharacterLoader = new CharacterLoader(characterSkinPath,new Character(new Coordonnees(300, 300), 2000, 1,600000));
gameCharacter = gameCharacterLoader.getGameCharacter();
try {
helpReader = new BufferedReader(new FileReader(source));
String line;
......@@ -90,6 +89,25 @@ public class Jeu implements Game{
directionJeu.put("Jump", false);
directionJeu.put("Attack",false);
obstacleTable.add(sol);
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)));
obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128)));
//coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30)));
//on met des monstres
monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10));
monsterList.add(new Monster(new Coordonnees(500, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10));
monsterList.add(new Monster(new Coordonnees(100, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10));
//on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite")
gameCharacterLoader = new CharacterLoader(characterSkinPath,new Character(new Coordonnees(300, 300), 2000, 1,600000));
gameCharacter = new Character(new Coordonnees(300, 300), 2000, 1,600000);
//on remplit la map des frames
Map<String,Integer> tempMap = gameCharacterLoader.getPathTable();
......@@ -100,16 +118,6 @@ public class Jeu implements Game{
tempMap.put("character_jump",1);
gameCharacterLoader.setPathTable(tempMap);
obstacleTable.add(sol);
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)));
monsterList.add(new Monster(new Coordonnees(1000, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,10));
}
@Override
......
......@@ -48,6 +48,7 @@ public class Painter implements GamePainter{
int x = (int) gameCharacter.getCoord().getX();
int y = (int) gameCharacter.getCoord().getZ();
crayon.fillRect(x-(int) gameCharacter.getEntityWIDTH()/2,y-(int) gameCharacter.getEntityHEIGHT()/2, (int) gameCharacter.getEntityWIDTH(),(int) gameCharacter.getEntityHEIGHT());
crayon.drawRect(x-500,y-500, 1000,1000);
crayon.drawImage(imageCharac, x-(int) gameCharacter.getEntityWIDTH()/2-10, y- (int) gameCharacter.getEntityHEIGHT()/2-3, null, null);
}
......@@ -76,6 +77,7 @@ public class Painter implements GamePainter{
Coordonnees bd = extremites.get("BasDroite");
Coordonnees hg = extremites.get("HautGauche");
Coordonnees bg = extremites.get("BasGauche");
if (HitBox.collision(gameCharacter.getVoisinage(), obstacle.getHitbox()))crayon.setColor(Color.green);
crayon.drawLine((int)hd.getX(),(int)hd.getZ(),(int)bd.getX(),(int)bd.getZ());
crayon.drawLine((int)bd.getX(),(int)bd.getZ(),(int)bg.getX(),(int)bg.getZ());
crayon.drawLine((int)bg.getX(),(int)bg.getZ(),(int)hg.getX(),(int)hg.getZ());
......@@ -147,8 +149,10 @@ public class Painter implements GamePainter{
crayon.setColor(Color.blue);
for (Monster monster : getMonsterList()){
crayon.setColor(Color.blue);
x = (int)monster.getCoord().getX();
z = (int)monster.getCoord().getZ();
crayon.drawRect(x-300, z-300, 600, 600);
if (HitBox.collision(gameCharacter.getHitBox(),monster.getHitBox()))crayon.setColor(Color.red);
crayon.fillRect(x-(int)monster.getEntityWIDTH()/2, z-(int)monster.getEntityHEIGHT()/2, (int)monster.getEntityWIDTH(), (int)monster.getEntityHEIGHT());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment