summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNao Pross <naopross@thearcway.org>2018-11-19 10:58:47 +0100
committerNao Pross <naopross@thearcway.org>2018-11-19 10:58:47 +0100
commita659fc5cfe73938731cc0b431f1c42a2fa0ed02d (patch)
treee1e5a6f81eb9818de548b6219970a33666fbf19d /src
parentUpdate Scene class (and some derivates) to be abstract (diff)
downloadSubconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.tar.gz
Subconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.zip
Update GameWindow and remove parent frame dependency on Scene
Diffstat (limited to '')
-rw-r--r--src/BattleScene.java19
-rw-r--r--src/GameWindow.java87
-rw-r--r--src/MapEditorScene.java (renamed from src/MapEditor.java)6
-rw-r--r--src/MapScene.java9
-rw-r--r--src/Scene.java30
5 files changed, 74 insertions, 77 deletions
diff --git a/src/BattleScene.java b/src/BattleScene.java
index 1e4b633..df691ea 100644
--- a/src/BattleScene.java
+++ b/src/BattleScene.java
@@ -43,8 +43,8 @@ public class BattleScene extends MapScene {
private int realX = 0;
private int realY = 0;
- public BattleScene(JFrame frame) {
- super(frame);
+ public BattleScene() {
+ super();
// TODO: this should be handled in MapScene
MapLoader mapLoader = new MapLoader("../testmap.json");
@@ -91,26 +91,27 @@ public class BattleScene extends MapScene {
//draw panels
g.setColor(Palette.WHITE_T);
- g.fillRect(this.WIDTH-100*this.guiSize, this.HEIGHT-100*this.guiSize,
+ g.fillRect(this.canvasSize.width-100*this.guiSize, this.canvasSize.height-100*this.guiSize,
100*this.guiSize, 100*this.guiSize);
- g.fillRect(0, this.HEIGHT-100*this.guiSize, 150*this.guiSize, 100*this.guiSize);
+ g.fillRect(0, this.canvasSize.height-100*this.guiSize, 150*this.guiSize, 100*this.guiSize);
g.setColor(Palette.BLACK);
g.setFont(g.getFont().deriveFont(12.0F*this.guiSize));
Tile tile = null;
+
try{
tile = this.map.getTile(this.previousX, this.previousY);
switch (tile.getType()) {
case CLEAR:
break;
case GRASS:
- g.drawString("Grass", this.WIDTH-90*this.guiSize, this.HEIGHT-80*this.guiSize);
+ g.drawString("Grass", this.canvasSize.width-90*this.guiSize, this.canvasSize.height-80*this.guiSize);
break;
case WATER:
- g.drawString("Water", this.WIDTH-90*this.guiSize, this.HEIGHT-80*this.guiSize);
+ g.drawString("Water", this.canvasSize.width-90*this.guiSize, this.canvasSize.height-80*this.guiSize);
break;
case MOUNTAIN:
- g.drawString("Mountain", this.WIDTH-90*this.guiSize, this.HEIGHT-80*this.guiSize);
+ g.drawString("Mountain", this.canvasSize.width-90*this.guiSize, this.canvasSize.height-80*this.guiSize);
break;
}
@@ -118,7 +119,7 @@ public class BattleScene extends MapScene {
if (this.actorClicked && this.lastActor != null) {
g.setColor(Palette.WHITE_T);
g.fillRect(0, 0, 100*this.guiSize, 150*this.guiSize);
- g.fillRect(this.WIDTH-100*this.guiSize, 0, 100*this.guiSize, 100*this.guiSize);
+ g.fillRect(this.canvasSize.width-100*this.guiSize, 0, 100*this.guiSize, 100*this.guiSize);
g.setColor(Palette.BLACK);
g.drawString(this.lastActor.getName(), 5*this.guiSize, 15*this.guiSize);
@@ -135,7 +136,7 @@ public class BattleScene extends MapScene {
} else if (this.actorClicked) {
g.setColor(Palette.WHITE_T);
g.fillRect(0, 0, 100*this.guiSize, 150*this.guiSize);
- g.fillRect(this.WIDTH-100*this.guiSize, 0, 100*this.guiSize, 100*this.guiSize);
+ g.fillRect(this.canvasSize.width-100*this.guiSize, 0, 100*this.guiSize, 100*this.guiSize);
g.setColor(Palette.BLACK);
g.drawString("None left", 5*this.guiSize, 15*this.guiSize);
diff --git a/src/GameWindow.java b/src/GameWindow.java
index 540d75b..d1afad4 100644
--- a/src/GameWindow.java
+++ b/src/GameWindow.java
@@ -10,29 +10,28 @@ import javax.swing.JButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-public class GameWindow implements ActionListener {
+public class GameWindow extends JFrame implements ActionListener {
public static final Dimension WINDOW_SIZE = new Dimension(600, 400);
- private JFrame frame;
private JPanel menu;
// TODO: remove map editor, start directly on Battle mode
public GameWindow() {
- this.frame = new JFrame("Subconscious");
+ super("Subconscious");
- this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.frame.setSize(WINDOW_SIZE);
- this.frame.setPreferredSize(WINDOW_SIZE);
- this.frame.setLocationRelativeTo(null);
+ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ this.setSize(WINDOW_SIZE);
+ this.setPreferredSize(WINDOW_SIZE);
+ this.setLocationRelativeTo(null);
JPanel menu = new JPanel();
menu.setLayout(new GridLayout(3, 1));
JButton editor = new JButton("Editor");
- editor.setActionCommand("editor");
+ editor.setActionCommand("btn-editor");
JButton battle = new JButton("Battle");
- battle.setActionCommand("battle");
+ battle.setActionCommand("btn-battle");
JButton exit = new JButton("Exit");
- exit.setActionCommand("exit");
+ exit.setActionCommand("btn-exit");
editor.addActionListener(this);
battle.addActionListener(this);
@@ -44,46 +43,48 @@ public class GameWindow implements ActionListener {
this.menu = menu;
- this.frame.add(this.menu);
- this.frame.pack();
-
- this.frame.setVisible(true);
+ this.add(this.menu);
+ this.pack();
+ this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
- if ("editor".equals(e.getActionCommand())) {
- MapEditor mapEditor = new MapEditor(frame);
-
- this.frame.getContentPane().removeAll();
- this.frame.getContentPane().invalidate();
- this.frame.getContentPane().add(mapEditor);
- this.frame.getContentPane().revalidate();
-
- Thread mapEditorThread = new Thread(mapEditor);
- mapEditorThread.start();
-
- } else if ("battle".equals(e.getActionCommand())) {
- BattleScene battleScene = new BattleScene(frame);
-
- this.frame.getContentPane().removeAll();
- this.frame.getContentPane().invalidate();
- this.frame.getContentPane().add(battleScene);
- this.frame.getContentPane().revalidate();
-
- Thread battleThread = new Thread(battleScene);
- battleThread.start();
-
- } else if ("exit".equals(e.getActionCommand())) {
- this.frame.setVisible(false);
- this.frame.dispose();
+ if (e.getActionCommand().startsWith("btn")) {
+ if (e.getActionCommand().equals("btn-exit")) {
+ this.setVisible(false);
+ this.dispose();
+ return;
+ }
+
+ Scene scene = null;
+
+ if (e.getActionCommand().equals("btn-editor")) {
+ scene = new MapEditorScene();
+ } else if (e.getActionCommand().equals("btn-battle")) {
+ scene = new BattleScene();
+ }
+
+ if (scene == null) {
+ return;
+ }
+
+ 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.frame.getContentPane().removeAll();
- this.frame.getContentPane().invalidate();
- this.frame.getContentPane().add(this.menu);
- this.frame.getContentPane().revalidate();
+ this.getContentPane().removeAll();
+ this.getContentPane().invalidate();
+ this.getContentPane().add(this.menu);
+ this.getContentPane().revalidate();
}
}
diff --git a/src/MapEditor.java b/src/MapEditorScene.java
index 4ca5530..4a42951 100644
--- a/src/MapEditor.java
+++ b/src/MapEditorScene.java
@@ -27,15 +27,15 @@ import javax.swing.JCheckBox;
import java.lang.Integer;
-public class MapEditor extends MapScene {
+public class MapEditorScene extends MapScene {
private Tile.Type placingTile = Tile.Type.CLEAR;
private Actor placingActor = new Actor("", 0, false, 0);
private ArrayList<Object> actorFields = new ArrayList<>();
private JFrame actorFrame;
private boolean nukeActor = false;
- public MapEditor(JFrame frame) {
- super(frame);
+ public MapEditorScene() {
+ super();
this.setLayout(new BorderLayout());
JPanel bottomPanel = new JPanel();
diff --git a/src/MapScene.java b/src/MapScene.java
index af86431..7ed8e3b 100644
--- a/src/MapScene.java
+++ b/src/MapScene.java
@@ -46,15 +46,14 @@ public abstract class MapScene extends Scene implements ActionListener {
protected int maxSize;
protected AffineTransform tx = new AffineTransform();
- public MapScene(JFrame frame) {
- super(frame);
-
+ public MapScene() {
+ super();
//this.map = new Map(new Dimension(10, 10));
}
@Override
protected void render() {
- if (this.WIDTH < this.HEIGHT) {
+ if (this.canvasSize.width < this.canvasSize.height) {
this.maxSize = WIDTH;
} else {
this.maxSize = HEIGHT;
@@ -68,7 +67,7 @@ public abstract class MapScene extends Scene implements ActionListener {
Graphics2D g = (Graphics2D) this.buffer.getDrawGraphics();
//clear
g.setColor(Palette.BLACK);
- g.fillRect(0, 0, this.WIDTH, this.HEIGHT);
+ g.fillRect(0, 0, this.canvasSize.width, this.canvasSize.height);
//zoom and pan
if (this.zooming) {
diff --git a/src/Scene.java b/src/Scene.java
index 529a2f6..d8c826e 100644
--- a/src/Scene.java
+++ b/src/Scene.java
@@ -23,28 +23,20 @@ public abstract class Scene extends JPanel
protected final long DESIRED_FPS = 60;
protected final long DESIRED_DELTA_LOOP = (1000*1000*1000)/DESIRED_FPS;
- // TODO: lowercase not constant values
- protected int WIDTH;
- protected int HEIGHT;
protected BufferStrategy buffer;
- // TODO: remove frame reference
- protected JFrame frame;
+ protected Dimension canvasSize;
protected boolean running;
protected Canvas canvas;
// TODO: make accessible from user settings
protected int guiSize = 2;
- protected Scene(JFrame frame) {
- this.frame = frame;
- // getting window size
- this.WIDTH = (int) this.frame.getSize().getWidth();
- this.HEIGHT = (int) this.frame.getSize().getHeight();
-
+ protected Scene() {
+ this.canvasSize = GameWindow.WINDOW_SIZE;
this.canvas = new Canvas();
- this.canvas.setBounds(0, 0, this.WIDTH, this.HEIGHT);
+ this.canvas.setBounds(0, 0, this.canvasSize.width, this.canvasSize.height);
this.canvas.setIgnoreRepaint(true);
this.canvas.addKeyListener(this);
@@ -74,11 +66,6 @@ public abstract class Scene extends JPanel
while (running) {
beginLoopTime = System.nanoTime();
- // TODO: use WindowEventListener to wait for changes
- //getting window size
- this.WIDTH = (int) this.frame.getSize().getWidth();
- this.HEIGHT = (int) this.frame.getSize().getHeight();
-
this.render();
lastUpdateTime = currentUpdateTime;
@@ -100,6 +87,15 @@ public abstract class Scene extends JPanel
}
}
+ // automagically set the canvas size to the parent's size
+ public void updateCanvasSize() {
+ this.canvasSize = this.getParent().getSize();
+ }
+
+ public void setCanvasSize(Dimension newSize) {
+ this.canvasSize = newSize;
+ }
+
protected abstract void render();
protected abstract void update(int deltaNanoTime);