Thu, 23 Jan 2014 09:19:37 +0100
structured source code
universe@17 | 1 | package de.uapcore.threelittlestars; |
universe@17 | 2 | |
universe@17 | 3 | import java.awt.BorderLayout; |
universe@17 | 4 | import java.io.IOException; |
universe@17 | 5 | |
universe@17 | 6 | import javax.swing.JFrame; |
universe@17 | 7 | import javax.swing.JOptionPane; |
universe@17 | 8 | |
universe@17 | 9 | import de.uapcore.threelittlestars.entities.Player; |
universe@17 | 10 | import de.uapcore.threelittlestars.entities.Player.PlayerCharacter; |
universe@17 | 11 | import de.uapcore.threelittlestars.managers.AssetManager; |
universe@17 | 12 | import de.uapcore.threelittlestars.managers.InputManager; |
universe@17 | 13 | import de.uapcore.threelittlestars.managers.WorldManager; |
universe@17 | 14 | import de.uapcore.threelittlestars.renderers.GameRenderer; |
universe@17 | 15 | |
universe@17 | 16 | |
universe@17 | 17 | public class Game implements Runnable { |
universe@17 | 18 | |
universe@17 | 19 | public static final int TICK_RATE = 32; |
universe@17 | 20 | |
universe@17 | 21 | private InputManager im; |
universe@17 | 22 | private AssetManager am; |
universe@17 | 23 | private WorldManager wm; |
universe@17 | 24 | |
universe@17 | 25 | private MainFrame frame; |
universe@17 | 26 | private MainPanel canvas; |
universe@17 | 27 | |
universe@17 | 28 | public Game(MainFrame frame, PlayerCharacter playerCharacter) { |
universe@17 | 29 | |
universe@17 | 30 | this.frame = frame; |
universe@17 | 31 | canvas = new MainPanel(); |
universe@17 | 32 | |
universe@17 | 33 | am = new AssetManager(canvas); |
universe@17 | 34 | wm = new WorldManager(am); |
universe@17 | 35 | im = new InputManager(); |
universe@17 | 36 | |
universe@17 | 37 | canvas.setRenderer(new GameRenderer(wm)); |
universe@17 | 38 | canvas.addKeyListener(im); |
universe@17 | 39 | |
universe@17 | 40 | frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); |
universe@17 | 41 | frame.add(canvas, BorderLayout.CENTER); |
universe@17 | 42 | frame.pack(); |
universe@17 | 43 | canvas.requestFocusInWindow(); |
universe@17 | 44 | |
universe@17 | 45 | try { |
universe@17 | 46 | startGame(playerCharacter); |
universe@17 | 47 | } catch (IOException e) { |
universe@17 | 48 | JOptionPane.showMessageDialog(frame, "Die Weltdaten sind beschÃĪdigt.", |
universe@17 | 49 | frame.getTitle(), JOptionPane.ERROR_MESSAGE); |
universe@17 | 50 | System.exit(1); |
universe@17 | 51 | } |
universe@17 | 52 | } |
universe@17 | 53 | |
universe@17 | 54 | public void startGame(PlayerCharacter character) throws IOException { |
universe@17 | 55 | Player.setCharacter(character); |
universe@17 | 56 | |
universe@17 | 57 | // TODO: asset / savegame loading |
universe@17 | 58 | wm.loadAsset("testworld"); // just testing here |
universe@17 | 59 | |
universe@17 | 60 | new Thread(this).start(); |
universe@17 | 61 | } |
universe@17 | 62 | |
universe@17 | 63 | @Override |
universe@17 | 64 | public void run() { |
universe@17 | 65 | long lastTick = System.currentTimeMillis(); |
universe@17 | 66 | do { |
universe@17 | 67 | long currentTick = System.currentTimeMillis(); |
universe@17 | 68 | if (currentTick - lastTick >= TICK_RATE) { |
universe@17 | 69 | lastTick += TICK_RATE; |
universe@17 | 70 | |
universe@17 | 71 | // Deliver buffered input events |
universe@17 | 72 | im.deliverEvents(wm); |
universe@17 | 73 | |
universe@17 | 74 | // Call updates |
universe@17 | 75 | wm.update(); |
universe@17 | 76 | |
universe@17 | 77 | // Catch other key events |
universe@17 | 78 | if (im.isEscapePressed()) { |
universe@17 | 79 | frame.setVisible(false); |
universe@17 | 80 | } |
universe@17 | 81 | |
universe@17 | 82 | |
universe@17 | 83 | // Repaint canvas |
universe@17 | 84 | canvas.repaint(); |
universe@17 | 85 | } |
universe@17 | 86 | Thread.yield(); |
universe@17 | 87 | } while (frame.isVisible()); |
universe@17 | 88 | |
universe@17 | 89 | // Cleanup stuff |
universe@17 | 90 | frame.dispose(); |
universe@17 | 91 | System.exit(0); |
universe@17 | 92 | } |
universe@17 | 93 | |
universe@17 | 94 | } |