diff options
author | Nao Pross <naopross@thearcway.org> | 2018-11-19 10:58:47 +0100 |
---|---|---|
committer | Nao Pross <naopross@thearcway.org> | 2018-11-19 10:58:47 +0100 |
commit | a659fc5cfe73938731cc0b431f1c42a2fa0ed02d (patch) | |
tree | e1e5a6f81eb9818de548b6219970a33666fbf19d /src | |
parent | Update Scene class (and some derivates) to be abstract (diff) | |
download | Subconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.tar.gz Subconscious-java-a659fc5cfe73938731cc0b431f1c42a2fa0ed02d.zip |
Update GameWindow and remove parent frame dependency on Scene
Diffstat (limited to 'src')
-rw-r--r-- | src/BattleScene.java | 19 | ||||
-rw-r--r-- | src/GameWindow.java | 87 | ||||
-rw-r--r-- | src/MapEditorScene.java (renamed from src/MapEditor.java) | 6 | ||||
-rw-r--r-- | src/MapScene.java | 9 | ||||
-rw-r--r-- | src/Scene.java | 30 |
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); |