summary refs log tree commit diff stats
path: root/src/com/fourisland/fourpuzzle/Display.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/fourisland/fourpuzzle/Display.java')
-rwxr-xr-xsrc/com/fourisland/fourpuzzle/Display.java61
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 }