diff --git a/src/com/annimon/turrets/DoubleBufferedCanvas.java b/src/com/annimon/turrets/DoubleBufferedCanvas.java index 480879a..849d63f 100644 --- a/src/com/annimon/turrets/DoubleBufferedCanvas.java +++ b/src/com/annimon/turrets/DoubleBufferedCanvas.java @@ -3,6 +3,8 @@ package com.annimon.turrets; import java.awt.Canvas; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; @@ -12,7 +14,7 @@ import java.awt.image.BufferedImage; * * @author aNNiMON */ -public abstract class DoubleBufferedCanvas extends Canvas implements MouseListener, MouseMotionListener { +public abstract class DoubleBufferedCanvas extends Canvas implements MouseListener, MouseMotionListener, KeyListener { private final Graphics2D G; private final BufferedImage buffer; @@ -24,6 +26,7 @@ public abstract class DoubleBufferedCanvas extends Canvas implements MouseListen addMouseListener(DoubleBufferedCanvas.this); addMouseMotionListener(DoubleBufferedCanvas.this); + addKeyListener(DoubleBufferedCanvas.this); buffer = new BufferedImage(Constants.WIDTH, Constants.HEIGHT, BufferedImage.TYPE_INT_RGB); G = buffer.createGraphics(); @@ -50,6 +53,8 @@ public abstract class DoubleBufferedCanvas extends Canvas implements MouseListen protected abstract void mouseDragged(int x, int y); + protected abstract void onExit(); + @Override public void mouseClicked(MouseEvent e) { } @@ -80,6 +85,21 @@ public abstract class DoubleBufferedCanvas extends Canvas implements MouseListen @Override public void mouseMoved(MouseEvent e) { } + + @Override + public void keyTyped(KeyEvent e) { + } + + @Override + public void keyPressed(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_ESCAPE) { + onExit(); + } + } + + @Override + public void keyReleased(KeyEvent e) { + } private final class DrawingThread extends Thread { diff --git a/src/com/annimon/turrets/GameCanvas.java b/src/com/annimon/turrets/GameCanvas.java index 5c52eee..54c4ee6 100644 --- a/src/com/annimon/turrets/GameCanvas.java +++ b/src/com/annimon/turrets/GameCanvas.java @@ -177,6 +177,17 @@ public class GameCanvas extends DoubleBufferedCanvas implements Runnable, Networ private void finishGame(boolean instanceWin) { winState = (instanceWin) ? WIN : LOOSE; + gameStarted = false; + } + + @Override + protected void onExit() { + if (socketHelper != null) { + try { + socketHelper.close(); + } catch (IOException ex) { } + } + Main.getInstance().switchLayout(Main.getInstance().getMainMenu()); } private boolean allowMove() { diff --git a/src/com/annimon/turrets/Main.java b/src/com/annimon/turrets/Main.java index ee57294..7791653 100644 --- a/src/com/annimon/turrets/Main.java +++ b/src/com/annimon/turrets/Main.java @@ -27,6 +27,7 @@ public class Main extends JFrame { public Main() { super("Turrets"); + setFocusable(true); setResizable(Constants.RESIZABLE); setLocationByPlatform(true); setDefaultCloseOperation(EXIT_ON_CLOSE); diff --git a/src/com/annimon/turrets/MenuPanel.java b/src/com/annimon/turrets/MenuPanel.java index eefb6d3..9c836b2 100644 --- a/src/com/annimon/turrets/MenuPanel.java +++ b/src/com/annimon/turrets/MenuPanel.java @@ -71,6 +71,7 @@ public class MenuPanel extends JPanel { switch (index) { case 0: // Create server case 1: // Join client + menuList.removeSelectionInterval(0, 1); GameCanvas canvas = new GameCanvas(index == 0); Main.getInstance().switchLayout(canvas); new Thread(canvas).start();