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

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

mercurial