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 } |
|