1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/test/Game.java Wed Jul 10 17:57:03 2013 +0200 1.3 @@ -0,0 +1,94 @@ 1.4 +package de.uapcore.threelittlestars; 1.5 + 1.6 +import java.awt.BorderLayout; 1.7 +import java.io.IOException; 1.8 + 1.9 +import javax.swing.JFrame; 1.10 +import javax.swing.JOptionPane; 1.11 + 1.12 +import de.uapcore.threelittlestars.entities.Player; 1.13 +import de.uapcore.threelittlestars.entities.Player.PlayerCharacter; 1.14 +import de.uapcore.threelittlestars.managers.AssetManager; 1.15 +import de.uapcore.threelittlestars.managers.InputManager; 1.16 +import de.uapcore.threelittlestars.managers.WorldManager; 1.17 +import de.uapcore.threelittlestars.renderers.GameRenderer; 1.18 + 1.19 + 1.20 +public class Game implements Runnable { 1.21 + 1.22 + public static final int TICK_RATE = 32; 1.23 + 1.24 + private InputManager im; 1.25 + private AssetManager am; 1.26 + private WorldManager wm; 1.27 + 1.28 + private MainFrame frame; 1.29 + private MainPanel canvas; 1.30 + 1.31 + public Game(MainFrame frame, PlayerCharacter playerCharacter) { 1.32 + 1.33 + this.frame = frame; 1.34 + canvas = new MainPanel(); 1.35 + 1.36 + am = new AssetManager(canvas); 1.37 + wm = new WorldManager(am); 1.38 + im = new InputManager(); 1.39 + 1.40 + canvas.setRenderer(new GameRenderer(wm)); 1.41 + canvas.addKeyListener(im); 1.42 + 1.43 + frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 1.44 + frame.add(canvas, BorderLayout.CENTER); 1.45 + frame.pack(); 1.46 + canvas.requestFocusInWindow(); 1.47 + 1.48 + try { 1.49 + startGame(playerCharacter); 1.50 + } catch (IOException e) { 1.51 + JOptionPane.showMessageDialog(frame, "Die Weltdaten sind beschÃĪdigt.", 1.52 + frame.getTitle(), JOptionPane.ERROR_MESSAGE); 1.53 + System.exit(1); 1.54 + } 1.55 + } 1.56 + 1.57 + public void startGame(PlayerCharacter character) throws IOException { 1.58 + Player.setCharacter(character); 1.59 + 1.60 + // TODO: asset / savegame loading 1.61 + wm.loadAsset("testworld"); // just testing here 1.62 + 1.63 + new Thread(this).start(); 1.64 + } 1.65 + 1.66 + @Override 1.67 + public void run() { 1.68 + long lastTick = System.currentTimeMillis(); 1.69 + do { 1.70 + long currentTick = System.currentTimeMillis(); 1.71 + if (currentTick - lastTick >= TICK_RATE) { 1.72 + lastTick += TICK_RATE; 1.73 + 1.74 + // Deliver buffered input events 1.75 + im.deliverEvents(wm); 1.76 + 1.77 + // Call updates 1.78 + wm.update(); 1.79 + 1.80 + // Catch other key events 1.81 + if (im.isEscapePressed()) { 1.82 + frame.setVisible(false); 1.83 + } 1.84 + 1.85 + 1.86 + // Repaint canvas 1.87 + canvas.repaint(); 1.88 + } 1.89 + Thread.yield(); 1.90 + } while (frame.isVisible()); 1.91 + 1.92 + // Cleanup stuff 1.93 + frame.dispose(); 1.94 + System.exit(0); 1.95 + } 1.96 + 1.97 +}