diff options
| author | Starla Insigna <hatkirby@fourisland.com> | 2009-03-06 15:18:53 -0500 |
|---|---|---|
| committer | Starla Insigna <hatkirby@fourisland.com> | 2009-03-06 15:18:53 -0500 |
| commit | 3c3e8ed4432fde2bdd60c49f29244a13e1e12243 (patch) | |
| tree | 9f6b1dfa53bd3d12673732adbed411f537ad31bb | |
| parent | 8e0383a3674f4d9c57b3a1b5667750a3e963a7bd (diff) | |
| download | fourpuzzle-3c3e8ed4432fde2bdd60c49f29244a13e1e12243.tar.gz fourpuzzle-3c3e8ed4432fde2bdd60c49f29244a13e1e12243.tar.bz2 fourpuzzle-3c3e8ed4432fde2bdd60c49f29244a13e1e12243.zip | |
Engine: Refactored MessageWindow
MessageWindow is now an Inputable and a Renderable, which allows it to tie in more logically with the rest of the system.
| -rwxr-xr-x | src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | 20 | ||||
| -rw-r--r-- | src/com/fourisland/fourpuzzle/window/MessageWindow.java | 85 |
2 files changed, 42 insertions, 63 deletions
| diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index 1a33158..ca3ba5e 100755 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | |||
| @@ -47,21 +47,35 @@ public class SpecialEvent { | |||
| 47 | * MessageDisplaySettings().</p> | 47 | * MessageDisplaySettings().</p> |
| 48 | * | 48 | * |
| 49 | * <p>This function also automatically splits your message up into blocks that | 49 | * <p>This function also automatically splits your message up into blocks that |
| 50 | * will fit onthe screen (breaks at spaces). If there are too many words, | 50 | * will fit on the screen (breaks at spaces). If there are too many words, |
| 51 | * they will be held and displayed in the message area after the prior | 51 | * they will be held and displayed in the message area after the prior |
| 52 | * message has been read.</p> | 52 | * message has been read.</p> |
| 53 | * | 53 | * |
| 54 | * <p>Message Escapes can be used to preform specific actions during text | ||
| 55 | * display. For instance, <code>\C[number]</code> changes the text color to | ||
| 56 | * the color on the System Graphic represented by "number".</p> | ||
| 57 | * | ||
| 54 | * @param message The message to display | 58 | * @param message The message to display |
| 55 | * @throws InterruptedException | 59 | * @throws InterruptedException |
| 56 | */ | 60 | */ |
| 57 | public void DisplayMessage(String message) throws InterruptedException | 61 | public void DisplayMessage(String message) throws InterruptedException |
| 58 | { | 62 | { |
| 63 | MessageWindow mw; | ||
| 64 | |||
| 59 | if (faceSet.equals("")) | 65 | if (faceSet.equals("")) |
| 60 | { | 66 | { |
| 61 | MessageWindow.displayMessage(message); | 67 | mw = new MessageWindow(message); |
| 62 | } else { | 68 | } else { |
| 63 | MessageWindow.displayMessage(message, faceSet, face); | 69 | mw = new MessageWindow(message, faceSet, face); |
| 64 | } | 70 | } |
| 71 | |||
| 72 | Display.registerRenderable(mw); | ||
| 73 | KeyboardInput.registerInputable(mw); | ||
| 74 | |||
| 75 | mw.waitForCompletion(); | ||
| 76 | |||
| 77 | Display.unregisterRenderable(mw); | ||
| 78 | KeyboardInput.unregisterInputable(mw); | ||
| 65 | } | 79 | } |
| 66 | 80 | ||
| 67 | /** | 81 | /** |
| diff --git a/src/com/fourisland/fourpuzzle/window/MessageWindow.java b/src/com/fourisland/fourpuzzle/window/MessageWindow.java index 709704a..43b40cf 100644 --- a/src/com/fourisland/fourpuzzle/window/MessageWindow.java +++ b/src/com/fourisland/fourpuzzle/window/MessageWindow.java | |||
| @@ -7,7 +7,6 @@ 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.KeyboardInput; | ||
| 11 | import com.fourisland.fourpuzzle.KeyInput; | 10 | import com.fourisland.fourpuzzle.KeyInput; |
| 12 | import com.fourisland.fourpuzzle.gamestate.mapview.FaceSet; | 11 | import com.fourisland.fourpuzzle.gamestate.mapview.FaceSet; |
| 13 | import com.fourisland.fourpuzzle.util.Inputable; | 12 | import com.fourisland.fourpuzzle.util.Inputable; |
| @@ -21,7 +20,7 @@ import java.util.concurrent.CountDownLatch; | |||
| 21 | * | 20 | * |
| 22 | * @author hatkirby | 21 | * @author hatkirby |
| 23 | */ | 22 | */ |
| 24 | public class MessageWindow implements Renderable { | 23 | public class MessageWindow implements Renderable, Inputable { |
| 25 | 24 | ||
| 26 | private static final int SPACER = 4; | 25 | private static final int SPACER = 4; |
| 27 | private static final int HEIGHT = (4*(Display.getFontMetrics().getHeight()+SPACER)); | 26 | private static final int HEIGHT = (4*(Display.getFontMetrics().getHeight()+SPACER)); |
| @@ -32,7 +31,7 @@ public class MessageWindow implements Renderable { | |||
| 32 | int upTo = 0; | 31 | int upTo = 0; |
| 33 | boolean bounceArrow = false; | 32 | boolean bounceArrow = false; |
| 34 | Interval in = Interval.createTickInterval(4); | 33 | Interval in = Interval.createTickInterval(4); |
| 35 | private MessageWindow(String message) | 34 | public MessageWindow(String message) |
| 36 | { | 35 | { |
| 37 | width = Game.WIDTH - Window.Default.getFullWidth(0); | 36 | width = Game.WIDTH - Window.Default.getFullWidth(0); |
| 38 | cacheBase = Window.Default.getImage(width, HEIGHT); | 37 | cacheBase = Window.Default.getImage(width, HEIGHT); |
| @@ -44,7 +43,7 @@ public class MessageWindow implements Renderable { | |||
| 44 | 43 | ||
| 45 | boolean hasFace = false; | 44 | boolean hasFace = false; |
| 46 | BufferedImage face; | 45 | BufferedImage face; |
| 47 | private MessageWindow(String message, String faceSet, int face) | 46 | public MessageWindow(String message, String faceSet, int face) |
| 48 | { | 47 | { |
| 49 | width = Game.WIDTH - Window.Default.getFullWidth(0); | 48 | width = Game.WIDTH - Window.Default.getFullWidth(0); |
| 50 | cacheBase = Window.Default.getImage(width, HEIGHT); | 49 | cacheBase = Window.Default.getImage(width, HEIGHT); |
| @@ -58,49 +57,6 @@ public class MessageWindow implements Renderable { | |||
| 58 | tr.initalizeText(message); | 57 | tr.initalizeText(message); |
| 59 | } | 58 | } |
| 60 | 59 | ||
| 61 | private static void displayMessage(final MessageWindow mw) throws InterruptedException | ||
| 62 | { | ||
| 63 | final CountDownLatch cdl = new CountDownLatch(1); | ||
| 64 | Inputable in = new Inputable() { | ||
| 65 | public void processInput(KeyInput key) | ||
| 66 | { | ||
| 67 | if (key.isActionDown()) | ||
| 68 | { | ||
| 69 | if (mw.pushEnter()) | ||
| 70 | { | ||
| 71 | cdl.countDown(); | ||
| 72 | } | ||
| 73 | |||
| 74 | key.letGo(); | ||
| 75 | } | ||
| 76 | } | ||
| 77 | }; | ||
| 78 | |||
| 79 | Display.registerRenderable(mw); | ||
| 80 | KeyboardInput.registerInputable(in); | ||
| 81 | |||
| 82 | try | ||
| 83 | { | ||
| 84 | cdl.await(); | ||
| 85 | } catch (InterruptedException ex) | ||
| 86 | { | ||
| 87 | throw ex; | ||
| 88 | } finally { | ||
| 89 | Display.unregisterRenderable(mw); | ||
| 90 | KeyboardInput.unregisterInputable(in); | ||
| 91 | } | ||
| 92 | } | ||
| 93 | |||
| 94 | public static void displayMessage(String message) throws InterruptedException | ||
| 95 | { | ||
| 96 | displayMessage(new MessageWindow(message)); | ||
| 97 | } | ||
| 98 | |||
| 99 | public static void displayMessage(String message, String faceSet, int face) throws InterruptedException | ||
| 100 | { | ||
| 101 | displayMessage(new MessageWindow(message, faceSet, face)); | ||
| 102 | } | ||
| 103 | |||
| 104 | public void render(Graphics2D g2) | 60 | public void render(Graphics2D g2) |
| 105 | { | 61 | { |
| 106 | int y = MessageWindowLocation.Bottom.getY(); | 62 | int y = MessageWindowLocation.Bottom.getY(); |
| @@ -128,26 +84,35 @@ public class MessageWindow implements Renderable { | |||
| 128 | } | 84 | } |
| 129 | } | 85 | } |
| 130 | 86 | ||
| 131 | private synchronized boolean pushEnter() | 87 | CountDownLatch cdl = new CountDownLatch(1); |
| 88 | public void waitForCompletion() throws InterruptedException | ||
| 132 | { | 89 | { |
| 133 | if (tr.isCascadingDone()) | 90 | cdl.await(); |
| 91 | } | ||
| 92 | |||
| 93 | public void processInput(KeyInput key) | ||
| 94 | { | ||
| 95 | if (key.isActionDown()) | ||
| 134 | { | 96 | { |
| 135 | int msgs = tr.numLines(); | 97 | if (tr.isCascadingDone()) |
| 136 | if (upTo >= (msgs-4)) | ||
| 137 | { | 98 | { |
| 138 | return true; | 99 | int msgs = tr.numLines(); |
| 139 | } else { | 100 | if (upTo >= (msgs-4)) |
| 140 | upTo += 4; | ||
| 141 | |||
| 142 | if (upTo > msgs) | ||
| 143 | { | 101 | { |
| 144 | upTo = msgs; | 102 | cdl.countDown(); |
| 103 | } else { | ||
| 104 | upTo += 4; | ||
| 105 | |||
| 106 | if (upTo > msgs) | ||
| 107 | { | ||
| 108 | upTo = msgs; | ||
| 109 | } | ||
| 145 | } | 110 | } |
| 146 | } | 111 | } |
| 112 | |||
| 113 | key.letGo(); | ||
| 147 | } | 114 | } |
| 148 | 115 | } | |
| 149 | return false; | ||
| 150 | } | ||
| 151 | 116 | ||
| 152 | public static enum MessageWindowLocation | 117 | public static enum MessageWindowLocation |
| 153 | { | 118 | { |
