Skip to content

Commit

Permalink
popover settings; colors improved
Browse files Browse the repository at this point in the history
  • Loading branch information
Nelgamix committed May 12, 2017
1 parent addab76 commit 7a9b1a1
Show file tree
Hide file tree
Showing 11 changed files with 179 additions and 39 deletions.
10 changes: 2 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
# ProjetDiaballik
## To do
Par ordre de priorité:
* Système de sauvegarde: géré en interne plutôt que
faire manipuler les fichiers à l'utilisateur (charger fait, voir pour
la sauvegarde)
* IA (aléatoire, minimax)
* Améliorer visuel et IHM de la partie jeu (couleurs, effets, anims, images pions)
* (Jeu en réseau) ?
voir TODO.md

Voir TODO.md
## Images
## Images (pas à jour)
IHM réalisées par Loïc Houdebine (voir lien dans la dernière section)
### Menu
![Menu](screenshots/menu.png)
Expand Down
8 changes: 5 additions & 3 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# Priorité 1
* Réseau
* IA
* Améliorer popup charger partie
* Changer la popup paramètres en popover
* Popup des règles

# Prorité 2
* Terrains alternatifs
* Animations

# Priorité 3 (idées amélioration)
* Changer curseur
* Sons
* Proposer le meilleur coup au joueur
* Sélection dans l'historique
5 changes: 4 additions & 1 deletion src/main/java/diaballik/Diaballik.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class Diaballik extends Application {
private final static String CSS_MENU = DOSSIER_CSS + "/DiaballikMenu.css";
private final static String CSS_JEU = DOSSIER_CSS + "/DiaballikJeu.css";
public final static String CSS_DIALOG = DOSSIER_CSS + "/DiaballikDialogs.css";
public final static String CSS_POPOVER = DOSSIER_CSS + "/DiaballikPopover.css";

public final static String NOM_JEU = "Diaballik";

Expand Down Expand Up @@ -93,6 +94,8 @@ private void initSceneJeu(ConfigurationPartie cp) {
root.setRight(actionsControleur.getActionsVue());
root.setTop(affichageControleur.getAffichageVue());

BorderPane.setMargin(terrainControleur.getTerrainVue(), new Insets(10));

sceneJeu = new Scene(root, CaseVue.LARGEUR * Terrain.LARGEUR + 225, CaseVue.HAUTEUR * Terrain.HAUTEUR + 75);
sceneJeu.setOnKeyPressed(k -> {
if (ctrlS.match(k)) {
Expand Down Expand Up @@ -152,7 +155,7 @@ public void start(Stage primaryStage) throws Exception {
initSceneMenu();

stage.setTitle(NOM_JEU);
stage.setResizable(false);
//stage.setResizable(false);
stage.setScene(sceneMenu);
stage.show();
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/diaballik/controleur/ActionsControleur.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public void actionAntijeu() {
}

public void actionParametres() {
Dialogs.montrerParametres(jeu.cp);
actionsVue.montrerPopupParametres();
}

public void actionDefaire() {
Expand Down
126 changes: 107 additions & 19 deletions src/main/java/diaballik/vue/ActionsVue.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package diaballik.vue;

import diaballik.Diaballik;
import diaballik.Utils;
import diaballik.controleur.ActionsControleur;
import diaballik.model.ConfigurationPartie;
import diaballik.model.Jeu;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.Control;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.Parent;
import javafx.scene.control.*;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
Expand Down Expand Up @@ -40,10 +40,13 @@ public class ActionsVue extends BorderPane implements Observer {
private final Button refaire;

private final Button sauvegarde;
private final Button parametres;

private PopOver p;
private PopOver popOverSauvegarde;
private boolean saveExists = false;

private PopOver popOverParametres;

private final ValidationSupport validationSupport = new ValidationSupport();

private ValidationResult checkFileExists(Control control, String filename) {
Expand All @@ -52,11 +55,11 @@ private ValidationResult checkFileExists(Control control, String filename) {
}

private PopOver getSauvegarderPopover() {
if (p != null) return p;
if (popOverSauvegarde != null) return popOverSauvegarde;

p = new PopOver();
p.setDetachable(false);
p.setArrowLocation(PopOver.ArrowLocation.TOP_CENTER);
popOverSauvegarde = new PopOver();
popOverSauvegarde.setDetachable(false);
popOverSauvegarde.setArrowLocation(PopOver.ArrowLocation.TOP_CENTER);

BorderPane contentSave = new BorderPane();
BorderPane contentValider = new BorderPane();
Expand All @@ -79,17 +82,17 @@ private PopOver getSauvegarderPopover() {
// Utils
Timeline t = new Timeline(new KeyFrame(
Duration.seconds(2),
e -> p.setContentNode(contentSave)
e -> popOverSauvegarde.setContentNode(contentSave)
));

Supplier<Void> sp = () -> {
if (saveExists) {
contentValiderLabel.setText("Le fichier de sauvegarde " + chemin.getText() + ".txt existe déjà.\n" +
"Voulez-vous le remplacer?");
p.setContentNode(contentValider);
popOverSauvegarde.setContentNode(contentValider);
} else {
actionsControleur.actionSauvegarderJeu(chemin.getText());
p.setContentNode(contentFin);
popOverSauvegarde.setContentNode(contentFin);
t.play();
}

Expand All @@ -108,20 +111,20 @@ private PopOver getSauvegarderPopover() {
BorderPane.setAlignment(valider, Pos.CENTER);
valider.setOnAction(e -> sp.get());

contentSave.setPadding(new Insets(5));
contentSave.setTop(new Label("Nom de la sauvegarde :"));
contentSave.setPadding(new Insets(10));
contentSave.setTop(new Label("Nom de la sauvegarde"));
contentSave.setCenter(chemin);
contentSave.setBottom(valider);

BorderPane.setAlignment(contentValiderLabel, Pos.CENTER);

choixValider.setOnAction(e -> {
actionsControleur.actionSauvegarderJeu(chemin.getText());
p.setContentNode(contentFin);
popOverSauvegarde.setContentNode(contentFin);
t.play();
});

choixAnnuler.setOnAction(e -> p.setContentNode(contentSave));
choixAnnuler.setOnAction(e -> popOverSauvegarde.setContentNode(contentSave));

boutonsChoix.getChildren().addAll(choixAnnuler, choixValider);
boutonsChoix.setAlignment(Pos.CENTER);
Expand All @@ -136,9 +139,86 @@ private PopOver getSauvegarderPopover() {
contentFin.setPadding(new Insets(10));
contentFin.setCenter(contentFinLabel);

p.setContentNode(contentSave);
popOverSauvegarde.setContentNode(contentSave);

return popOverSauvegarde;
}

private PopOver getParametresPopover() {
if (popOverParametres != null) return popOverParametres;

final ConfigurationPartie cp = actionsControleur.getJeu().cp;

popOverParametres = new PopOver();
popOverParametres.setDetachable(false);
popOverParametres.setArrowLocation(PopOver.ArrowLocation.BOTTOM_CENTER);

BorderPane content = new BorderPane();
content.setPadding(new Insets(15));

GridPane grid = new GridPane();
grid.setPrefWidth(300);
grid.setHgap(10);
grid.setVgap(10);
ColumnConstraints cc1 = new ColumnConstraints();
cc1.setPercentWidth(85);
ColumnConstraints cc2 = new ColumnConstraints();
cc2.setPercentWidth(15);
grid.getColumnConstraints().addAll(cc1, cc2);

CheckBox parametre1 = new CheckBox();
parametre1.setSelected(cp.isAideDeplacement());

CheckBox parametre2 = new CheckBox();
parametre2.setSelected(cp.isAidePasse());

CheckBox parametre3 = new CheckBox();
parametre3.setSelected(cp.isAutoSelectionPion());

Label labelParametre1 = new Label("Aide au déplacement des pions");
labelParametre1.setMaxWidth(Double.MAX_VALUE);
Label labelParametre2 = new Label("Aide aux passes");
Label labelParametre3 = new Label("Auto sélectionner le meme pion\nsi déplacement restant");

return p;
grid.add(labelParametre1, 0, 0);
grid.add(parametre1, 1, 0);
grid.add(labelParametre2, 0, 1);
grid.add(parametre2, 1, 1);
grid.add(labelParametre3, 0, 2);
grid.add(parametre3, 1, 2);

content.setCenter(grid);

Button valider = new Button("Valider");
Button annuler = new Button("Annuler");
annuler.setOnAction(e -> {
popOverParametres.hide();

parametre1.setSelected(cp.isAideDeplacement());
parametre2.setSelected(cp.isAidePasse());
parametre3.setSelected(cp.isAutoSelectionPion());
});
valider.setOnAction(e -> {
cp.setAideDeplacement(parametre1.isSelected());
cp.setAidePasse(parametre2.isSelected());
cp.setAutoSelectionPion(parametre3.isSelected());

cp.writeProperties();

popOverParametres.hide();
});

HBox buttonBar = new HBox(10);
buttonBar.setPadding(new Insets(10, 0, 0, 0));
buttonBar.getChildren().addAll(valider, annuler);
buttonBar.setAlignment(Pos.CENTER);
BorderPane.setAlignment(buttonBar, Pos.CENTER);

content.setBottom(buttonBar);

popOverParametres.setContentNode(content);

return popOverParametres;
}

public ActionsVue(ActionsControleur actionsControleur) {
Expand Down Expand Up @@ -228,7 +308,7 @@ public ActionsVue(ActionsControleur actionsControleur) {

Glyph roue = new Glyph("FontAwesome", FontAwesome.Glyph.COG);
roue.setFontSize(22f);
Button parametres = new Button("", roue);
parametres = new Button("", roue);
parametres.setOnAction(e -> actionsControleur.actionParametres());
parametres.setMaxWidth(Double.MAX_VALUE);
gpActions.add(parametres, 0, 4);
Expand All @@ -246,6 +326,14 @@ public ActionsVue(ActionsControleur actionsControleur) {

public void montrerPopupSauvegarde() {
getSauvegarderPopover().show(sauvegarde);
((Parent)popOverSauvegarde.getSkin().getNode()).getStylesheets()
.add(getClass().getResource(Diaballik.CSS_POPOVER).toExternalForm());
}

public void montrerPopupParametres() {
getParametresPopover().show(parametres);
((Parent)popOverParametres.getSkin().getNode()).getStylesheets()
.add(getClass().getResource(Diaballik.CSS_POPOVER).toExternalForm());
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/diaballik/vue/CaseVue.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public CaseVue(TerrainVue terrainVue, Case c) {
Point point = c.getPoint();
pair = Math.abs(point.getX() - point.getY()) % 2 == 0;

this.setMinSize(LARGEUR, HAUTEUR);
this.setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE);

this.setOnMouseClicked(e -> terrainVue.getTerrainControleur().clicSouris(this));
this.setOnMouseEntered(e -> survoler(true));
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/diaballik/vue/Dialogs.java
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,8 @@ private Optional<String> getDialogChoisirFichier(String directory) {
if (e.getClickCount() == 2) {
dialog.close();
}

});
filesView.getSelectionModel().selectedItemProperty().addListener(e -> {
if (filesView.getSelectionModel().getSelectedItem() != null)
boutonJouer.setDisable(false);

Expand Down
8 changes: 6 additions & 2 deletions src/main/java/diaballik/vue/PionVue.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public class PionVue extends Circle implements Observer {
this.terrainVue = terrainVue;
pion.addObserver(this);

caseVue.heightProperty().addListener((o, ov, nv) -> this.setRadius((pion.aLaBalle() ? 1.5 : 1) * (nv.doubleValue() / 4)));

this.transitionDeplacement = new TranslateTransition(Duration.millis(200), this);
this.transitionDeplacement.setAutoReverse(false);

Expand Down Expand Up @@ -119,9 +121,11 @@ private void updateStyleClass() {
this.getStyleClass().clear();

if (!actif) {
this.getStyleClass().add("couleurAdversaire");
this.getStyleClass().add(pion.getCouleur() == Joueur.JOUEUR_VERT ? "couleurJoueurVertInactif" : "couleurJoueurRougeInactif");
//this.getStyleClass().add("couleurAdversaire");
} else if (survol) {
this.getStyleClass().add("couleurSurvol");
this.getStyleClass().add(pion.getCouleur() == Joueur.JOUEUR_VERT ? "couleurJoueurVertSurvol" : "couleurJoueurRougeSurvol");
//this.getStyleClass().add("couleurSurvol");
} else if (isSelectionne()) {
this.getStyleClass().add("couleurSelection");
} else if (isMarque() && terrainVue.getTerrainControleur().getJeu().cp.isAidePasse()) {
Expand Down
25 changes: 22 additions & 3 deletions src/main/java/diaballik/vue/TerrainVue.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import diaballik.model.Joueur;
import diaballik.model.Point;
import diaballik.model.Terrain;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.RowConstraints;

import java.util.Observable;
import java.util.Observer;
Expand All @@ -26,15 +28,32 @@ public TerrainVue(TerrainControleur terrainControleur) {
terrainControleur.getJeu().addObserver(this);
this.setId("terrainView");

this.setMaxSize(CaseVue.LARGEUR * Terrain.LARGEUR, CaseVue.HAUTEUR * Terrain.HAUTEUR);

this.cases = new CaseVue[Terrain.HAUTEUR][Terrain.LARGEUR];
this.pions = new PionVue[Jeu.NOMBRE_JOUEURS][Joueur.NOMBRE_PIONS];

ColumnConstraints cc[] = new ColumnConstraints[Terrain.LARGEUR];
RowConstraints rc[] = new RowConstraints[Terrain.HAUTEUR];

ColumnConstraints c;
for (int i = 0; i < Terrain.LARGEUR; i++) {
c = new ColumnConstraints();
c.setPercentWidth(100*((double)1/Terrain.LARGEUR));
cc[i] = c;
}

RowConstraints r;
for (int i = 0; i < Terrain.HAUTEUR; i++) {
r = new RowConstraints();
r.setPercentHeight(100*((double)1/Terrain.HAUTEUR));
rc[i] = r;
}

this.getColumnConstraints().addAll(cc);
this.getRowConstraints().addAll(rc);

for (int i = 0; i < Terrain.HAUTEUR; i++) {
for (int j = 0; j < Terrain.LARGEUR; j++) {
CaseVue cv = new CaseVue(this, terrain.getCaseSur(new Point(j, i)));

this.cases[i][j] = cv;
this.add(cv, j, i);
}
Expand Down
Loading

0 comments on commit 7a9b1a1

Please sign in to comment.