diff options
8 files changed, 203 insertions, 56 deletions
diff --git a/src/com/fourisland/fourpuzzle/Display.java b/src/com/fourisland/fourpuzzle/Display.java index 85acaf4..ec835ab 100755 --- a/src/com/fourisland/fourpuzzle/Display.java +++ b/src/com/fourisland/fourpuzzle/Display.java | |||
@@ -11,6 +11,7 @@ import com.fourisland.fourpuzzle.transition.OutTransition; | |||
11 | import com.fourisland.fourpuzzle.transition.Transition; | 11 | import com.fourisland.fourpuzzle.transition.Transition; |
12 | import com.fourisland.fourpuzzle.transition.TransitionDirection; | 12 | import com.fourisland.fourpuzzle.transition.TransitionDirection; |
13 | import com.fourisland.fourpuzzle.transition.TransitionUnsupportedException; | 13 | import com.fourisland.fourpuzzle.transition.TransitionUnsupportedException; |
14 | import com.fourisland.fourpuzzle.util.Renderable; | ||
14 | import java.awt.Font; | 15 | import java.awt.Font; |
15 | import java.awt.FontFormatException; | 16 | import java.awt.FontFormatException; |
16 | import java.awt.Graphics2D; | 17 | import java.awt.Graphics2D; |
@@ -20,6 +21,8 @@ import java.awt.image.BufferedImage; | |||
20 | import java.awt.image.VolatileImage; | 21 | import java.awt.image.VolatileImage; |
21 | import java.io.IOException; | 22 | import java.io.IOException; |
22 | import java.io.InputStream; | 23 | import java.io.InputStream; |
24 | import java.util.List; | ||
25 | import java.util.concurrent.CopyOnWriteArrayList; | ||
23 | import java.util.concurrent.CountDownLatch; | 26 | import java.util.concurrent.CountDownLatch; |
24 | import java.util.logging.Level; | 27 | import java.util.logging.Level; |
25 | import java.util.logging.Logger; | 28 | import java.util.logging.Logger; |
@@ -33,6 +36,8 @@ import org.jdesktop.application.ResourceMap; | |||
33 | public class Display { | 36 | public class Display { |
34 | 37 | ||
35 | public static int tileAnimationFrame = 0; | 38 | public static int tileAnimationFrame = 0; |
39 | |||
40 | private static List<Renderable> renderables = new CopyOnWriteArrayList<Renderable>(); | ||
36 | 41 | ||
37 | public static void render(JDialog gameFrame) | 42 | public static void render(JDialog gameFrame) |
38 | { | 43 | { |
@@ -95,18 +100,37 @@ public class Display { | |||
95 | g.drawImage(midTransition, 0, 0, null); | 100 | g.drawImage(midTransition, 0, 0, null); |
96 | } | 101 | } |
97 | } else { | 102 | } else { |
98 | Game.getGameState().render(g); | 103 | render(g); |
99 | } | 104 | } |
100 | 105 | ||
101 | g.dispose(); | 106 | g.dispose(); |
102 | } | 107 | } |
103 | 108 | ||
109 | private static void render(Graphics2D g) | ||
110 | { | ||
111 | Game.getGameState().render(g); | ||
112 | |||
113 | for (Renderable r : renderables) | ||
114 | { | ||
115 | r.render(g); | ||
116 | } | ||
117 | } | ||
118 | |||
119 | public static void registerRenderable(Renderable r) | ||
120 | { | ||
121 | renderables.add(r); | ||
122 | } | ||
123 | |||
124 | public static void unregisterRenderable(Renderable r) | ||
125 | { | ||
126 | renderables.remove(r); | ||
127 | } | ||
128 | |||
104 | private static boolean startedTransition = false; | 129 | private static boolean startedTransition = false; |
105 | private static Transition transition; | 130 | private static Transition transition; |
106 | private static CountDownLatch transitionWait; | 131 | private static CountDownLatch transitionWait; |
107 | private static boolean transitionRunning = false; | 132 | private static boolean transitionRunning = false; |
108 | private static BufferedImage midTransition = null; | 133 | private static BufferedImage midTransition = null; |
109 | private static BufferedImage postTransition = null; | ||
110 | public static void transition(Transition transition) throws InterruptedException | 134 | public static void transition(Transition transition) throws InterruptedException |
111 | { | 135 | { |
112 | if (transition instanceof MultidirectionalTransition) | 136 | if (transition instanceof MultidirectionalTransition) |
@@ -125,13 +149,13 @@ public class Display { | |||
125 | { | 149 | { |
126 | temp.setPreTransition(midTransition); | 150 | temp.setPreTransition(midTransition); |
127 | 151 | ||
128 | postTransition = Display.createCanvas(Game.WIDTH, Game.HEIGHT); | 152 | BufferedImage bImg = Display.createCanvas(Game.WIDTH, Game.HEIGHT); |
129 | Game.getGameState().render(postTransition.createGraphics()); | 153 | render(bImg.createGraphics()); |
130 | temp.setPostTransition(postTransition); | 154 | temp.setPostTransition(bImg); |
131 | } else { | 155 | } else { |
132 | BufferedImage preTransition = Display.createCanvas(Game.WIDTH, Game.HEIGHT); | 156 | BufferedImage bImg = Display.createCanvas(Game.WIDTH, Game.HEIGHT); |
133 | Game.getGameState().render(preTransition.createGraphics()); | 157 | render(bImg.createGraphics()); |
134 | temp.setPreTransition(preTransition); | 158 | temp.setPreTransition(bImg); |
135 | } | 159 | } |
136 | } else { | 160 | } else { |
137 | if (startedTransition && !(transition instanceof InTransition)) | 161 | if (startedTransition && !(transition instanceof InTransition)) |
@@ -146,13 +170,13 @@ public class Display { | |||
146 | { | 170 | { |
147 | transition.setPreTransition(midTransition); | 171 | transition.setPreTransition(midTransition); |
148 | 172 | ||
149 | postTransition = Display.createCanvas(Game.WIDTH, Game.HEIGHT); | 173 | BufferedImage bImg = Display.createCanvas(Game.WIDTH, Game.HEIGHT); |
150 | Game.getGameState().render(postTransition.createGraphics()); | 174 | render(bImg.createGraphics()); |
151 | ((InTransition) transition).setPostTransition(postTransition); | 175 | ((InTransition) transition).setPostTransition(bImg); |
152 | } else { | 176 | } else { |
153 | BufferedImage preTransition = Display.createCanvas(Game.WIDTH, Game.HEIGHT); | 177 | BufferedImage bImg = Display.createCanvas(Game.WIDTH, Game.HEIGHT); |
154 | Game.getGameState().render(preTransition.createGraphics()); | 178 | render(bImg.createGraphics()); |
155 | transition.setPreTransition(preTransition); | 179 | transition.setPreTransition(bImg); |
156 | } | 180 | } |
157 | } | 181 | } |
158 | 182 | ||
diff --git a/src/com/fourisland/fourpuzzle/gamestate/GameState.java b/src/com/fourisland/fourpuzzle/gamestate/GameState.java index de4d7de..e7bd783 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/GameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/GameState.java | |||
@@ -5,30 +5,18 @@ | |||
5 | 5 | ||
6 | package com.fourisland.fourpuzzle.gamestate; | 6 | package com.fourisland.fourpuzzle.gamestate; |
7 | 7 | ||
8 | import java.awt.Graphics2D; | 8 | import com.fourisland.fourpuzzle.util.Renderable; |
9 | 9 | ||
10 | /** | 10 | /** |
11 | * | 11 | * |
12 | * @author hatkirby | 12 | * @author hatkirby |
13 | */ | 13 | */ |
14 | public interface GameState { | 14 | public interface GameState extends Renderable { |
15 | 15 | ||
16 | public void initalize(); | 16 | public void initalize(); |
17 | public void deinitalize(); | 17 | public void deinitalize(); |
18 | 18 | ||
19 | public void processInput(); | 19 | public void processInput(); |
20 | public void doGameCycle(); | 20 | public void doGameCycle(); |
21 | public void render(Graphics2D g); | ||
22 | 21 | ||
23 | } | 22 | } \ No newline at end of file |
24 | |||
25 | /* | ||
26 | TitleScreen | ||
27 | MapView | ||
28 | Battle | ||
29 | GameOver | ||
30 | Menu | ||
31 | LoadFile | ||
32 | SaveFile | ||
33 | Transition | ||
34 | */ \ No newline at end of file | ||
diff --git a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java index 272c4f0..d5b4f90 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java | |||
@@ -27,20 +27,20 @@ import java.util.Arrays; | |||
27 | public class TitleScreenGameState implements GameState { | 27 | public class TitleScreenGameState implements GameState { |
28 | 28 | ||
29 | ChoiceWindow choices; | 29 | ChoiceWindow choices; |
30 | int wx, wy; | ||
31 | 30 | ||
32 | public void initalize() | 31 | public void initalize() |
33 | { | 32 | { |
34 | Audio.playMusic(Database.getMusic(Music.Title)); | 33 | Audio.playMusic(Database.getMusic(Music.Title)); |
35 | 34 | ||
36 | choices = new ChoiceWindow(Arrays.asList(Database.getVocab(Vocabulary.NewGame), Database.getVocab(Vocabulary.LoadGame), Database.getVocab(Vocabulary.EndGame)), true); | 35 | choices = new ChoiceWindow(Arrays.asList(Database.getVocab(Vocabulary.NewGame), Database.getVocab(Vocabulary.LoadGame), Database.getVocab(Vocabulary.EndGame)), true, ChoiceWindow.ChoiceWindowLocation.BottomLeft); |
37 | wx = (Game.WIDTH/5)-(choices.getWidth()/2); | 36 | Display.registerRenderable(choices); |
38 | wy = (Game.HEIGHT/4*3)-(choices.getHeight()/2); | ||
39 | } | 37 | } |
40 | 38 | ||
41 | public void deinitalize() | 39 | public void deinitalize() |
42 | { | 40 | { |
43 | Audio.stopMusic(); | 41 | Audio.stopMusic(); |
42 | |||
43 | Display.unregisterRenderable(choices); | ||
44 | } | 44 | } |
45 | 45 | ||
46 | PauseTimer pt = new PauseTimer(0); | 46 | PauseTimer pt = new PauseTimer(0); |
@@ -112,7 +112,6 @@ public class TitleScreenGameState implements GameState { | |||
112 | public void render(Graphics2D g) | 112 | public void render(Graphics2D g) |
113 | { | 113 | { |
114 | g.drawImage(ObjectLoader.getImage("Picture", "Title"), 0, 0, null); | 114 | g.drawImage(ObjectLoader.getImage("Picture", "Title"), 0, 0, null); |
115 | choices.render(g, wx, wy); | ||
116 | } | 115 | } |
117 | 116 | ||
118 | } | 117 | } |
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java index 3ed23c3..a20062d 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/MapViewGameState.java | |||
@@ -23,7 +23,6 @@ import com.fourisland.fourpuzzle.gamestate.mapview.event.specialmove.MoveEventTh | |||
23 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; | 23 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; |
24 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; | 24 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; |
25 | import com.fourisland.fourpuzzle.util.Functions; | 25 | import com.fourisland.fourpuzzle.util.Functions; |
26 | import com.fourisland.fourpuzzle.window.MessageWindow; | ||
27 | import java.awt.Graphics2D; | 26 | import java.awt.Graphics2D; |
28 | import java.awt.event.KeyEvent; | 27 | import java.awt.event.KeyEvent; |
29 | import java.awt.image.BufferedImage; | 28 | import java.awt.image.BufferedImage; |
@@ -229,11 +228,6 @@ public class MapViewGameState implements GameState { | |||
229 | 228 | ||
230 | g.drawImage(eventLayer, 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); | 229 | g.drawImage(eventLayer, 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); |
231 | g.drawImage(currentMap.renderUpper(), 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); | 230 | g.drawImage(currentMap.renderUpper(), 0, 0, Game.WIDTH, Game.HEIGHT, x, y, x+Game.WIDTH, y+Game.HEIGHT, null); |
232 | |||
233 | if (mw != null) | ||
234 | { | ||
235 | mw.render(g); | ||
236 | } | ||
237 | } | 231 | } |
238 | 232 | ||
239 | public void setCurrentMap(String mapName) | 233 | public void setCurrentMap(String mapName) |
@@ -256,11 +250,5 @@ public class MapViewGameState implements GameState { | |||
256 | { | 250 | { |
257 | currentViewpoint = viewpoint; | 251 | currentViewpoint = viewpoint; |
258 | } | 252 | } |
259 | |||
260 | volatile MessageWindow mw = null; | ||
261 | public void displayMessage(String message) | ||
262 | { | ||
263 | mw = new MessageWindow(message); | ||
264 | } | ||
265 | 253 | ||
266 | } | 254 | } |
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index 7ca08ff..2b54dc9 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | |||
@@ -17,6 +17,7 @@ import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.MovingViewpoint; | |||
17 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; | 17 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; |
18 | import com.fourisland.fourpuzzle.transition.InTransition; | 18 | import com.fourisland.fourpuzzle.transition.InTransition; |
19 | import com.fourisland.fourpuzzle.transition.OutTransition; | 19 | import com.fourisland.fourpuzzle.transition.OutTransition; |
20 | import com.fourisland.fourpuzzle.window.MessageWindow; | ||
20 | import java.util.concurrent.CountDownLatch; | 21 | import java.util.concurrent.CountDownLatch; |
21 | 22 | ||
22 | /** | 23 | /** |
@@ -50,10 +51,11 @@ public class SpecialEvent { | |||
50 | * been read. | 51 | * been read. |
51 | * | 52 | * |
52 | * @param message The message to display | 53 | * @param message The message to display |
54 | * @throws InterruptedException | ||
53 | */ | 55 | */ |
54 | public void DisplayMessage(String message) | 56 | public void DisplayMessage(String message) throws InterruptedException |
55 | { | 57 | { |
56 | mapView.displayMessage(message); | 58 | MessageWindow.displayMessage(message); |
57 | } | 59 | } |
58 | 60 | ||
59 | /** | 61 | /** |
diff --git a/src/com/fourisland/fourpuzzle/util/Renderable.java b/src/com/fourisland/fourpuzzle/util/Renderable.java new file mode 100644 index 0000000..a6aeb1a --- /dev/null +++ b/src/com/fourisland/fourpuzzle/util/Renderable.java | |||
@@ -0,0 +1,18 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.util; | ||
7 | |||
8 | import java.awt.Graphics2D; | ||
9 | |||
10 | /** | ||
11 | * | ||
12 | * @author hatkirby | ||
13 | */ | ||
14 | public interface Renderable { | ||
15 | |||
16 | public void render(Graphics2D g); | ||
17 | |||
18 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java index ca84383..8399422 100755 --- a/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java +++ b/src/com/fourisland/fourpuzzle/window/ChoiceWindow.java | |||
@@ -7,8 +7,10 @@ package com.fourisland.fourpuzzle.window; | |||
7 | 7 | ||
8 | import com.fourisland.fourpuzzle.Audio; | 8 | import com.fourisland.fourpuzzle.Audio; |
9 | import com.fourisland.fourpuzzle.Display; | 9 | import com.fourisland.fourpuzzle.Display; |
10 | import com.fourisland.fourpuzzle.Game; | ||
10 | import com.fourisland.fourpuzzle.database.Database; | 11 | import com.fourisland.fourpuzzle.database.Database; |
11 | import com.fourisland.fourpuzzle.database.Sound; | 12 | import com.fourisland.fourpuzzle.database.Sound; |
13 | import com.fourisland.fourpuzzle.util.Renderable; | ||
12 | import java.awt.Graphics2D; | 14 | import java.awt.Graphics2D; |
13 | import java.awt.Rectangle; | 15 | import java.awt.Rectangle; |
14 | import java.awt.TexturePaint; | 16 | import java.awt.TexturePaint; |
@@ -19,7 +21,7 @@ import java.util.List; | |||
19 | * | 21 | * |
20 | * @author hatkirby | 22 | * @author hatkirby |
21 | */ | 23 | */ |
22 | public class ChoiceWindow { | 24 | public class ChoiceWindow implements Renderable { |
23 | 25 | ||
24 | private static final int SPACER = 4; | 26 | private static final int SPACER = 4; |
25 | 27 | ||
@@ -29,7 +31,9 @@ public class ChoiceWindow { | |||
29 | private int width; | 31 | private int width; |
30 | private int height; | 32 | private int height; |
31 | BufferedImage cacheBase; | 33 | BufferedImage cacheBase; |
32 | public ChoiceWindow(List<String> choices, boolean center) | 34 | int x; |
35 | int y; | ||
36 | public ChoiceWindow(List<String> choices, boolean center, ChoiceWindowLocation cwl) | ||
33 | { | 37 | { |
34 | this.choices = choices; | 38 | this.choices = choices; |
35 | numChoices = choices.size(); | 39 | numChoices = choices.size(); |
@@ -52,9 +56,12 @@ public class ChoiceWindow { | |||
52 | width += SPACER*2; | 56 | width += SPACER*2; |
53 | 57 | ||
54 | cacheBase = Window.Default.getImage(width, height); | 58 | cacheBase = Window.Default.getImage(width, height); |
59 | |||
60 | x = cwl.getX(width); | ||
61 | y = cwl.getY(height); | ||
55 | } | 62 | } |
56 | 63 | ||
57 | public void render(Graphics2D g2, int x, int y) | 64 | public void render(Graphics2D g2) |
58 | { | 65 | { |
59 | Display.setFont(g2); | 66 | Display.setFont(g2); |
60 | 67 | ||
@@ -119,5 +126,37 @@ public class ChoiceWindow { | |||
119 | { | 126 | { |
120 | return choices.get(selected); | 127 | return choices.get(selected); |
121 | } | 128 | } |
129 | |||
130 | public static enum ChoiceWindowLocation | ||
131 | { | ||
132 | BottomLeft | ||
133 | { | ||
134 | public int getX(int width) | ||
135 | { | ||
136 | return (Game.WIDTH/5)-(width/2); | ||
137 | } | ||
138 | }, | ||
139 | BottomCenter | ||
140 | { | ||
141 | public int getX(int width) | ||
142 | { | ||
143 | return (Game.WIDTH/2)-(width/2); | ||
144 | } | ||
145 | }, | ||
146 | BottomRight | ||
147 | { | ||
148 | public int getX(int width) | ||
149 | { | ||
150 | return (Game.WIDTH/5*4)-(width/2); | ||
151 | } | ||
152 | }; | ||
153 | |||
154 | public abstract int getX(int width); | ||
155 | |||
156 | public int getY(int height) | ||
157 | { | ||
158 | return (Game.HEIGHT/4*3)-(height/2); | ||
159 | } | ||
160 | } | ||
122 | 161 | ||
123 | } \ No newline at end of file | 162 | } \ No newline at end of file |
diff --git a/src/com/fourisland/fourpuzzle/window/MessageWindow.java b/src/com/fourisland/fourpuzzle/window/MessageWindow.java index deab252..3272fcc 100644 --- a/src/com/fourisland/fourpuzzle/window/MessageWindow.java +++ b/src/com/fourisland/fourpuzzle/window/MessageWindow.java | |||
@@ -7,26 +7,36 @@ package com.fourisland.fourpuzzle.window; | |||
7 | 7 | ||
8 | import com.fourisland.fourpuzzle.Display; | 8 | import com.fourisland.fourpuzzle.Display; |
9 | import com.fourisland.fourpuzzle.Game; | 9 | import com.fourisland.fourpuzzle.Game; |
10 | import com.fourisland.fourpuzzle.PuzzleApplication; | ||
11 | import com.fourisland.fourpuzzle.util.Interval; | ||
12 | import com.fourisland.fourpuzzle.util.Renderable; | ||
10 | import java.awt.Graphics2D; | 13 | import java.awt.Graphics2D; |
11 | import java.awt.Rectangle; | 14 | import java.awt.Rectangle; |
12 | import java.awt.TexturePaint; | 15 | import java.awt.TexturePaint; |
16 | import java.awt.event.KeyAdapter; | ||
17 | import java.awt.event.KeyEvent; | ||
13 | import java.awt.image.BufferedImage; | 18 | import java.awt.image.BufferedImage; |
14 | import java.util.ArrayList; | 19 | import java.util.ArrayList; |
15 | import java.util.List; | 20 | import java.util.List; |
21 | import java.util.concurrent.CountDownLatch; | ||
16 | 22 | ||
17 | /** | 23 | /** |
18 | * | 24 | * |
19 | * @author hatkirby | 25 | * @author hatkirby |
20 | */ | 26 | */ |
21 | public class MessageWindow { | 27 | public class MessageWindow implements Renderable { |
22 | 28 | ||
23 | private static final int SPACER = 4; | 29 | private static final int SPACER = 4; |
24 | private static final int HEIGHT = 4*(Display.createCanvas(1, 1).createGraphics().getFontMetrics().getHeight()+SPACER); | 30 | private static final int HEIGHT = 4*(Display.createCanvas(1, 1).createGraphics().getFontMetrics().getHeight()+SPACER); |
25 | 31 | ||
26 | private List<String> messages; | 32 | private volatile List<String> messages; |
27 | int width; | 33 | int width; |
28 | BufferedImage cacheBase; | 34 | BufferedImage cacheBase; |
29 | public MessageWindow(String message) | 35 | int num = 0; |
36 | int upTo = 0; | ||
37 | boolean bounceArrow = false; | ||
38 | Interval in = Interval.createTickInterval(4); | ||
39 | private MessageWindow(String message) | ||
30 | { | 40 | { |
31 | width = Game.WIDTH - Window.Default.getFullWidth(0); | 41 | width = Game.WIDTH - Window.Default.getFullWidth(0); |
32 | messages = new ArrayList<String>(); | 42 | messages = new ArrayList<String>(); |
@@ -36,6 +46,36 @@ public class MessageWindow { | |||
36 | cacheBase = Window.Default.getImage(width, HEIGHT); | 46 | cacheBase = Window.Default.getImage(width, HEIGHT); |
37 | } | 47 | } |
38 | 48 | ||
49 | public static void displayMessage(String message) throws InterruptedException | ||
50 | { | ||
51 | final MessageWindow mw = new MessageWindow(message); | ||
52 | final CountDownLatch cdl = new CountDownLatch(1); | ||
53 | |||
54 | Display.registerRenderable(mw); | ||
55 | |||
56 | KeyAdapter ka = new KeyAdapter() { | ||
57 | @Override | ||
58 | public void keyPressed(KeyEvent e) { | ||
59 | if ((e.getKeyCode() == KeyEvent.VK_ENTER) || (e.getKeyCode() == KeyEvent.VK_SPACE)) | ||
60 | { | ||
61 | if (mw.pushEnter()) | ||
62 | { | ||
63 | cdl.countDown(); | ||
64 | } | ||
65 | } | ||
66 | |||
67 | Game.setKey(null); | ||
68 | } | ||
69 | }; | ||
70 | |||
71 | PuzzleApplication.gameFrame.addKeyListener(ka); | ||
72 | |||
73 | cdl.await(); | ||
74 | |||
75 | PuzzleApplication.gameFrame.removeKeyListener(ka); | ||
76 | Display.unregisterRenderable(mw); | ||
77 | } | ||
78 | |||
39 | private void initalizeMessages(String message, Graphics2D g) | 79 | private void initalizeMessages(String message, Graphics2D g) |
40 | { | 80 | { |
41 | Display.setFont(g); | 81 | Display.setFont(g); |
@@ -68,12 +108,24 @@ public class MessageWindow { | |||
68 | 108 | ||
69 | len = 0; | 109 | len = 0; |
70 | } | 110 | } |
111 | |||
112 | setLength(); | ||
113 | } | ||
114 | |||
115 | private void setLength() | ||
116 | { | ||
117 | num = 0; | ||
118 | |||
119 | for (int i=0;i<messages.size();i++) | ||
120 | { | ||
121 | num += messages.get(i).length(); | ||
122 | } | ||
71 | } | 123 | } |
72 | 124 | ||
73 | public void render(Graphics2D g2) | 125 | public void render(Graphics2D g2) |
74 | { | 126 | { |
75 | int y = MessageWindowLocation.Bottom.getY(); | 127 | int y = MessageWindowLocation.Bottom.getY(); |
76 | 128 | ||
77 | Display.setFont(g2); | 129 | Display.setFont(g2); |
78 | 130 | ||
79 | g2.drawImage(cacheBase, 0, y, null); | 131 | g2.drawImage(cacheBase, 0, y, null); |
@@ -81,6 +133,7 @@ public class MessageWindow { | |||
81 | int fh = g2.getFontMetrics().getHeight(); | 133 | int fh = g2.getFontMetrics().getHeight(); |
82 | int ty = Window.Default.getTopY()+fh-(SPACER/2)+y; | 134 | int ty = Window.Default.getTopY()+fh-(SPACER/2)+y; |
83 | int msgs = Math.min(messages.size(), 4); | 135 | int msgs = Math.min(messages.size(), 4); |
136 | int toPrint = upTo; | ||
84 | for (int i=0;i<msgs;i++) | 137 | for (int i=0;i<msgs;i++) |
85 | { | 138 | { |
86 | String message = messages.get(i); | 139 | String message = messages.get(i); |
@@ -88,10 +141,46 @@ public class MessageWindow { | |||
88 | int tx = Window.Default.getLeftX(); | 141 | int tx = Window.Default.getLeftX(); |
89 | 142 | ||
90 | g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, fw, fh))); | 143 | g2.setPaint(new TexturePaint(SystemGraphic.getTextColor(), new Rectangle(tx, ty, fw, fh))); |
91 | g2.drawString(message, tx, ty); | 144 | g2.drawString(message.substring(0, Math.min(toPrint, message.length())), tx, ty); |
92 | 145 | ||
93 | ty+=(SPACER+g2.getFontMetrics().getHeight()); | 146 | ty+=(SPACER+g2.getFontMetrics().getHeight()); |
147 | |||
148 | toPrint -= Math.min(toPrint, message.length()); | ||
149 | } | ||
150 | |||
151 | if (upTo < num) | ||
152 | { | ||
153 | upTo+=3; | ||
154 | } else { | ||
155 | g2.drawImage(SystemGraphic.getDownArrow(), (Window.Default.getFullWidth(width)/2)-5, y+HEIGHT-SPACER+(bounceArrow ? 1 : 0), null); | ||
156 | |||
157 | if (in.isElapsed()) | ||
158 | { | ||
159 | bounceArrow = !bounceArrow; | ||
160 | } | ||
161 | } | ||
162 | } | ||
163 | |||
164 | private synchronized boolean pushEnter() | ||
165 | { | ||
166 | if (upTo >= num) | ||
167 | { | ||
168 | int msgs = messages.size(); | ||
169 | for (int i=0;i<Math.min(4, msgs);i++) | ||
170 | { | ||
171 | messages.remove(0); | ||
172 | } | ||
173 | |||
174 | if (messages.size() > 0) | ||
175 | { | ||
176 | upTo = 0; | ||
177 | setLength(); | ||
178 | } else { | ||
179 | return true; | ||
180 | } | ||
94 | } | 181 | } |
182 | |||
183 | return false; | ||
95 | } | 184 | } |
96 | 185 | ||
97 | public static enum MessageWindowLocation | 186 | public static enum MessageWindowLocation |