diff options
14 files changed, 299 insertions, 154 deletions
diff --git a/src/com/fourisland/fourpuzzle/Display.java b/src/com/fourisland/fourpuzzle/Display.java index 6fab3ea..4f1e730 100644 --- a/src/com/fourisland/fourpuzzle/Display.java +++ b/src/com/fourisland/fourpuzzle/Display.java | |||
@@ -5,12 +5,18 @@ | |||
5 | 5 | ||
6 | package com.fourisland.fourpuzzle; | 6 | package com.fourisland.fourpuzzle; |
7 | 7 | ||
8 | import com.fourisland.fourpuzzle.transition.InTransition; | ||
9 | import com.fourisland.fourpuzzle.transition.MultidirectionalTransition; | ||
10 | import com.fourisland.fourpuzzle.transition.OutTransition; | ||
8 | import com.fourisland.fourpuzzle.transition.Transition; | 11 | import com.fourisland.fourpuzzle.transition.Transition; |
9 | import com.fourisland.fourpuzzle.transition.TransitionCallbackThread; | 12 | import com.fourisland.fourpuzzle.transition.TransitionDirection; |
13 | import com.fourisland.fourpuzzle.transition.TransitionUnsupportedException; | ||
10 | import java.awt.Graphics2D; | 14 | import java.awt.Graphics2D; |
11 | import java.awt.Image; | 15 | import java.awt.Image; |
12 | import java.awt.Toolkit; | 16 | import java.awt.Toolkit; |
17 | import java.awt.image.BufferedImage; | ||
13 | import java.awt.image.VolatileImage; | 18 | import java.awt.image.VolatileImage; |
19 | import java.util.concurrent.CountDownLatch; | ||
14 | import javax.swing.JDialog; | 20 | import javax.swing.JDialog; |
15 | 21 | ||
16 | /** | 22 | /** |
@@ -23,37 +29,34 @@ public class Display { | |||
23 | 29 | ||
24 | public static void render(JDialog gameFrame) | 30 | public static void render(JDialog gameFrame) |
25 | { | 31 | { |
26 | if (enabled) | 32 | VolatileImage vImg = gameFrame.createVolatileImage(Game.WIDTH, Game.HEIGHT); |
27 | { | 33 | render(gameFrame, vImg); |
28 | VolatileImage vImg = gameFrame.createVolatileImage(Game.WIDTH, Game.HEIGHT); | ||
29 | render(gameFrame, vImg); | ||
30 | 34 | ||
31 | Image img = null; | 35 | Image img = null; |
32 | do | 36 | do |
37 | { | ||
38 | int returnCode = vImg.validate(gameFrame.getGraphicsConfiguration()); | ||
39 | if (returnCode == VolatileImage.IMAGE_RESTORED) | ||
33 | { | 40 | { |
34 | int returnCode = vImg.validate(gameFrame.getGraphicsConfiguration()); | 41 | render(gameFrame, vImg); |
35 | if (returnCode == VolatileImage.IMAGE_RESTORED) | 42 | } else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) |
36 | { | 43 | { |
37 | render(gameFrame, vImg); | 44 | vImg = gameFrame.createVolatileImage(Game.WIDTH, Game.HEIGHT); |
38 | } else if (returnCode == VolatileImage.IMAGE_INCOMPATIBLE) | 45 | render(gameFrame, vImg); |
39 | { | 46 | } |
40 | vImg = gameFrame.createVolatileImage(Game.WIDTH, Game.HEIGHT); | ||
41 | render(gameFrame, vImg); | ||
42 | } | ||
43 | 47 | ||
44 | img = vImg; | 48 | img = vImg; |
45 | } while (vImg.contentsLost()); | 49 | } while (vImg.contentsLost()); |
46 | 50 | ||
47 | gameFrame.getContentPane().getGraphics().drawImage(img, 0, 0, gameFrame.getContentPane().getWidth(), gameFrame.getContentPane().getHeight(), gameFrame); | 51 | gameFrame.getContentPane().getGraphics().drawImage(img, 0, 0, gameFrame.getContentPane().getWidth(), gameFrame.getContentPane().getHeight(), gameFrame); |
48 | img.flush(); | 52 | img.flush(); |
49 | Toolkit.getDefaultToolkit().sync(); | 53 | Toolkit.getDefaultToolkit().sync(); |
50 | 54 | ||
51 | if (tileAnimationFrame == 15) | 55 | if (tileAnimationFrame == 15) |
52 | { | 56 | { |
53 | tileAnimationFrame = 0; | 57 | tileAnimationFrame = 0; |
54 | } else { | 58 | } else { |
55 | tileAnimationFrame++; | 59 | tileAnimationFrame++; |
56 | } | ||
57 | } | 60 | } |
58 | } | 61 | } |
59 | 62 | ||
@@ -68,38 +71,78 @@ public class Display { | |||
68 | 71 | ||
69 | if (transition != null) | 72 | if (transition != null) |
70 | { | 73 | { |
71 | transition.render(g); | 74 | if (transition.render(g)) |
75 | { | ||
76 | if (startedTransition) | ||
77 | { | ||
78 | midTransition = new BufferedImage(Game.WIDTH, Game.HEIGHT, BufferedImage.TYPE_INT_ARGB); | ||
79 | midTransition.getGraphics().drawImage(vImg, 0, 0, null); | ||
80 | } else { | ||
81 | midTransition = null; | ||
82 | } | ||
83 | |||
84 | transitionWait.countDown(); | ||
85 | } | ||
72 | } | 86 | } |
73 | 87 | ||
74 | Game.getGameState().render(g); | 88 | Game.getGameState().render(g); |
75 | g.dispose(); | 89 | g.dispose(); |
76 | } | 90 | } |
77 | 91 | ||
78 | public static void transition(Transition transition, Runnable callback) | 92 | private static boolean startedTransition = false; |
79 | { | ||
80 | setTransition(transition); | ||
81 | |||
82 | new Thread(new TransitionCallbackThread(callback)).start(); | ||
83 | } | ||
84 | |||
85 | private static Transition transition; | 93 | private static Transition transition; |
86 | public static Transition getTransition() | 94 | private static CountDownLatch transitionWait; |
87 | { | 95 | private static boolean transitionRunning = false; |
88 | return transition; | 96 | private static BufferedImage midTransition = null; |
89 | } | 97 | public static void transition(Transition transition) throws InterruptedException |
90 | public static void setTransition(Transition transition) | ||
91 | { | 98 | { |
99 | if (transition instanceof MultidirectionalTransition) | ||
100 | { | ||
101 | MultidirectionalTransition temp = (MultidirectionalTransition) transition; | ||
102 | |||
103 | if (startedTransition && (temp.getDirection() != TransitionDirection.In)) | ||
104 | { | ||
105 | throw new TransitionUnsupportedException(transition.getClass().getName(), TransitionDirection.In); | ||
106 | } else if (!startedTransition && (temp.getDirection() != TransitionDirection.Out)) | ||
107 | { | ||
108 | throw new TransitionUnsupportedException(transition.getClass().getName(), TransitionDirection.Out); | ||
109 | } | ||
110 | |||
111 | if (temp.getDirection() == TransitionDirection.In) | ||
112 | { | ||
113 | temp.setPreTransition(midTransition); | ||
114 | } | ||
115 | } else { | ||
116 | if (startedTransition && !(transition instanceof InTransition)) | ||
117 | { | ||
118 | throw new TransitionUnsupportedException(transition.getClass().getName(), TransitionDirection.In); | ||
119 | } else if (!startedTransition && !(transition instanceof OutTransition)) | ||
120 | { | ||
121 | throw new TransitionUnsupportedException(transition.getClass().getName(), TransitionDirection.Out); | ||
122 | } | ||
123 | |||
124 | if (transition instanceof InTransition) | ||
125 | { | ||
126 | ((InTransition) transition).setPreTransition(midTransition); | ||
127 | } | ||
128 | } | ||
129 | |||
92 | Display.transition = transition; | 130 | Display.transition = transition; |
131 | startedTransition = !startedTransition; | ||
132 | transitionRunning = true; | ||
133 | |||
134 | transitionWait = new CountDownLatch(1); | ||
135 | transitionWait.await(); | ||
136 | |||
137 | if (!startedTransition) | ||
138 | { | ||
139 | transitionRunning = false; | ||
140 | } | ||
93 | } | 141 | } |
94 | 142 | ||
95 | private static boolean enabled = true; | 143 | public static boolean isTransitionRunning() |
96 | public static boolean isEnabled() | ||
97 | { | ||
98 | return enabled; | ||
99 | } | ||
100 | public static void setEnabled(boolean aEnabled) | ||
101 | { | 144 | { |
102 | enabled = aEnabled; | 145 | return transitionRunning; |
103 | } | 146 | } |
104 | 147 | ||
105 | } | 148 | } |
diff --git a/src/com/fourisland/fourpuzzle/PuzzleApplication.java b/src/com/fourisland/fourpuzzle/PuzzleApplication.java index 1c1dde2..9225c90 100644 --- a/src/com/fourisland/fourpuzzle/PuzzleApplication.java +++ b/src/com/fourisland/fourpuzzle/PuzzleApplication.java | |||
@@ -117,12 +117,16 @@ public class PuzzleApplication extends Application { | |||
117 | 117 | ||
118 | if ((iTickCount > iTickTrigger) && (!gameSleep)) | 118 | if ((iTickCount > iTickTrigger) && (!gameSleep)) |
119 | { | 119 | { |
120 | if (Game.getKey() != null) | 120 | if (!Display.isTransitionRunning()) |
121 | { | 121 | { |
122 | Game.getGameState().processInput(); | 122 | if (Game.getKey() != null) |
123 | { | ||
124 | Game.getGameState().processInput(); | ||
125 | } | ||
126 | |||
127 | Game.getGameState().doGameCycle(); | ||
123 | } | 128 | } |
124 | 129 | ||
125 | Game.getGameState().doGameCycle(); | ||
126 | Display.render(gameFrame); | 130 | Display.render(gameFrame); |
127 | 131 | ||
128 | if (!debugSpeed) | 132 | if (!debugSpeed) |
diff --git a/src/com/fourisland/fourpuzzle/gamestate/GameOverGameState.java b/src/com/fourisland/fourpuzzle/gamestate/GameOverGameState.java index 48706ad..d20691f 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/GameOverGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/GameOverGameState.java | |||
@@ -10,11 +10,10 @@ import com.fourisland.fourpuzzle.Display; | |||
10 | import com.fourisland.fourpuzzle.Game; | 10 | import com.fourisland.fourpuzzle.Game; |
11 | import com.fourisland.fourpuzzle.SaveFile; | 11 | import com.fourisland.fourpuzzle.SaveFile; |
12 | import com.fourisland.fourpuzzle.transition.SquareTransition; | 12 | import com.fourisland.fourpuzzle.transition.SquareTransition; |
13 | import com.fourisland.fourpuzzle.transition.TransitionDirection; | ||
13 | import com.fourisland.fourpuzzle.util.ObjectLoader; | 14 | import com.fourisland.fourpuzzle.util.ObjectLoader; |
14 | import java.awt.Graphics2D; | 15 | import java.awt.Graphics2D; |
15 | import java.awt.event.KeyEvent; | 16 | import java.awt.event.KeyEvent; |
16 | import java.util.logging.Level; | ||
17 | import java.util.logging.Logger; | ||
18 | 17 | ||
19 | /** | 18 | /** |
20 | * | 19 | * |
@@ -37,16 +36,18 @@ public class GameOverGameState implements GameState { | |||
37 | if ((Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) || (Game.getKey().getKeyCode() == KeyEvent.VK_SPACE)) | 36 | if ((Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) || (Game.getKey().getKeyCode() == KeyEvent.VK_SPACE)) |
38 | { | 37 | { |
39 | Game.setSaveFile(new SaveFile()); | 38 | Game.setSaveFile(new SaveFile()); |
40 | //Display.transition(SquareTransition.class, this, new TitleScreenGameState()); | 39 | |
41 | Display.transition(new SquareTransition(true), new Runnable() { | 40 | new Thread(new Runnable() { |
42 | public void run() { | 41 | public void run() { |
43 | try { | 42 | try { |
44 | Game.setGameState(new TitleScreenGameState()); | 43 | Display.transition(new SquareTransition(TransitionDirection.Out)); |
45 | } catch (Exception ex) { | 44 | } catch (InterruptedException ex) { |
46 | Logger.getLogger(GameOverGameState.class.getName()).log(Level.SEVERE, null, ex); | 45 | Thread.currentThread().interrupt(); |
47 | } | 46 | } |
47 | |||
48 | Game.setGameState(new TitleScreenGameState()); | ||
48 | } | 49 | } |
49 | }); | 50 | }).start(); |
50 | } | 51 | } |
51 | } | 52 | } |
52 | 53 | ||
diff --git a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java index 683b361..0b032eb 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java +++ b/src/com/fourisland/fourpuzzle/gamestate/TitleScreenGameState.java | |||
@@ -7,6 +7,8 @@ package com.fourisland.fourpuzzle.gamestate; | |||
7 | 7 | ||
8 | import com.fourisland.fourpuzzle.*; | 8 | import com.fourisland.fourpuzzle.*; |
9 | import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState; | 9 | import com.fourisland.fourpuzzle.gamestate.mapview.MapViewGameState; |
10 | import com.fourisland.fourpuzzle.transition.SquareTransition; | ||
11 | import com.fourisland.fourpuzzle.transition.TransitionDirection; | ||
10 | import com.fourisland.fourpuzzle.util.ObjectLoader; | 12 | import com.fourisland.fourpuzzle.util.ObjectLoader; |
11 | import java.awt.Graphics2D; | 13 | import java.awt.Graphics2D; |
12 | import java.awt.event.KeyEvent; | 14 | import java.awt.event.KeyEvent; |
@@ -32,10 +34,24 @@ public class TitleScreenGameState implements GameState { | |||
32 | if (Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) | 34 | if (Game.getKey().getKeyCode() == KeyEvent.VK_ENTER) |
33 | { | 35 | { |
34 | Game.setSaveFile(new SaveFile()); | 36 | Game.setSaveFile(new SaveFile()); |
35 | Game.setGameState(new MapViewGameState("TestMap", 1, 2)); | 37 | |
36 | //Game.setGameState(new SquareTransition(this, new MapViewGameState("TestMap", 0, 0))); | 38 | new Thread(new Runnable() { |
37 | //Game.setGameState(new TransitionGameState(this, this)); | 39 | public void run() { |
38 | //Game.setGameState(new GameOverGameState()); | 40 | try { |
41 | Display.transition(new SquareTransition(TransitionDirection.Out)); | ||
42 | } catch (InterruptedException ex) { | ||
43 | Thread.currentThread().interrupt(); | ||
44 | } | ||
45 | |||
46 | Game.setGameState(new MapViewGameState("TestMap", 1, 2)); | ||
47 | |||
48 | try { | ||
49 | Display.transition(new SquareTransition(TransitionDirection.In)); | ||
50 | } catch (InterruptedException ex) { | ||
51 | Thread.currentThread().interrupt(); | ||
52 | } | ||
53 | } | ||
54 | }).start(); | ||
39 | } | 55 | } |
40 | } | 56 | } |
41 | 57 | ||
diff --git a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java index faa7a48..cf31bf1 100644 --- a/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java +++ b/src/com/fourisland/fourpuzzle/gamestate/mapview/event/SpecialEvent.java | |||
@@ -13,6 +13,8 @@ import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.AutomaticViewpoint; | |||
13 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.FixedViewpoint; | 13 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.FixedViewpoint; |
14 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.MovingViewpoint; | 14 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.MovingViewpoint; |
15 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; | 15 | import com.fourisland.fourpuzzle.gamestate.mapview.viewpoint.Viewpoint; |
16 | import com.fourisland.fourpuzzle.transition.InTransition; | ||
17 | import com.fourisland.fourpuzzle.transition.OutTransition; | ||
16 | import java.util.concurrent.CountDownLatch; | 18 | import java.util.concurrent.CountDownLatch; |
17 | 19 | ||
18 | /** | 20 | /** |
@@ -149,9 +151,33 @@ public class SpecialEvent { | |||
149 | throw new UnsupportedOperationException("Not yet implemented"); | 151 | throw new UnsupportedOperationException("Not yet implemented"); |
150 | } | 152 | } |
151 | 153 | ||
154 | private boolean startedTransition = false; | ||
155 | |||
156 | /** | ||
157 | * Displays a transition from the current map to emptiness | ||
158 | * | ||
159 | * If this method is executed before Teleport(), Teleport() will not use | ||
160 | * the database-default out transition and instead immeditatly jump to the | ||
161 | * new map. It will also not use the database-default in transition which | ||
162 | * requires you to also execute EndTransition(). | ||
163 | * | ||
164 | * @param trans The transition to use | ||
165 | * @throws InterruptedException | ||
166 | */ | ||
167 | public void StartTransition(OutTransition trans) throws InterruptedException | ||
168 | { | ||
169 | startedTransition = true; | ||
170 | |||
171 | Display.transition(trans); | ||
172 | } | ||
173 | |||
152 | /** | 174 | /** |
153 | * Moves the player to a different map | 175 | * Moves the player to a different map |
154 | * | 176 | * |
177 | * If StartTransition() is executed prior to this method, then this will | ||
178 | * not preform the database-default transitions, which requires that | ||
179 | * EndTransition() is executed after this method. | ||
180 | * | ||
155 | * @param map The name of the map to move to | 181 | * @param map The name of the map to move to |
156 | * @param x The X position on the map to move to | 182 | * @param x The X position on the map to move to |
157 | * @param y The Y position on the map to move to | 183 | * @param y The Y position on the map to move to |
@@ -162,6 +188,24 @@ public class SpecialEvent { | |||
162 | } | 188 | } |
163 | 189 | ||
164 | /** | 190 | /** |
191 | * Displays a transition from the emptiness to the new map | ||
192 | * | ||
193 | * This method is only required if you called StartTransition() before | ||
194 | * Teleport(), in which case it will display the transition. Otherwise, | ||
195 | * this action will do nothing. | ||
196 | * | ||
197 | * @param trans | ||
198 | * @throws InterruptedException | ||
199 | */ | ||
200 | public void EndTransition(InTransition trans) throws InterruptedException | ||
201 | { | ||
202 | if (startedTransition) | ||
203 | { | ||
204 | Display.transition(trans); | ||
205 | } | ||
206 | } | ||
207 | |||
208 | /** | ||
165 | * Waits for a specified interval | 209 | * Waits for a specified interval |
166 | * | 210 | * |
167 | * @param wait The time to wait in milliseconds | 211 | * @param wait The time to wait in milliseconds |
diff --git a/src/com/fourisland/fourpuzzle/transition/DoNotEraseTransition.java b/src/com/fourisland/fourpuzzle/transition/DoNotEraseTransition.java new file mode 100644 index 0000000..63c3ea3 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/transition/DoNotEraseTransition.java | |||
@@ -0,0 +1,21 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.transition; | ||
7 | |||
8 | import java.awt.Graphics2D; | ||
9 | |||
10 | /** | ||
11 | * | ||
12 | * @author hatkirby | ||
13 | */ | ||
14 | public class DoNotEraseTransition implements OutTransition { | ||
15 | |||
16 | public boolean render(Graphics2D g) | ||
17 | { | ||
18 | return true; | ||
19 | } | ||
20 | |||
21 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/InTransition.java b/src/com/fourisland/fourpuzzle/transition/InTransition.java new file mode 100644 index 0000000..a326f52 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/transition/InTransition.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.transition; | ||
7 | |||
8 | import java.awt.image.BufferedImage; | ||
9 | |||
10 | /** | ||
11 | * | ||
12 | * @author hatkirby | ||
13 | */ | ||
14 | public interface InTransition extends Transition { | ||
15 | |||
16 | public void setPreTransition(BufferedImage preTransition); | ||
17 | |||
18 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/MultidirectionalTransition.java b/src/com/fourisland/fourpuzzle/transition/MultidirectionalTransition.java new file mode 100644 index 0000000..7177179 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/transition/MultidirectionalTransition.java | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.transition; | ||
7 | |||
8 | /** | ||
9 | * | ||
10 | * @author hatkirby | ||
11 | */ | ||
12 | public interface MultidirectionalTransition extends OutTransition, InTransition { | ||
13 | |||
14 | public TransitionDirection getDirection(); | ||
15 | |||
16 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/OutTransition.java b/src/com/fourisland/fourpuzzle/transition/OutTransition.java new file mode 100644 index 0000000..37bf5b4 --- /dev/null +++ b/src/com/fourisland/fourpuzzle/transition/OutTransition.java | |||
@@ -0,0 +1,14 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.transition; | ||
7 | |||
8 | /** | ||
9 | * | ||
10 | * @author hatkirby | ||
11 | */ | ||
12 | public interface OutTransition extends Transition { | ||
13 | |||
14 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/SquareTransition.java b/src/com/fourisland/fourpuzzle/transition/SquareTransition.java index d60282d..1d8748a 100644 --- a/src/com/fourisland/fourpuzzle/transition/SquareTransition.java +++ b/src/com/fourisland/fourpuzzle/transition/SquareTransition.java | |||
@@ -7,19 +7,21 @@ package com.fourisland.fourpuzzle.transition; | |||
7 | 7 | ||
8 | import java.awt.Color; | 8 | import java.awt.Color; |
9 | import java.awt.Graphics2D; | 9 | import java.awt.Graphics2D; |
10 | import java.awt.image.BufferedImage; | ||
10 | 11 | ||
11 | /** | 12 | /** |
12 | * | 13 | * |
13 | * @author hatkirby | 14 | * @author hatkirby |
14 | */ | 15 | */ |
15 | public class SquareTransition extends Transition { | 16 | public class SquareTransition implements MultidirectionalTransition { |
16 | 17 | ||
17 | private int tick; | 18 | private int tick; |
18 | public SquareTransition(boolean from) | 19 | private TransitionDirection direction; |
20 | public SquareTransition(TransitionDirection direction) | ||
19 | { | 21 | { |
20 | setDirection(from); | 22 | this.direction = direction; |
21 | 23 | ||
22 | if (from) | 24 | if (direction == TransitionDirection.Out) |
23 | { | 25 | { |
24 | tick = 160; | 26 | tick = 160; |
25 | } else { | 27 | } else { |
@@ -27,24 +29,36 @@ public class SquareTransition extends Transition { | |||
27 | } | 29 | } |
28 | } | 30 | } |
29 | 31 | ||
30 | public void render(Graphics2D g) | 32 | public boolean render(Graphics2D g) |
31 | { | 33 | { |
32 | if (((!getDirection()) && (tick == 0)) || ((getDirection()) && (tick == 160))) | 34 | if (((direction == TransitionDirection.Out) && (tick == 0)) || ((direction == TransitionDirection.In) && (tick == 160))) |
33 | { | 35 | { |
34 | setRunning(false); | 36 | return true; |
35 | return; | ||
36 | } | 37 | } |
37 | 38 | ||
38 | if (getDirection()) | 39 | if (direction == TransitionDirection.In) |
39 | { | 40 | { |
40 | tick+=8; | 41 | tick+=8; |
41 | } else { | 42 | } else { |
42 | tick-=8; | 43 | tick-=8; |
43 | } | 44 | } |
44 | 45 | ||
45 | g.setBackground(Color.BLACK); | 46 | g.setBackground(Color.BLACK); |
46 | g.fillRect(0, 0, 320, 240); | 47 | g.fillRect(0, 0, 320, 240); |
47 | g.setClip(160-tick, 140-tick, tick*2, tick*2-40); | 48 | g.setClip(160-tick, 140-tick, tick*2, tick*2-40); |
49 | |||
50 | return false; | ||
51 | } | ||
52 | |||
53 | public TransitionDirection getDirection() | ||
54 | { | ||
55 | return direction; | ||
56 | } | ||
57 | |||
58 | private BufferedImage preTransition; | ||
59 | public void setPreTransition(BufferedImage preTransition) | ||
60 | { | ||
61 | this.preTransition = preTransition; | ||
48 | } | 62 | } |
49 | 63 | ||
50 | } | 64 | } |
diff --git a/src/com/fourisland/fourpuzzle/transition/Transition.java b/src/com/fourisland/fourpuzzle/transition/Transition.java index e25fbc9..5b4dbe8 100644 --- a/src/com/fourisland/fourpuzzle/transition/Transition.java +++ b/src/com/fourisland/fourpuzzle/transition/Transition.java | |||
@@ -11,47 +11,14 @@ import java.awt.Graphics2D; | |||
11 | * | 11 | * |
12 | * @author hatkirby | 12 | * @author hatkirby |
13 | */ | 13 | */ |
14 | public abstract class Transition { | 14 | public interface Transition { |
15 | |||
16 | private boolean way; | ||
17 | protected void setDirection(boolean from) | ||
18 | { | ||
19 | if ((from) && !(isFromSupported())) | ||
20 | { | ||
21 | throw new TransitionUnsupportedException(this.getClass().getSimpleName(), "From"); | ||
22 | } else if ((!from) && !(isToSupported())) | ||
23 | { | ||
24 | throw new TransitionUnsupportedException(this.getClass().getSimpleName(), "To"); | ||
25 | } else { | ||
26 | way = from; | ||
27 | } | ||
28 | } | ||
29 | |||
30 | public boolean getDirection() | ||
31 | { | ||
32 | return way; | ||
33 | } | ||
34 | 15 | ||
35 | public boolean isFromSupported() | 16 | /** |
36 | { | 17 | * Render the transition to the display |
37 | return true; | 18 | * |
38 | } | 19 | * @param g The graphics device to render the transition to |
39 | 20 | * @return If the transition has completed, true. Otherwise false. | |
40 | public boolean isToSupported() | 21 | */ |
41 | { | 22 | public boolean render(Graphics2D g); |
42 | return true; | ||
43 | } | ||
44 | |||
45 | public abstract void render(Graphics2D g); | ||
46 | |||
47 | private boolean running = true; | ||
48 | public boolean isRunning() | ||
49 | { | ||
50 | return running; | ||
51 | } | ||
52 | public void setRunning(boolean running) | ||
53 | { | ||
54 | this.running = running; | ||
55 | } | ||
56 | 23 | ||
57 | } | 24 | } \ No newline at end of file |
diff --git a/src/com/fourisland/fourpuzzle/transition/TransitionCallbackThread.java b/src/com/fourisland/fourpuzzle/transition/TransitionCallbackThread.java deleted file mode 100644 index 50eacc2..0000000 --- a/src/com/fourisland/fourpuzzle/transition/TransitionCallbackThread.java +++ /dev/null | |||
@@ -1,38 +0,0 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.transition; | ||
7 | |||
8 | import com.fourisland.fourpuzzle.Display; | ||
9 | |||
10 | /** | ||
11 | * | ||
12 | * @author hatkirby | ||
13 | */ | ||
14 | public class TransitionCallbackThread implements Runnable { | ||
15 | |||
16 | private Runnable callback; | ||
17 | public TransitionCallbackThread(Runnable callback) | ||
18 | { | ||
19 | this.callback = callback; | ||
20 | } | ||
21 | |||
22 | public void run() | ||
23 | { | ||
24 | while (Display.getTransition().isRunning()) | ||
25 | { | ||
26 | try { | ||
27 | Thread.sleep(300); | ||
28 | } catch (InterruptedException ex) { | ||
29 | Thread.currentThread().interrupt(); | ||
30 | } | ||
31 | } | ||
32 | |||
33 | //Display.setEnabled(false); | ||
34 | |||
35 | callback.run(); | ||
36 | } | ||
37 | |||
38 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/TransitionDirection.java b/src/com/fourisland/fourpuzzle/transition/TransitionDirection.java new file mode 100644 index 0000000..305bb5c --- /dev/null +++ b/src/com/fourisland/fourpuzzle/transition/TransitionDirection.java | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * To change this template, choose Tools | Templates | ||
3 | * and open the template in the editor. | ||
4 | */ | ||
5 | |||
6 | package com.fourisland.fourpuzzle.transition; | ||
7 | |||
8 | /** | ||
9 | * | ||
10 | * @author hatkirby | ||
11 | */ | ||
12 | public enum TransitionDirection { | ||
13 | In, | ||
14 | Out | ||
15 | } | ||
diff --git a/src/com/fourisland/fourpuzzle/transition/TransitionUnsupportedException.java b/src/com/fourisland/fourpuzzle/transition/TransitionUnsupportedException.java index 40f3db8..dfea7aa 100644 --- a/src/com/fourisland/fourpuzzle/transition/TransitionUnsupportedException.java +++ b/src/com/fourisland/fourpuzzle/transition/TransitionUnsupportedException.java | |||
@@ -11,9 +11,19 @@ package com.fourisland.fourpuzzle.transition; | |||
11 | */ | 11 | */ |
12 | public class TransitionUnsupportedException extends RuntimeException { | 12 | public class TransitionUnsupportedException extends RuntimeException { |
13 | 13 | ||
14 | public TransitionUnsupportedException(String className, String direction) | 14 | private String className; |
15 | private TransitionDirection direction; | ||
16 | |||
17 | public TransitionUnsupportedException(String className, TransitionDirection direction) | ||
18 | { | ||
19 | this.className = className; | ||
20 | this.direction = direction; | ||
21 | } | ||
22 | |||
23 | @Override | ||
24 | public String getMessage() | ||
15 | { | 25 | { |
16 | super("Transition \"" + className + "\" does not support the " + direction + " direction"); | 26 | return "Transition \"" + className + "\" does not support the " + direction.toString() + " direction"; |
17 | } | 27 | } |
18 | 28 | ||
19 | } | 29 | } |