Implementation du menu + gestion d'une direction : "Action"

This commit is contained in:
Amaury Joly
2020-12-05 16:42:13 +01:00
parent 98e467e8ab
commit 3ea09a6d32
4 changed files with 134 additions and 30 deletions

View File

@@ -10,5 +10,5 @@ package modele.calculs;
*
*/
public enum Direction {
haut, bas, gauche, droite
haut, bas, gauche, droite, action
}

View File

@@ -11,8 +11,9 @@ import modele.calculs.Gravite;
import modele.calculs.IO.LecteurFichier;
import modele.calculs.Ordonnanceur;
import modele.donnees.*;
import modele.donnees.Menu;
import java.awt.Point;
import java.awt.*;
import java.util.HashMap;
/** Actuellement, cette classe gère les postions
@@ -35,8 +36,17 @@ public class Jeu {
private Ordonnanceur ordonnanceur = new Ordonnanceur(this);
// Etat du jeu courant. 0 = ecran titre, 2 = Menu choix, 4 = Plateau Jeu (les valeurs entre sont les valeurs de transitions)
private int state = 0;
public synchronized int getState() {
int retour = state;
if (state % 2 == 1) state ++;
return retour;
}
public Jeu() {
initialisationDesEntites();
startTitleScreen();
}
public void resetCmptDepl() {
@@ -55,12 +65,23 @@ public class Jeu {
public Heros getHector() {
return hector;
}
// PARTIE INITIALISATIONS
private void initialisationDesEntites() {
this.state = 3;
LecteurFichier.loadMap("Map/test.gyro", this);
System.out.println("Map loaded");
}
public void startTitleScreen() {
this.state = 0;
MenuInput.getInstance().addEntiteDynamique(new Menu(this));
ordonnanceur.add(MenuInput.getInstance());
}
// PARTIE MANIPULATIONS ENTITE
public void addEntite(ObjetGyromide e, int x, int y) {
if(e instanceof ElementFond)
grilleEntites[x][y][1] = e;
@@ -198,4 +219,16 @@ public class Jeu {
public Ordonnanceur getOrdonnanceur() {
return ordonnanceur;
}
// PARTIE MANIPULATION MENU
public synchronized boolean updateMenu(Direction d) {
System.out.println("Mis a jour du menu");
switch (getState()) {
case 0:
if (d == Direction.action)
initialisationDesEntites();
break;
}
return true;
}
}

View File

@@ -8,9 +8,15 @@ import static java.lang.Thread.*;
public class Ordonnanceur extends Observable implements Runnable {
private Jeu jeu;
private ArrayList<RealisateurDeDeplacement> lstDeplacements = new ArrayList<RealisateurDeDeplacement>();
private ArrayList<RealisateurDeDeplacement> buffer_lstDeplacements = new ArrayList<RealisateurDeDeplacement>();
private long pause;
public void add(RealisateurDeDeplacement deplacement) {
lstDeplacements.add(deplacement);
buffer_lstDeplacements.add(deplacement);
}
private void addBuffer() {
for (RealisateurDeDeplacement r : buffer_lstDeplacements)
lstDeplacements.add(r);
buffer_lstDeplacements.clear();
}
public Ordonnanceur(Jeu _jeu) {
@@ -30,19 +36,34 @@ public class Ordonnanceur extends Observable implements Runnable {
notifyObservers();
while(true) {
jeu.resetCmptDepl();
for (RealisateurDeDeplacement d : lstDeplacements) {
if (d.realiserDeplacement())
update = true;
}
switch (jeu.getState()) {
case 0:
for (RealisateurDeDeplacement d : lstDeplacements) {
if (d.realiserDeplacement())
update = true;
}
Controle4Directions.getInstance().resetDirection();
MenuInput.getInstance().resetDirection();
break;
case 3:
case 4:
jeu.resetCmptDepl();
for (RealisateurDeDeplacement d : lstDeplacements) {
if (d.realiserDeplacement())
update = true;
}
Controle4Directions.getInstance().resetDirection();
break;
}
if (update) {
setChanged();
notifyObservers();
}
addBuffer();
try {
sleep(pause);
} catch (InterruptedException e) {