summaryrefslogtreecommitdiffstats
path: root/src/GameWindow.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/GameWindow.java')
-rw-r--r--src/GameWindow.java96
1 files changed, 69 insertions, 27 deletions
diff --git a/src/GameWindow.java b/src/GameWindow.java
index d1afad4..a908a0a 100644
--- a/src/GameWindow.java
+++ b/src/GameWindow.java
@@ -2,6 +2,8 @@
import java.awt.Dimension;
import java.awt.GridLayout;
+import java.awt.CardLayout;
+import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
@@ -10,10 +12,17 @@ import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+
public class GameWindow extends JFrame implements ActionListener {
public static final Dimension WINDOW_SIZE = new Dimension(600, 400);
- private JPanel menu;
+ public final String MENU_CARD = "menu";
+ public final String SCENE_CARD = "scene";
+
+ private JPanel root;
+
+ private Scene scene = null;
+ private Thread sceneThread = null;
// TODO: remove map editor, start directly on Battle mode
public GameWindow() {
@@ -24,28 +33,78 @@ public class GameWindow extends JFrame implements ActionListener {
this.setPreferredSize(WINDOW_SIZE);
this.setLocationRelativeTo(null);
+ this.initComponents();
+
+ this.add(this.root, BorderLayout.CENTER);
+ this.pack();
+ this.setVisible(true);
+ }
+
+ private void initComponents() {
+ // set up a cardlayout
+ this.root = new JPanel(new CardLayout());
+
+ // build Menu card
JPanel menu = new JPanel();
menu.setLayout(new GridLayout(3, 1));
+
JButton editor = new JButton("Editor");
editor.setActionCommand("btn-editor");
+ editor.addActionListener(this);
+
JButton battle = new JButton("Battle");
battle.setActionCommand("btn-battle");
+ battle.addActionListener(this);
+
JButton exit = new JButton("Exit");
exit.setActionCommand("btn-exit");
-
- editor.addActionListener(this);
- battle.addActionListener(this);
exit.addActionListener(this);
menu.add(editor);
menu.add(battle);
menu.add(exit);
- this.menu = menu;
+ // add cards
+ this.root.add(menu, MENU_CARD);
+ }
- this.add(this.menu);
- this.pack();
- this.setVisible(true);
+ public void showScene(Scene scene) {
+ // the current scene is already open
+ if (scene == this.scene) {
+ ((CardLayout)this.root.getLayout()).show(this.root, SCENE_CARD);
+ scene.updateCanvasSize();
+ scene.resume();
+
+ return;
+ }
+
+ // if there is an old scene
+ if (this.scene != null) {
+ // close old scene
+ this.scene.stop();
+ try {
+ this.sceneThread.join();
+ } catch (InterruptedException ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ // build new thread
+ this.scene = scene;
+ this.sceneThread = new Thread(this.scene);
+
+ // add to layout
+ this.root.add(scene, SCENE_CARD);
+ ((CardLayout)this.root.getLayout()).show(this.root, SCENE_CARD);
+
+ this.sceneThread.start();
+ scene.updateCanvasSize();
+ scene.resume();
+ }
+
+ public void showMenu() {
+ this.scene.pause();
+ ((CardLayout)this.root.getLayout()).show(this, MENU_CARD);
}
@Override
@@ -65,26 +124,9 @@ public class GameWindow extends JFrame implements ActionListener {
scene = new BattleScene();
}
- if (scene == null) {
- return;
+ if (scene != null) {
+ showScene(scene);
}
-
- this.getContentPane().removeAll();
- this.getContentPane().invalidate();
- this.getContentPane().add(scene);
- this.getContentPane().revalidate();
-
- scene.updateCanvasSize();
-
- Thread sceneThread = new Thread(scene);
- sceneThread.start();
}
}
-
- public void backToMenu() {
- this.getContentPane().removeAll();
- this.getContentPane().invalidate();
- this.getContentPane().add(this.menu);
- this.getContentPane().revalidate();
- }
}