test/Game.java

changeset 17
7ea86024aef0
     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 +}

mercurial