diff --git a/src/js/actions/GlobalStateActions.js b/src/js/actions/GlobalStateActions.js index 58f3f121..f04a747e 100644 --- a/src/js/actions/GlobalStateActions.js +++ b/src/js/actions/GlobalStateActions.js @@ -14,6 +14,12 @@ var GlobalStateActions = { }); }, + levelSolved: function() { + AppDispatcher.handleViewAction({ + type: ActionTypes.LEVEL_SOLVED, + }); + }, + changeFlipTreeY: function(flipTreeY) { AppDispatcher.handleViewAction({ type: ActionTypes.CHANGE_FLIP_TREE_Y, diff --git a/src/js/constants/AppConstants.js b/src/js/constants/AppConstants.js index 393dc556..b738fbfa 100644 --- a/src/js/constants/AppConstants.js +++ b/src/js/constants/AppConstants.js @@ -25,7 +25,13 @@ module.exports = { CHANGE_FLIP_TREE_Y: null, SUBMIT_COMMAND: null, CHANGE_LOCALE: null, - CHANGE_LOCALE_FROM_HEADER: null + CHANGE_LOCALE_FROM_HEADER: null, + /** + * only dispatched when you actually + * solve the level, not ask for solution + * or solve it again. + */ + SOLVE_LEVEL: null }), PayloadSources: keyMirror({ diff --git a/src/js/level/index.js b/src/js/level/index.js index 934aa68b..0ec93a1c 100644 --- a/src/js/level/index.js +++ b/src/js/level/index.js @@ -34,8 +34,6 @@ var regexMap = { 'objective': /^(objective|assignment)$/ }; -var MAX_TIMES_SHOW_ANIMATION = 5; - var parse = util.genParseCommand(regexMap, 'processLevelCommand'); var Level = Sandbox.extend({ @@ -439,8 +437,6 @@ var Level = Sandbox.extend({ } this.hideGoal(); - window.numLevelsSolved = window.numLevelsSolved || 0; - window.numLevelsSolved++; var nextLevel = LevelStore.getNextLevel(this.level.id); var numCommands = this.gitCommandsIssued.length; @@ -448,11 +444,17 @@ var Level = Sandbox.extend({ var skipFinishDialog = this.testOption('noFinishDialog') || this.wasResetAfterSolved; - var skipFinishAnimation = this.wasResetAfterSolved || - window.numLevelsSolved > MAX_TIMES_SHOW_ANIMATION; + var skipFinishAnimation = this.wasResetAfterSolved; + if (!skipFinishAnimation) { + GlobalStateActions.levelSolved(); + } + + /** + * Speed up the animation each time we see it. + */ var speed = 1.0; - switch (window.numLevelsSolved) { + switch (GlobalStateStore.getNumLevelsSolved()) { case 2: speed = 1.5; break; @@ -466,6 +468,9 @@ var Level = Sandbox.extend({ speed = 2.4; break; } + if (GlobalStateStore.getNumLevelsSolved() > 5) { + speed = 2.5; + } var finishAnimationChain = null; if (skipFinishAnimation) { diff --git a/src/js/stores/GlobalStateStore.js b/src/js/stores/GlobalStateStore.js index 03215072..35897d2d 100644 --- a/src/js/stores/GlobalStateStore.js +++ b/src/js/stores/GlobalStateStore.js @@ -10,6 +10,7 @@ var ActionTypes = AppConstants.ActionTypes; var _isAnimating = false; var _flipTreeY = false; +var _numLevelsSolved = 0; var GlobalStateStore = assign( {}, @@ -24,6 +25,10 @@ AppConstants.StoreSubscribePrototype, return _flipTreeY; }, + getNumLevelsSolved: function() { + return _numLevelsSolved; + }, + dispatchToken: AppDispatcher.register(function(payload) { var action = payload.action; var shouldInform = false; @@ -37,6 +42,10 @@ AppConstants.StoreSubscribePrototype, _flipTreeY = action.flipTreeY; shouldInform = true; break; + case ActionTypes.LEVEL_SOLVED: + _numLevelsSolved++; + shouldInform = true; + break; } if (shouldInform) {