Set up the level play view to show the guide on startup based on the showGuide property.

This commit is contained in:
Scott Erickson 2014-03-07 15:18:56 -08:00
parent 13b9a9cb58
commit 8fa9c9c410
3 changed files with 29 additions and 4 deletions

View file

@ -229,6 +229,7 @@ module.exports = class LevelLoader extends CocoClass
notifyProgress: ->
Backbone.Mediator.publish 'level-loader:progress-changed', progress: @progress()
@initWorld() if @allDone()
@trigger 'progress'
@trigger 'loaded-all' if @progress() is 1
destroy: ->

View file

@ -99,10 +99,11 @@ module.exports = class CocoView extends Backbone.View
view = application.router.getView(target, '_modal') # could set up a system for loading cached modals, if told to
@openModalView(view)
openModalView: (modalView) ->
return if @waitingModal # can only have one waiting at once
openModalView: (modalView, softly=false) ->
return if waitingModal # can only have one waiting at once
if visibleModal
waitingModal = modalView
return if softly
return visibleModal.hide() if visibleModal.$el.is(':visible') # close, then this will get called again
return @modalClosed(visibleModal) # was closed, but modalClosed was not called somehow
modalView.render()

View file

@ -16,6 +16,7 @@ LevelLoader = require 'lib/LevelLoader'
LevelSession = require 'models/LevelSession'
Level = require 'models/Level'
LevelComponent = require 'models/LevelComponent'
Article = require 'models/Article'
Camera = require 'lib/surface/Camera'
AudioPlayer = require 'lib/AudioPlayer'
@ -105,7 +106,8 @@ module.exports = class PlayLevelView extends View
load: ->
@levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, sessionID: @sessionID, opponentSessionID: @getQueryVariable('opponent'), team: @getQueryVariable("team")
@levelLoader.once 'loaded-all', @onLevelLoaderLoaded
@levelLoader.once 'loaded-all', @onLevelLoaderLoaded, @
@levelLoader.on 'progress', @onLevelLoaderProgressChanged, @
@god = new God()
getRenderData: ->
@ -124,7 +126,28 @@ module.exports = class PlayLevelView extends View
@$el.find('#level-done-button').hide()
super()
onLevelLoaderLoaded: =>
onLevelLoaderProgressChanged: ->
return if @seenDocs
return unless showFrequency = @levelLoader.level.get('showGuide')
session = @levelLoader.session
diff = new Date().getTime() - new Date(session.get('created')).getTime()
return if showFrequency is 'first-time' and diff > (5 * 60 * 1000)
return unless @levelLoader.level.loaded
articles = @levelLoader.supermodel.getModels Article
for article in articles
return unless article.loaded
@showGuide()
showGuide: ->
@seenDocs = true
DocsModal = require './level/modal/docs_modal'
options = {docs: @levelLoader.level.get('documentation'), supermodel: @supermodel}
@openModalView(new DocsModal(options), true)
Backbone.Mediator.subscribeOnce 'modal-closed', @onLevelLoaderLoaded, @
return true
onLevelLoaderLoaded: ->
return unless @levelLoader.progress() is 1 # double check, since closing the guide may trigger this early
# Save latest level played in local storage
if window.currentModal and not window.currentModal.destroyed
@loadingScreen.showReady()