diff options
Diffstat (limited to 'src/com/fourisland/fourpuzzle/Display.java')
-rwxr-xr-x | src/com/fourisland/fourpuzzle/Display.java | 61 |
1 files changed, 34 insertions, 27 deletions
diff --git a/src/com/fourisland/fourpuzzle/Display.java b/src/com/fourisland/fourpuzzle/Display.java index a8c9a37..c8d17d9 100755 --- a/src/com/fourisland/fourpuzzle/Display.java +++ b/src/com/fourisland/fourpuzzle/Display.java | |||
@@ -198,47 +198,54 @@ public class Display { | |||
198 | transitionRunning = true; | 198 | transitionRunning = true; |
199 | 199 | ||
200 | transitionWait = new CountDownLatch(1); | 200 | transitionWait = new CountDownLatch(1); |
201 | transitionWait.await(); | ||
202 | 201 | ||
203 | Display.transition = null; | 202 | try { |
203 | transitionWait.await(); | ||
204 | } catch (InterruptedException ex) { | ||
205 | throw ex; | ||
206 | } finally { | ||
207 | Display.transition = null; | ||
204 | 208 | ||
205 | if (!startedTransition) | 209 | if (!startedTransition) |
206 | { | 210 | { |
207 | transitionRunning = false; | 211 | transitionRunning = false; |
212 | } | ||
208 | } | 213 | } |
209 | } | 214 | } |
210 | 215 | ||
211 | private static Executor transitioner = Executors.newSingleThreadExecutor(); | 216 | private static Executor transitioner = Executors.newSingleThreadExecutor(); |
212 | public static void transition(final OutTransition out, final GameState gameState, final InTransition in, boolean thread) | 217 | public static void transition(final OutTransition out, final GameState gameState, final InTransition in, boolean thread) throws InterruptedException |
213 | { | 218 | { |
214 | Runnable transitionCall = new Runnable() { | ||
215 | public void run() | ||
216 | { | ||
217 | try { | ||
218 | Display.transition(out); | ||
219 | Game.setGameState(gameState); | ||
220 | Display.transition(in); | ||
221 | } catch (InterruptedException ex) { | ||
222 | Thread.currentThread().interrupt(); | ||
223 | } catch (RuntimeException ex) | ||
224 | { | ||
225 | PuzzleApplication.INSTANCE.reportError(ex); | ||
226 | } catch (Error ex) | ||
227 | { | ||
228 | PuzzleApplication.INSTANCE.reportError(ex); | ||
229 | } | ||
230 | } | ||
231 | }; | ||
232 | |||
233 | if (thread) | 219 | if (thread) |
234 | { | 220 | { |
221 | Runnable transitionCall = new Runnable() { | ||
222 | public void run() | ||
223 | { | ||
224 | try { | ||
225 | Display.transition(out); | ||
226 | Game.setGameState(gameState); | ||
227 | Display.transition(in); | ||
228 | } catch (InterruptedException ex) { | ||
229 | return; | ||
230 | } catch (RuntimeException ex) | ||
231 | { | ||
232 | PuzzleApplication.INSTANCE.reportError(ex); | ||
233 | } catch (Error ex) | ||
234 | { | ||
235 | PuzzleApplication.INSTANCE.reportError(ex); | ||
236 | } | ||
237 | } | ||
238 | }; | ||
239 | |||
235 | transitioner.execute(transitionCall); | 240 | transitioner.execute(transitionCall); |
236 | } else { | 241 | } else { |
237 | transitionCall.run(); | 242 | Display.transition(out); |
243 | Game.setGameState(gameState); | ||
244 | Display.transition(in); | ||
238 | } | 245 | } |
239 | } | 246 | } |
240 | 247 | ||
241 | public static void transition(TransitionPair trans, GameState gameState, boolean thread) | 248 | public static void transition(TransitionPair trans, GameState gameState, boolean thread) throws InterruptedException |
242 | { | 249 | { |
243 | transition(trans.getOutTransition(), gameState, trans.getInTransition(), thread); | 250 | transition(trans.getOutTransition(), gameState, trans.getInTransition(), thread); |
244 | } | 251 | } |