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

animations d'attaque faites, y'a encore des trucs a retoucher surement mais actuellement ca marche

LM
parent 4cc33e53
No related branches found
No related tags found
No related merge requests found
......@@ -123,5 +123,8 @@ public class Character extends Entity{
public double getEntityHEIGHT() {
return this.characterHEIGHT;
}
public int getAlpha() {
return alpha;
}
}
......@@ -8,6 +8,7 @@ import java.util.HashMap;
public class Controller implements GameController{
private boolean isRightPressed, isLeftPressed, isSpacePressed;
private boolean isLeftCLickPressed;
private HashMap<String,Boolean> cmd = new HashMap<String,Boolean>();
/*
* commande en cours
......@@ -18,7 +19,8 @@ public class Controller implements GameController{
*/
public Controller() {
isRightPressed = false; isLeftPressed = false; isSpacePressed = false;
isRightPressed = false; isLeftPressed = false; isSpacePressed = false; isLeftCLickPressed = false; // pour attaquer sur clique gauche
// pour l'instant faut appuyer sur Q mais c'est a changer
}
/**
* getCommand retourne une liste de booleans sous la forme [isRightPressed, isLeftPressed, isSpacePressed]
......@@ -28,6 +30,7 @@ public class Controller implements GameController{
cmd.put("Right",isRightPressed);
cmd.put("Left",isLeftPressed);
cmd.put("Jump",isSpacePressed);
cmd.put("Attack",isLeftCLickPressed);
return cmd;
}
@Override
......@@ -39,6 +42,7 @@ public class Controller implements GameController{
case KeyEvent.VK_RIGHT -> isRightPressed = true;
case KeyEvent.VK_LEFT -> isLeftPressed = true;
case KeyEvent.VK_SPACE -> isSpacePressed = true;
case KeyEvent.VK_Q -> isLeftCLickPressed = true;
}
}
@Override
......@@ -47,6 +51,7 @@ public class Controller implements GameController{
case KeyEvent.VK_RIGHT -> isRightPressed = false;
case KeyEvent.VK_LEFT -> isLeftPressed = false;
case KeyEvent.VK_SPACE -> isSpacePressed = false;
case KeyEvent.VK_Q -> isLeftCLickPressed = false;
}
}
@Override
......
......@@ -4,7 +4,9 @@ import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import entity.Character;
......@@ -22,9 +24,12 @@ public class Jeu implements Game{
String characterSkinPath; // jsp si c'est le jeu qui doit gerer ca, au pire vous pouvez changer
final String beginPath;
String movement;
String previousMovement;
int numberOfMovement;
int nbIterationPerFrame = 100;
int nbIterationPerFrame = 50;
int nbBeforeFramechgt = nbIterationPerFrame;
//private boolean characterNotMoving = true;
private boolean characterAttacking = false; //boolean necessaire pour rendre l'animation d'attaque prioritaire
public Jeu(String source) {
......@@ -35,6 +40,7 @@ public class Jeu implements Game{
assert url != null;
beginPath = url.toString().substring(6)+"/";
movement = "Character_idle";
previousMovement = movement;
numberOfMovement = 1;
characterSkinPath = beginPath + movement + numberOfMovement + ".png"; // path premiere frame
/*A = new ArrayList<Double>();
......@@ -52,58 +58,83 @@ public class Jeu implements Game{
System.out.println("Help not available");
}
//on remplit la table de directions du jeu
directionJeu = new HashMap<>();
directionJeu.put("Right", false);
directionJeu.put("Left", false);
directionJeu.put("Jump", false);
directionJeu.put("Attack",false);
//on remplit la map des frames
Map<String,List<String>> tempMap = gameCharacterLoader.getPathTable();
tempMap.put(movement,new ArrayList<String>());
tempMap.get(movement).add("1");
tempMap.get(movement).add("2");
tempMap.put("Character_attack",new ArrayList<String>());
tempMap.get("Character_attack").add("1");
tempMap.get("Character_attack").add("2");
tempMap.get("Character_attack").add("3");
gameCharacterLoader.setPathTable(tempMap);
}
@Override
public void evolve(HashMap<String,Boolean> command) { // command est sous la forme list de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list.
/*System.out.println("Execute "+command);
System.out.println(gameCharacter.getCoord().getX());
System.out.println(gameCharacter.getCoord().getZ());*/
/*double comX,comZ;
int a = 1;
comX = 0;
comZ = 0;*/
public void evolve(HashMap<String,Boolean> command) { // command est sous la forme map de Boolean qui represente les touches préssées. Voir Controller pour la compositions de cet list.
previousMovement = movement;
directionJeu.replace("Right", command.get("Right"));
directionJeu.replace("Left", command.get("Left"));
directionJeu.replace("Jump", command.get("Jump"));
/*Boolean Right = command.get("Right");
directionJeu.replace("Attack",command.get("Attack"));
Boolean Right = command.get("Right");
boolean Left = command.get("Left");
boolean Jump = command.get("Jump");
boolean Attack = command.get("Attack");
if (Right && Left){}
else if (Right) {
comX = gameCharacter.getVitesseMax();
}
else if (Left) {
comX = -gameCharacter.getVitesseMax();
//perso evolue dans le jeu
gameCharacter.evolveCharacter();
//animation du perso dans le jeu (definir la bonne frame a tel instant)
if (Attack) {
movement = "Character_attack";
characterAttacking = true;
}
if (Jump) {
if (gameCharacter.getCoord().getZ() < coordSol.getZ())a = 0;
else if (gameCharacter.getVitesseActuZ() == 0){comZ = gameCharacter.getImpulsionSaut();/*A.add(gameCharacter.getCoord().getZ());n++;/}
if (!Right && !Left && (gameCharacter.getAlpha() == 1) && !characterAttacking){
movement = "Character_idle";
}
else {
if (gameCharacter.getCoord().getZ() < coordSol.getZ()) { //a retoucher, j'ai besoin d'autres choses pour avancer
a = 0;
}
else{
a = 1;
//characterNotMoving = false;
else{ // squelette pour futures implementations
if (!characterAttacking){ //animation d'attaque prioritaire
movement = "Character_idle"; //ca changera quand j'aurai les nouvelles frames
}
}
}*/
gameCharacter.evolveCharacter();
//si on a change de mouvement, le jeu doit redemarrer a la premiere frame correspondante
if (previousMovement != movement){numberOfMovement = 1;nbBeforeFramechgt = nbIterationPerFrame;}
if (numberOfMovement == gameCharacterLoader.getPathTable().get(movement).size()){
//characterNotMoving = true;
if (movement == "Character_attack"){
characterAttacking = false;
}
}
if ((nbIterationPerFrame-nbBeforeFramechgt) == nbIterationPerFrame) { // timer pour changer de frame
numberOfMovement = numberOfMovement%2 + 1;
numberOfMovement = numberOfMovement%gameCharacterLoader.getPathTable().get(movement).size() + 1; //a revoir
nbBeforeFramechgt = nbIterationPerFrame;
}
else nbBeforeFramechgt--;
//actualisation de l'image a afficher
characterSkinPath = beginPath + movement + numberOfMovement + ".png";
gameCharacterLoader.setSkinPath(characterSkinPath);
gameCharacterLoader.refreshImage();
......
......@@ -2,6 +2,10 @@ package loaders;
import entity.Character;
import java.awt.Image;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import javax.swing.ImageIcon;
public class CharacterLoader { // classe qui cree le perso
......@@ -9,11 +13,14 @@ public class CharacterLoader { // classe qui cree le perso
private String skinPath; // chemin du skin a l'instant t du jeu
//private String nameImageOfSkin; // nom de l'image du skin (le truc fonctionne comme ca)
private Image imageCharacter;
private Map<String,List<String>> pathTable; // objet utilise a revoir
public CharacterLoader(String path,Character charac){
gameCharacter = charac;
skinPath = path;
imageCharacter = new ImageIcon(path).getImage();
pathTable = new HashMap<String,List<String>>();
}
public void refreshImage(){
......@@ -37,5 +44,13 @@ public class CharacterLoader { // classe qui cree le perso
this.skinPath = skinPath;
}
public Map<String, List<String>> getPathTable() {
return pathTable;
}
public void setPathTable(Map<String, List<String>> pathTable) {
this.pathTable = pathTable;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment