test/Game.java

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

mercurial