universe@17: package de.uapcore.threelittlestars; universe@17: universe@17: import java.awt.BorderLayout; universe@17: import java.io.IOException; universe@17: universe@17: import javax.swing.JFrame; universe@17: import javax.swing.JOptionPane; universe@17: universe@17: import de.uapcore.threelittlestars.entities.Player; universe@17: import de.uapcore.threelittlestars.entities.Player.PlayerCharacter; universe@17: import de.uapcore.threelittlestars.managers.AssetManager; universe@17: import de.uapcore.threelittlestars.managers.InputManager; universe@17: import de.uapcore.threelittlestars.managers.WorldManager; universe@17: import de.uapcore.threelittlestars.renderers.GameRenderer; universe@17: universe@17: universe@17: public class Game implements Runnable { universe@17: universe@17: public static final int TICK_RATE = 32; universe@17: universe@17: private InputManager im; universe@17: private AssetManager am; universe@17: private WorldManager wm; universe@17: universe@17: private MainFrame frame; universe@17: private MainPanel canvas; universe@17: universe@17: public Game(MainFrame frame, PlayerCharacter playerCharacter) { universe@17: universe@17: this.frame = frame; universe@17: canvas = new MainPanel(); universe@17: universe@17: am = new AssetManager(canvas); universe@17: wm = new WorldManager(am); universe@17: im = new InputManager(); universe@17: universe@17: canvas.setRenderer(new GameRenderer(wm)); universe@17: canvas.addKeyListener(im); universe@17: universe@17: frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); universe@17: frame.add(canvas, BorderLayout.CENTER); universe@17: frame.pack(); universe@17: canvas.requestFocusInWindow(); universe@17: universe@17: try { universe@17: startGame(playerCharacter); universe@17: } catch (IOException e) { universe@17: JOptionPane.showMessageDialog(frame, "Die Weltdaten sind beschÃĪdigt.", universe@17: frame.getTitle(), JOptionPane.ERROR_MESSAGE); universe@17: System.exit(1); universe@17: } universe@17: } universe@17: universe@17: public void startGame(PlayerCharacter character) throws IOException { universe@17: Player.setCharacter(character); universe@17: universe@17: // TODO: asset / savegame loading universe@17: wm.loadAsset("testworld"); // just testing here universe@17: universe@17: new Thread(this).start(); universe@17: } universe@17: universe@17: @Override universe@17: public void run() { universe@17: long lastTick = System.currentTimeMillis(); universe@17: do { universe@17: long currentTick = System.currentTimeMillis(); universe@17: if (currentTick - lastTick >= TICK_RATE) { universe@17: lastTick += TICK_RATE; universe@17: universe@17: // Deliver buffered input events universe@17: im.deliverEvents(wm); universe@17: universe@17: // Call updates universe@17: wm.update(); universe@17: universe@17: // Catch other key events universe@17: if (im.isEscapePressed()) { universe@17: frame.setVisible(false); universe@17: } universe@17: universe@17: universe@17: // Repaint canvas universe@17: canvas.repaint(); universe@17: } universe@17: Thread.yield(); universe@17: } while (frame.isVisible()); universe@17: universe@17: // Cleanup stuff universe@17: frame.dispose(); universe@17: System.exit(0); universe@17: } universe@17: universe@17: }