Amélioration #1
This commit is contained in:
@@ -2,6 +2,7 @@ package fr.monkhanny.dorfromantik;
|
|||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import javax.swing.JFrame;
|
||||||
import fr.monkhanny.dorfromantik.gui.MainMenu;
|
import fr.monkhanny.dorfromantik.gui.MainMenu;
|
||||||
|
|
||||||
public class Options {
|
public class Options {
|
||||||
@@ -46,6 +47,8 @@ public class Options {
|
|||||||
*/
|
*/
|
||||||
public static int MUSIC_VOLUME = 60;
|
public static int MUSIC_VOLUME = 60;
|
||||||
|
|
||||||
|
public static JFrame settingsFrame;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Volume des bruitages
|
* Volume des bruitages
|
||||||
*/
|
*/
|
||||||
|
@@ -4,24 +4,25 @@ import java.awt.event.ActionEvent;
|
|||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
|
|
||||||
import fr.monkhanny.dorfromantik.Main;
|
|
||||||
import fr.monkhanny.dorfromantik.Options;
|
import fr.monkhanny.dorfromantik.Options;
|
||||||
|
|
||||||
public class MainMenuButtonListener implements ActionListener {
|
public class MainMenuButtonListener implements ActionListener {
|
||||||
private JFrame gameFrame;
|
private JFrame gameFrame;
|
||||||
private Game game;
|
private Game game;
|
||||||
|
private EscapeMenu escapeMenu;
|
||||||
|
|
||||||
public MainMenuButtonListener(JFrame gameFrame, Game game) {
|
public MainMenuButtonListener(JFrame gameFrame, Game game, EscapeMenu escapeMenu) {
|
||||||
this.gameFrame = gameFrame;
|
this.gameFrame = gameFrame;
|
||||||
this.game = game;
|
this.game = game;
|
||||||
|
this.escapeMenu = escapeMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
// Réinitialiser le jeu
|
// Fermer la fenêtre de pause
|
||||||
//Main.resetGame();
|
if (escapeMenu != null) {
|
||||||
|
escapeMenu.setVisible(false);
|
||||||
// ou
|
}
|
||||||
|
|
||||||
// Fermer la fenêtre de jeu et revenir au menu principal
|
// Fermer la fenêtre de jeu et revenir au menu principal
|
||||||
gameFrame.setVisible(false);
|
gameFrame.setVisible(false);
|
||||||
|
@@ -10,27 +10,33 @@ public class PauseGame extends KeyAdapter {
|
|||||||
private JFrame gameFrame;
|
private JFrame gameFrame;
|
||||||
private Game game;
|
private Game game;
|
||||||
private EscapeMenu escapeMenu;
|
private EscapeMenu escapeMenu;
|
||||||
|
private ResumeButtonListener resumeButtonListener;
|
||||||
|
private MainMenuButtonListener mainMenuButtonListener;
|
||||||
|
private SettingsButtonListener settingsButtonListener;
|
||||||
|
|
||||||
public PauseGame(JFrame gameFrame, Game game) {
|
public PauseGame(JFrame gameFrame, Game game) {
|
||||||
this.gameFrame = gameFrame;
|
this.gameFrame = gameFrame;
|
||||||
this.game = game;
|
this.game = game;
|
||||||
|
this.resumeButtonListener = new ResumeButtonListener(gameFrame);
|
||||||
|
this.mainMenuButtonListener = null; // Initialisé après la création de escapeMenu
|
||||||
|
this.settingsButtonListener = new SettingsButtonListener(gameFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void keyPressed(KeyEvent e) {
|
public void keyPressed(KeyEvent e) {
|
||||||
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
|
if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
|
||||||
if (Options.isPaused == false) {
|
if (Options.isPaused == false) {
|
||||||
// Afficher le menu de pause seulement si aucun menu n'est déjà ouvert
|
|
||||||
Options.isPaused = true;
|
Options.isPaused = true;
|
||||||
if (escapeMenu == null || !escapeMenu.isVisible()) {
|
if (escapeMenu == null || !escapeMenu.isVisible()) {
|
||||||
escapeMenu = new EscapeMenu(gameFrame, game);
|
escapeMenu = new EscapeMenu(gameFrame, game);
|
||||||
escapeMenu.setResumeButtonListener(new ResumeButtonListener(gameFrame));
|
this.mainMenuButtonListener = new MainMenuButtonListener(gameFrame, game, escapeMenu);
|
||||||
escapeMenu.setMainMenuButtonListener(new MainMenuButtonListener(gameFrame, game));
|
escapeMenu.setResumeButtonListener(this.resumeButtonListener);
|
||||||
escapeMenu.setSettingsButtonListener(new SettingsButtonListener(gameFrame));
|
escapeMenu.setMainMenuButtonListener(this.mainMenuButtonListener);
|
||||||
|
escapeMenu.setSettingsButtonListener(this.settingsButtonListener);
|
||||||
} else {
|
} else {
|
||||||
escapeMenu.setVisible(true); // Si la fenêtre est déjà ouverte, la rendre visible
|
escapeMenu.setVisible(true);
|
||||||
}
|
}
|
||||||
escapeMenu.toFront(); // Mettre la fenêtre au premier plan
|
escapeMenu.toFront();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,18 +1,47 @@
|
|||||||
package fr.monkhanny.dorfromantik.game;
|
package fr.monkhanny.dorfromantik.game;
|
||||||
|
|
||||||
|
import fr.monkhanny.dorfromantik.Options;
|
||||||
|
import fr.monkhanny.dorfromantik.gui.SettingsPanel;
|
||||||
|
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.awt.event.WindowListener;
|
||||||
|
|
||||||
public class SettingsButtonListener implements ActionListener {
|
public class SettingsButtonListener implements ActionListener {
|
||||||
private JFrame gameFrame;
|
private JFrame gameFrame;
|
||||||
|
private JFrame settingsFrame;
|
||||||
|
private SettingsPanel settingsPanel;
|
||||||
|
|
||||||
public SettingsButtonListener(JFrame gameFrame) {
|
public SettingsButtonListener(JFrame gameFrame) {
|
||||||
this.gameFrame = gameFrame;
|
this.gameFrame = gameFrame;
|
||||||
|
this.settingsFrame = new JFrame("Paramètres - Dorfromantik");
|
||||||
|
this.settingsPanel = new SettingsPanel(Options.mainMenu, settingsFrame);
|
||||||
|
this.settingsPanel.setReturnButtonVisible(false); // On cache le bouton de retour au menu principal
|
||||||
|
|
||||||
|
// Ajouter le WindowListener pour réafficher la gameFrame lors de la fermeture de settingsFrame
|
||||||
|
this.settingsFrame.addWindowListener(new SettingsWindowListener(gameFrame));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
// Obtenir la taille et la position de la gameFrame
|
||||||
|
int width = gameFrame.getWidth();
|
||||||
|
int height = gameFrame.getHeight();
|
||||||
|
int x = gameFrame.getX();
|
||||||
|
int y = gameFrame.getY();
|
||||||
|
|
||||||
|
// Appliquer ces dimensions et position à settingsFrame
|
||||||
|
settingsFrame.setSize(width, height);
|
||||||
|
settingsFrame.setLocation(x, y);
|
||||||
|
|
||||||
|
// Ajouter le panneau des paramètres si ce n'est pas déjà fait
|
||||||
|
settingsFrame.add(this.settingsPanel);
|
||||||
|
|
||||||
|
// Cacher la gameFrame et afficher settingsFrame
|
||||||
|
gameFrame.setVisible(false);
|
||||||
|
settingsFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
|
||||||
|
settingsFrame.setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,49 @@
|
|||||||
|
package fr.monkhanny.dorfromantik.game;
|
||||||
|
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.awt.event.WindowListener;
|
||||||
|
|
||||||
|
public class SettingsWindowListener implements WindowListener {
|
||||||
|
private JFrame gameFrame;
|
||||||
|
|
||||||
|
public SettingsWindowListener(JFrame gameFrame) {
|
||||||
|
this.gameFrame = gameFrame;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowOpened(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
// Réafficher la gameFrame
|
||||||
|
gameFrame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowClosed(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowIconified(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowDeiconified(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowActivated(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void windowDeactivated(WindowEvent e) {
|
||||||
|
// Rien à faire ici
|
||||||
|
}
|
||||||
|
}
|
@@ -13,6 +13,7 @@ public class SettingsPanel extends JPanel {
|
|||||||
|
|
||||||
private MainMenu mainMenu;
|
private MainMenu mainMenu;
|
||||||
private JFrame settingsFrame;
|
private JFrame settingsFrame;
|
||||||
|
private JButton returnButton; // Déclarer le bouton pour pouvoir y accéder depuis d'autres méthodes
|
||||||
|
|
||||||
public SettingsPanel(MainMenu mainMenu, JFrame settingsFrame) {
|
public SettingsPanel(MainMenu mainMenu, JFrame settingsFrame) {
|
||||||
this.mainMenu = mainMenu;
|
this.mainMenu = mainMenu;
|
||||||
@@ -43,7 +44,7 @@ public class SettingsPanel extends JPanel {
|
|||||||
title.setHorizontalAlignment(JLabel.CENTER);
|
title.setHorizontalAlignment(JLabel.CENTER);
|
||||||
topPanel.add(title, BorderLayout.CENTER);
|
topPanel.add(title, BorderLayout.CENTER);
|
||||||
|
|
||||||
JButton returnButton = createReturnButtonWithIcon();
|
returnButton = createReturnButtonWithIcon(); // Initialiser le bouton ici
|
||||||
JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
JPanel leftPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
|
||||||
leftPanel.setOpaque(false);
|
leftPanel.setOpaque(false);
|
||||||
leftPanel.add(returnButton);
|
leftPanel.add(returnButton);
|
||||||
@@ -52,6 +53,13 @@ public class SettingsPanel extends JPanel {
|
|||||||
this.add(topPanel, BorderLayout.NORTH);
|
this.add(topPanel, BorderLayout.NORTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Méthode pour rendre le bouton de retour visible ou invisible
|
||||||
|
public void setReturnButtonVisible(boolean visible) {
|
||||||
|
if (returnButton != null) {
|
||||||
|
returnButton.setVisible(visible);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintComponent(Graphics g) {
|
protected void paintComponent(Graphics g) {
|
||||||
super.paintComponent(g);
|
super.paintComponent(g);
|
||||||
@@ -144,52 +152,52 @@ public class SettingsPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private JPanel createAutoFocusPanel() {
|
private JPanel createAutoFocusPanel() {
|
||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // Disposition verticale
|
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // Disposition verticale
|
||||||
panel.setOpaque(false); // Assurer que le fond est transparent
|
panel.setOpaque(false); // Assurer que le fond est transparent
|
||||||
|
|
||||||
// Titre de la section
|
// Titre de la section
|
||||||
JLabel titleLabel = new JLabel("Focus Automatique");
|
JLabel titleLabel = new JLabel("Focus Automatique");
|
||||||
titleLabel.setFont(new Font("Roboto", Font.PLAIN, 30));
|
titleLabel.setFont(new Font("Roboto", Font.PLAIN, 30));
|
||||||
titleLabel.setForeground(Color.WHITE);
|
titleLabel.setForeground(Color.WHITE);
|
||||||
titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); // Aligner le texte au centre
|
titleLabel.setAlignmentX(Component.CENTER_ALIGNMENT); // Aligner le texte au centre
|
||||||
panel.add(titleLabel);
|
panel.add(titleLabel);
|
||||||
panel.add(Box.createVerticalStrut(10)); // Espacement vertical
|
panel.add(Box.createVerticalStrut(10)); // Espacement vertical
|
||||||
|
|
||||||
// Panneau contenant texte et case à cocher sur la même ligne
|
// Panneau contenant texte et case à cocher sur la même ligne
|
||||||
JPanel checkBoxPanel = new JPanel();
|
JPanel checkBoxPanel = new JPanel();
|
||||||
checkBoxPanel.setLayout(new BoxLayout(checkBoxPanel, BoxLayout.X_AXIS)); // Disposition horizontale
|
checkBoxPanel.setLayout(new BoxLayout(checkBoxPanel, BoxLayout.X_AXIS)); // Disposition horizontale
|
||||||
checkBoxPanel.setOpaque(false); // Assurer que le fond est transparent
|
checkBoxPanel.setOpaque(false); // Assurer que le fond est transparent
|
||||||
|
|
||||||
// Texte explicatif avant la case à cocher
|
// Texte explicatif avant la case à cocher
|
||||||
JLabel descriptionLabel = new JLabel("Gestion du focus automatique (nécessite une bonne carte graphique) :");
|
JLabel descriptionLabel = new JLabel("Gestion du focus automatique (nécessite une bonne carte graphique) :");
|
||||||
descriptionLabel.setFont(new Font("Roboto", Font.PLAIN, 22));
|
descriptionLabel.setFont(new Font("Roboto", Font.PLAIN, 22));
|
||||||
descriptionLabel.setForeground(Color.WHITE);
|
descriptionLabel.setForeground(Color.WHITE);
|
||||||
descriptionLabel.setAlignmentX(Component.LEFT_ALIGNMENT); // Aligner à gauche
|
descriptionLabel.setAlignmentX(Component.LEFT_ALIGNMENT); // Aligner à gauche
|
||||||
checkBoxPanel.add(descriptionLabel); // Ajouter le texte dans le panneau
|
checkBoxPanel.add(descriptionLabel); // Ajouter le texte dans le panneau
|
||||||
|
|
||||||
// Ajouter un espace flexible entre le texte et la case à cocher
|
// Ajouter un espace flexible entre le texte et la case à cocher
|
||||||
checkBoxPanel.add(Box.createHorizontalGlue()); // Cela pousse la case à cocher vers la droite
|
checkBoxPanel.add(Box.createHorizontalGlue()); // Cela pousse la case à cocher vers la droite
|
||||||
|
|
||||||
// Case à cocher
|
// Case à cocher
|
||||||
JCheckBox autoFocusCheckBox = new JCheckBox();
|
JCheckBox autoFocusCheckBox = new JCheckBox();
|
||||||
autoFocusCheckBox.setFont(new Font("Roboto", Font.PLAIN, 22));
|
autoFocusCheckBox.setFont(new Font("Roboto", Font.PLAIN, 22));
|
||||||
autoFocusCheckBox.setFocusPainted(false);
|
autoFocusCheckBox.setFocusPainted(false);
|
||||||
autoFocusCheckBox.setOpaque(false);
|
autoFocusCheckBox.setOpaque(false);
|
||||||
autoFocusCheckBox.setBorderPainted(false);
|
autoFocusCheckBox.setBorderPainted(false);
|
||||||
autoFocusCheckBox.setMargin(new Insets(5, 5, 5, 5));
|
autoFocusCheckBox.setMargin(new Insets(5, 5, 5, 5));
|
||||||
autoFocusCheckBox.setSelected(Options.AUTO_FOCUS); // État initial selon la valeur actuelle de AUTO_FOCUS
|
autoFocusCheckBox.setSelected(Options.AUTO_FOCUS); // État initial selon la valeur actuelle de AUTO_FOCUS
|
||||||
autoFocusCheckBox.addActionListener(e -> {
|
autoFocusCheckBox.addActionListener(e -> {
|
||||||
Options.AUTO_FOCUS = autoFocusCheckBox.isSelected(); // Mettre à jour la variable auto-focus
|
Options.AUTO_FOCUS = autoFocusCheckBox.isSelected(); // Mettre à jour la variable auto-focus
|
||||||
});
|
});
|
||||||
|
|
||||||
checkBoxPanel.add(autoFocusCheckBox); // Ajouter la case à cocher
|
checkBoxPanel.add(autoFocusCheckBox); // Ajouter la case à cocher
|
||||||
|
|
||||||
// Ajouter le panneau contenant texte + case à cocher
|
// Ajouter le panneau contenant texte + case à cocher
|
||||||
panel.add(checkBoxPanel);
|
panel.add(checkBoxPanel);
|
||||||
|
|
||||||
return panel;
|
return panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private JPanel createSliderPanel(JSlider volumeSlider) {
|
private JPanel createSliderPanel(JSlider volumeSlider) {
|
||||||
@@ -221,7 +229,6 @@ public class SettingsPanel extends JPanel {
|
|||||||
return gbc;
|
return gbc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private JButton createReturnButtonWithIcon() {
|
private JButton createReturnButtonWithIcon() {
|
||||||
ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath());
|
ImageIcon originalIcon = new ImageIcon(Images.EXIT_ICON.getImagePath());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user