test/Game.java

Thu, 23 Jan 2014 09:19:37 +0100

author
Mike Becker <universe@uap-core.de>
date
Thu, 23 Jan 2014 09:19:37 +0100
changeset 21
537aec525835
parent 17
7ea86024aef0
permissions
-rw-r--r--

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 }

mercurial