Skip to content
Snippets Groups Projects
Commit 2ff16f2f authored by BRUGNEAUX Louis's avatar BRUGNEAUX Louis
Browse files

Map avec collisions

parent b8203725
No related branches found
No related tags found
No related merge requests found
......@@ -26,6 +26,8 @@ public class Character extends Entity{
private int clef;
private Map<String,Double> tableCommande; //table des commandes du perso
private Obstacle obstacleBeneath = Jeu.sol;
//private BufferedImage sprite;
public Character(Coordonnees c, double vitesseMax, double m, double impSaut){
......@@ -66,7 +68,7 @@ public class Character extends Entity{
}
public void collisionGestion(){
List<Obstacle> listeObstaclesInVoisinage = obstacleInVoisinage();
List<Obstacle> listeObstaclesInVoisinage = getObstacleTable();
//stocke l'obstacle avec lequel il y a eu collision
HashMap<Obstacle,PositionCollision> collisionsPresentes = new HashMap<Obstacle,PositionCollision>();
......@@ -79,30 +81,39 @@ public class Character extends Entity{
//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()) {
//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(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;
break;
alpha = 1;
}
else {
obstacleBeneath=Jeu.sol;
//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(listeObstaclesInVoisinage.get(i)) == BAS ){
this.vitesseActuZ = 0;
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;
}
}
}
//on gere les collisions laterales et celle du haut
for (int i=0;i<collisionsPresentes.size();i++){
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()));
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, this.getCoord().getZ()));
this.setCoord(new Coordonnees(listeObstaclesInVoisinage.get(i).getHitbox().getExtremites().get("HautGauche").getX()-entityWIDTH/2-1, this.getCoord().getZ()));
break;
}
......@@ -168,7 +179,8 @@ public class Character extends Entity{
getGameCommand();
deplacements();
collisionGestion();
updateVoisinage();
System.out.println(obstacleBeneath);
//updateVoisinage();
this.setHitBox(new HitBox(this.getCoord(),entityHEIGHT,entityWIDTH)); // mise à jour moins crade pour l'instant
if (tableCommande.get("CommandAttack") == 1) attaque();
updateNbFrameInvincible();
......@@ -176,6 +188,10 @@ public class Character extends Entity{
}
public Obstacle getObstacleBeneath() {
return obstacleBeneath;
}
private void updateNbFrameInvincible(){
nbFramesInvincible = Math.max(0, nbFramesInvincible-1);
}
......
......@@ -32,7 +32,7 @@ public class Jeu implements Game{
//Coordonees de debut du personnage
static final double zdebut = 0;
static final double xdebut = 300;
static final double xdebut = 200;
//perso
static Character gameCharacter;
......@@ -60,7 +60,7 @@ public class Jeu implements Game{
private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire
public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),1,1000000));
public static Obstacle sol = new Obstacle(new HitBox(new Coordonnees(200,700),56,1000000));
public static List<Obstacle> obstacleTable = new ArrayList<>();
private static List<Monster> monsterList = new ArrayList<>();
......@@ -68,10 +68,11 @@ public class Jeu implements Game{
//private static List<Coffre> coffreTable = new ArrayList<>();
public final static int TILES_DEFAULT_SIZE=32;
public final static float SCALE=1.5f;
public final static float SCALE=1.75f;
public final static int TILES_IN_WIDTH = 60;
public final static int TILES_IN_HEIGHT = 20;
public final static int TILES_SIZE = (int) (TILES_DEFAULT_SIZE*SCALE);
LevelManager levelManager;
public Jeu(String source) {
......@@ -87,7 +88,7 @@ public class Jeu implements Game{
/*A = new ArrayList<Double>();
n = 0;*/
LevelManager levelManager = new LevelManager();
......@@ -111,12 +112,16 @@ public class Jeu implements Game{
//faut supp la pour table obstacles
obstacleTable= levelManager.generateObstacleTable();
obstacleTable.add(sol);
obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(300,550),32,128)));
/*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)));
obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(450, 400),32,128)));*/
//coffreTable.add(new Coffre(new HitBox(new Coordonnees(900, 685),30,30))); //table des coffres
......@@ -189,7 +194,8 @@ public class Jeu implements Game{
}
if (!characterAttacking){ //animation d'attaque prioritaire
if (gameCharacter.getAlpha() == 0) movement = "character_jump"; // pour savoir si il jump ou non
if ( gameCharacter.getAlpha()==0 || gameCharacter.getHitBox().getExtremites().get("BasDroite").getZ()+gameCharacter.getEntityHEIGHT()/2-gameCharacter.getObstacleBeneath().getHitbox().getExtremites().get("HautDroite").getZ()<-1) {
movement = "character_jump";} // pour savoir si il jump ou non
else{
if (Right && Left)movement = "character_idle";
else if (Right || Left){
......
......@@ -36,7 +36,7 @@ public class Painter implements GamePainter{
private Painter painter;
public Painter() {
levelManager = new LevelManager(painter);
}
@Override
......@@ -48,12 +48,9 @@ public class Painter implements GamePainter{
Graphics2D crayon = (Graphics2D) im.getGraphics();
crayon.setColor(Color.blue);
levelManager.draw();
drawMap(crayon);
drawSol(crayon);
drawObstacleBis(crayon,test,"plateforme.png"); // A changer
//drawObstacleBis(crayon,test,"plateforme.png"); // A changer
drawLifePoints(crayon);
drawMonsters(crayon);
drawKunais(crayon);
......
......@@ -2,6 +2,8 @@ package map;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
import environnement.Coordonnees;
import environnement.HitBox;
......@@ -16,8 +18,7 @@ public class LevelManager {
private BufferedImage[] levelSprite;
private Level levelOne;
public LevelManager(Painter painter) {
this.painter = painter;
public LevelManager() {
importOutsideSprites();
levelOne = new Level(LoadSave.GetLevelData());
}
......@@ -32,16 +33,18 @@ public class LevelManager {
}
}
public void draw() {
public List<Obstacle> generateObstacleTable() {
List<Obstacle> liste = new ArrayList<>();
for (int j = 0; j < Jeu.TILES_IN_HEIGHT; j++)
for (int i = 0; i < Jeu.TILES_IN_WIDTH; i++) {
int index = levelOne.getSpriteIndex(i, j);
/*g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null);*/
//g.drawImage(levelSprite[index], Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j, Jeu.TILES_SIZE, Jeu.TILES_SIZE, null);
if (index<=14) {
Jeu.obstacleTable.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j), Jeu.TILES_SIZE, Jeu.TILES_SIZE)));
System.out.println(jeu.getObstacleTable().size());
liste.add(new Obstacle(new HitBox(new Coordonnees(Jeu.TILES_SIZE * i, Jeu.TILES_SIZE * j-300), Jeu.TILES_SIZE, Jeu.TILES_SIZE)));
System.out.println(liste.size());
}
}
return liste;
}
public void update() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment