From a0057910ac4752f96d54374db196ec9086dd93b5 Mon Sep 17 00:00:00 2001 From: Nick Winter <livelily@gmail.com> Date: Sat, 18 Apr 2015 19:54:34 -0700 Subject: [PATCH] Fixed #2597: press escape to abort simulation now, if your code is going to be slow. --- app/lib/Angel.coffee | 10 +++++++++- app/views/play/level/tome/SpellView.coffee | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/lib/Angel.coffee b/app/lib/Angel.coffee index 7a1fd118f..f4d4cd22d 100644 --- a/app/lib/Angel.coffee +++ b/app/lib/Angel.coffee @@ -16,6 +16,7 @@ module.exports = class Angel extends CocoClass subscriptions: 'level:flag-updated': 'onFlagEvent' 'playback:stop-real-time-playback': 'onStopRealTimePlayback' + 'level:escape-pressed': 'onEscapePressed' constructor: (@shared) -> super() @@ -165,10 +166,11 @@ module.exports = class Angel extends CocoClass @worker.postMessage func: 'finalizePreload' @work.preload = false - infinitelyLooped: => + infinitelyLooped: (escaped=false) => @say 'On infinitely looped! Aborting?', @aborting return if @aborting problem = type: 'runtime', level: 'error', id: 'runtime_InfiniteLoop', message: 'Code never finished. It\'s either really slow or has an infinite loop.' + problem.message = 'Escape pressed; code aborted.' if escaped Backbone.Mediator.publish 'god:user-code-problem', problem: problem Backbone.Mediator.publish 'god:infinite-loop', firstWorld: @shared.firstWorld @fireWorker() @@ -239,8 +241,14 @@ module.exports = class Angel extends CocoClass onStopRealTimePlayback: (e) -> return unless @running and @work.realTime @work.realTime = false + @lastRealTimeWork = new Date() @worker.postMessage func: 'stopRealTimePlayback' + onEscapePressed: (e) -> + return unless @running and not @work.realTime + return if (new Date() - @lastRealTimeWork) < 1000 # Fires right after onStopRealTimePlayback + @infinitelyLooped true + #### Synchronous code for running worlds on main thread (profiling / IE9) #### simulateSync: (work) => console?.profile? "World Generation #{(Math.random() * 1000).toFixed(0)}" if imitateIE9? diff --git a/app/views/play/level/tome/SpellView.coffee b/app/views/play/level/tome/SpellView.coffee index 5d13a8094..cb4a13db5 100644 --- a/app/views/play/level/tome/SpellView.coffee +++ b/app/views/play/level/tome/SpellView.coffee @@ -153,7 +153,6 @@ module.exports = class SpellView extends CocoView bindKey: {win: 'Escape', mac: 'Escape'} readOnly: true exec: -> - console.log 'esc pressed' Backbone.Mediator.publish 'level:escape-pressed', {} addCommand name: 'toggle-grid'