Skip to content
Snippets Groups Projects
Commit 3d13bea7 authored by Louis's avatar Louis
Browse files

perso qui attaque a distance implemente LM

parent d403849e
Branches
No related tags found
No related merge requests found
-Avoir des collisions fonctionnelles -Avoir des collisions fonctionnelles +
-Création des monstres -Création des monstres +
-Création des coffres et des clés -Création des coffres et des clés
-Création des vies -Création des vies +
-Création de la caméra -Création de la caméra +
-Création du niveau -Création du niveau
-Implémenter une musique -Implémenter une musique +
......
...@@ -208,4 +208,10 @@ public class Character extends Entity{ ...@@ -208,4 +208,10 @@ public class Character extends Entity{
public Boolean death(){ public Boolean death(){
return nbLifePoints == 0; return nbLifePoints == 0;
} }
public Map<String, Double> getTableCommande() {
return tableCommande;
}
} }
package entity;
import java.util.List;
import environnement.Coordonnees;
import environnement.HitBox;
import static jeu.Jeu.getMonsterList;
public class Kunai {
private final int direction; //1 si vers la droite, -1 si vers la gauche
private final int damage;
private final double vitesse = 5;
private HitBox hitBox;
private Coordonnees coord;
private final Coordonnees coordInit; //coordonnees initiales
private boolean disappear = false; //variable disant si le kunai doit disparaitre ou non
private static final int sideLength = 16;
public Kunai(int dir,int dmg,Coordonnees c){
coord = c;
coordInit = coord;
damage = dmg;
direction = dir;
hitBox = new HitBox(coord,sideLength,sideLength);
}
public void deplacement(){ //deplacement du kunai
double newX = coord.getX() + direction*vitesse;
this.coord = new Coordonnees(newX, this.coord.getZ());
}
public void updateHitBox(){ //on update la hitbox du kunai
hitBox = new HitBox(coord,sideLength,sideLength);
}
public void dealsDamage(Entity entity){
if (HitBox.collision(hitBox, entity.getHitBox())){
if (entity.nbFramesInvincible == 0){
entity.setNbLifePoints(Math.max(entity.getNbLifePoints()-damage,0));
entity.nbFramesInvincible = entity.nbMaxFramesInvicible;//l'entity devient invincible qq frames
}
disappear = true; //disparait apres choc avec un monstre
}
}
private void evolveKunai(){
deplacement();
updateHitBox();
for (Monster monster : getMonsterList()){
dealsDamage(monster);
if (disappear)break; //si le kunai a disparu on arrete de regarder les autres monstres
}
if (Math.abs(coordInit.getX()-coord.getX()) >= 500) disappear = true; //au bout d'une certaine distance parcourue, il disparait
}
public static void evolveAllKunais(List<Kunai> liste){
for (Kunai kunai : liste){
kunai.evolveKunai();
}
int k = 0;
while (k < liste.size()){
if (liste.get(k).disappear) liste.remove(liste.get(k));
else k++;
}
}
public Coordonnees getCoord() {
return coord;
}
public HitBox getHitBox() {
return hitBox;
}
public static int getSideLength() {
return sideLength;
}
}
package entity;
import java.util.List;
import environnement.Coordonnees;
import jeu.Jeu;
public class ShootingCharacter extends Character{
private int hasAttacked = 0; //varialbe disant si il a deja attaque, il ne peut attaque que toutes les deux frames, ainsi il ne peut attaquer que si = 0
public ShootingCharacter(Coordonnees c, double vitesseMax, double m, double impSaut){
super(c, vitesseMax, m, impSaut);
}
public void attaque(){
if (this.getTableCommande().get("CommandAttack") != 0 && hasAttacked == 0){ //on ajoute un kunai dans la liste
List<Kunai> temp = Jeu.getKunaiList();
Coordonnees coordKunai = new Coordonnees(coord.getX()+direction*Kunai.getSideLength()/2+direction*this.getEntityWIDTH()/2, coord.getZ());
temp.add(new Kunai(direction, attackStat, coordKunai));
Jeu.setKunaiList(temp);
hasAttacked++;
}
}
public void evolveCharacter(){
super.evolveCharacter();
if (hasAttacked > 0){
hasAttacked++;
if (hasAttacked > 50)hasAttacked = 0;
}
}
}
...@@ -10,7 +10,9 @@ import java.util.List; ...@@ -10,7 +10,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import entity.Character; import entity.Character;
import entity.Kunai;
import entity.Monster; import entity.Monster;
import entity.ShootingCharacter;
import engine.Game; import engine.Game;
import environnement.Coordonnees; import environnement.Coordonnees;
import environnement.HitBox; import environnement.HitBox;
...@@ -58,6 +60,7 @@ public class Jeu implements Game{ ...@@ -58,6 +60,7 @@ public class Jeu implements Game{
private static List<Obstacle> obstacleTable = new ArrayList<>(); private static List<Obstacle> obstacleTable = new ArrayList<>();
private static List<Monster> monsterList = new ArrayList<>(); private static List<Monster> monsterList = new ArrayList<>();
private static List<Kunai> kunaiList = new ArrayList<>();
//private static List<Coffre> coffreTable = new ArrayList<>(); //private static List<Coffre> coffreTable = new ArrayList<>();
...@@ -111,8 +114,8 @@ public class Jeu implements Game{ ...@@ -111,8 +114,8 @@ public class Jeu implements Game{
monsterList.add(new Monster(new Coordonnees(300, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5)); monsterList.add(new Monster(new Coordonnees(300, sol.getHitbox().getExtremites().get("HautGauche").getZ()-500), 1000, 30, 60, 1,5));
//on charge le perso (a la fin du constructeur, cest important par rapport a obstacleTable, sinon y'a des pbs de "causalite") //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), 1500, 1,600000)); gameCharacterLoader = new CharacterLoader(characterSkinPath,new ShootingCharacter(new Coordonnees(300, 300), 1500, 1,600000));
gameCharacter = new Character(new Coordonnees(xdebut, zdebut), 1500, 1,600000); gameCharacter = new ShootingCharacter(new Coordonnees(xdebut, zdebut), 1500, 1,600000);
//on remplit la map des frames //on remplit la map des frames
Map<String,Integer> tempMap = gameCharacterLoader.getPathTable(); Map<String,Integer> tempMap = gameCharacterLoader.getPathTable();
...@@ -149,6 +152,8 @@ public class Jeu implements Game{ ...@@ -149,6 +152,8 @@ public class Jeu implements Game{
gameCharacter.evolveCharacter(); gameCharacter.evolveCharacter();
//monstres evoluent dans le jeu //monstres evoluent dans le jeu
Monster.evolveAllMonsters(monsterList); Monster.evolveAllMonsters(monsterList);
//kunais evoluent dans le jeu
Kunai.evolveAllKunais(kunaiList);
//animation du perso dans le jeu (definir la bonne frame a cet instant) //animation du perso dans le jeu (definir la bonne frame a cet instant)
animation(Attack, Right, Left); animation(Attack, Right, Left);
...@@ -231,6 +236,14 @@ public class Jeu implements Game{ ...@@ -231,6 +236,14 @@ public class Jeu implements Game{
return monsterList; return monsterList;
} }
public static List<Kunai> getKunaiList() {
return kunaiList;
}
public static void setKunaiList(List<Kunai> kunaiList) {
Jeu.kunaiList = kunaiList;
}
} }
\ No newline at end of file
package jeu; package jeu;
import engine.GamePainter; import engine.GamePainter;
import entity.Kunai;
import entity.Monster; import entity.Monster;
import environnement.Coordonnees; import environnement.Coordonnees;
import environnement.HitBox; import environnement.HitBox;
...@@ -49,6 +50,7 @@ public class Painter implements GamePainter{ ...@@ -49,6 +50,7 @@ public class Painter implements GamePainter{
drawObstacleBis(crayon,test,"plateforme.png"); // A changer drawObstacleBis(crayon,test,"plateforme.png"); // A changer
drawLifePoints(crayon); drawLifePoints(crayon);
drawMonsters(crayon); drawMonsters(crayon);
drawKunais(crayon);
} }
...@@ -170,6 +172,20 @@ public class Painter implements GamePainter{ ...@@ -170,6 +172,20 @@ public class Painter implements GamePainter{
} }
} }
private void drawKunais(Graphics2D crayon){
int x;
int z;
crayon.setColor(Color.blue);
for (Kunai kunai : getKunaiList()){
crayon.setColor(Color.blue);
x = (int)kunai.getCoord().getX();
z = (int)kunai.getCoord().getZ();
if (HitBox.collision(gameCharacter.getHitBox(),kunai.getHitBox()))crayon.setColor(Color.red);
crayon.fillRect(x-Kunai.getSideLength()/2 - xCam, z-Kunai.getSideLength()/2 - zCam, Kunai.getSideLength(), Kunai.getSideLength());
}
}
@Override @Override
public int getWidth() { public int getWidth() {
return WIDTH; return WIDTH;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment