test/Game.java

changeset 25
f82aa7afe872
parent 17
7ea86024aef0
equal deleted inserted replaced
24:e43dee5892f4 25:f82aa7afe872
1 package de.uapcore.threelittlestars;
2
3 import java.awt.BorderLayout;
4 import java.io.IOException;
5
6 import javax.swing.JFrame;
7 import javax.swing.JOptionPane;
8
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;
15
16
17 public class Game implements Runnable {
18
19 public static final int TICK_RATE = 32;
20
21 private InputManager im;
22 private AssetManager am;
23 private WorldManager wm;
24
25 private MainFrame frame;
26 private MainPanel canvas;
27
28 public Game(MainFrame frame, PlayerCharacter playerCharacter) {
29
30 this.frame = frame;
31 canvas = new MainPanel();
32
33 am = new AssetManager(canvas);
34 wm = new WorldManager(am);
35 im = new InputManager();
36
37 canvas.setRenderer(new GameRenderer(wm));
38 canvas.addKeyListener(im);
39
40 frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
41 frame.add(canvas, BorderLayout.CENTER);
42 frame.pack();
43 canvas.requestFocusInWindow();
44
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 }
53
54 public void startGame(PlayerCharacter character) throws IOException {
55 Player.setCharacter(character);
56
57 // TODO: asset / savegame loading
58 wm.loadAsset("testworld"); // just testing here
59
60 new Thread(this).start();
61 }
62
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;
70
71 // Deliver buffered input events
72 im.deliverEvents(wm);
73
74 // Call updates
75 wm.update();
76
77 // Catch other key events
78 if (im.isEscapePressed()) {
79 frame.setVisible(false);
80 }
81
82
83 // Repaint canvas
84 canvas.repaint();
85 }
86 Thread.yield();
87 } while (frame.isVisible());
88
89 // Cleanup stuff
90 frame.dispose();
91 System.exit(0);
92 }
93
94 }

mercurial