diff --git a/app/models/ThangType.coffee b/app/models/ThangType.coffee index 037e1f8d9..407a99e5b 100644 --- a/app/models/ThangType.coffee +++ b/app/models/ThangType.coffee @@ -1,6 +1,8 @@ CocoModel = require('./CocoModel') SpriteBuilder = require 'lib/sprites/SpriteBuilder' +buildQueue = [] + module.exports = class ThangType extends CocoModel @className: "ThangType" urlRoot: "/db/thang.type" @@ -136,7 +138,8 @@ module.exports = class ThangType extends CocoModel key = @spriteSheetKey(@options) spriteSheet = null if @options.async - @builder.buildAsync() + buildQueue.push @ + @builder.buildAsync() unless buildQueue.length > 1 @builder.on 'complete', @onBuildSpriteSheetComplete, @, true, key return true console.warn 'Building', @get('name'), @options, 'and blocking the main thread.' @@ -146,6 +149,8 @@ module.exports = class ThangType extends CocoModel spriteSheet onBuildSpriteSheetComplete: (e, key) -> + buildQueue = buildQueue.slice(1) + buildQueue[0]?.builder.buildAsync() @spriteSheets[key] = e.target.spriteSheet delete @building[key] @trigger 'build-complete' diff --git a/app/styles/play/spectate.sass b/app/styles/play/spectate.sass index dd8ee775c..0da4b10ed 100644 --- a/app/styles/play/spectate.sass +++ b/app/styles/play/spectate.sass @@ -49,8 +49,6 @@ //max-width: 1680px // guideline, but for now let's let it stretch out min-width: 1024px position: relative - #playback-view - margin: 0 auto #thang-hud margin: 0 auto display: none diff --git a/app/views/home_view.coffee b/app/views/home_view.coffee index 3d9f30db2..aabece44d 100644 --- a/app/views/home_view.coffee +++ b/app/views/home_view.coffee @@ -67,12 +67,13 @@ module.exports = class HomeView extends View createWizard: (scale=3.7) -> spriteOptions = thangID: "Beginner Wizard", resolutionFactor: scale @wizardSprite = new WizardSprite @wizardType, spriteOptions - @wizardSprite.update() wizardDisplayObject = @wizardSprite.displayObject wizardDisplayObject.x = 70 wizardDisplayObject.y = 120 wizardDisplayObject.scaleX = wizardDisplayObject.scaleY = scale wizardDisplayObject.scaleX *= -1 + @wizardSprite.queueAction 'idle' + @wizardSprite.update() @stage.addChild wizardDisplayObject @stage.update() diff --git a/app/views/play/level_view.coffee b/app/views/play/level_view.coffee index 8bd77c4ba..c5d697305 100644 --- a/app/views/play/level_view.coffee +++ b/app/views/play/level_view.coffee @@ -134,7 +134,6 @@ module.exports = class PlayLevelView extends View 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 diff --git a/app/views/play/spectate_view.coffee b/app/views/play/spectate_view.coffee index 27cfcb1f4..0a935bead 100644 --- a/app/views/play/spectate_view.coffee +++ b/app/views/play/spectate_view.coffee @@ -65,10 +65,15 @@ module.exports = class SpectateLevelView extends View 'ctrl+s': 'onCtrlS' constructor: (options, @levelID) -> + @originalOptions = _.cloneDeep(options) console.profile?() if PROFILE_ME super options - @sessionOne = @getQueryVariable 'session-one' - @sessionTwo = @getQueryVariable 'session-two' + if options.spectateSessions? + @sessionOne = options.spectateSessions.sessionOne + @sessionTwo = options.spectateSessions.sessionTwo + else + @sessionOne = @getQueryVariable 'session-one' + @sessionTwo = @getQueryVariable 'session-two' $(window).on('resize', @onWindowResize) @supermodel.once 'error', @onLevelLoadError @@ -150,6 +155,7 @@ module.exports = class SpectateLevelView extends View @initScriptManager() @insertSubviews ladderGame: @otherSession? @initVolume() + @originalSessionState = _.cloneDeep(@session.get('state')) @register() @controlBar.setBus(@bus) @@ -165,7 +171,6 @@ module.exports = class SpectateLevelView extends View name: @otherSession.get('creatorName') team: @otherSession.get('team') - grabLevelLoaderData: -> @session = @levelLoader.session @world = @levelLoader.world @@ -247,18 +252,8 @@ module.exports = class SpectateLevelView extends View $(@wasFocusedOn).focus() if @wasFocusedOn @wasFocusedOn = null - onDonePressed: -> @showVictory() + onDonePressed: -> return - onShowVictory: (e) -> - $('#level-done-button').show() - @showVictory() if e.showModal - setTimeout(@preloadNextLevel, 3000) - - showVictory: -> - options = {level: @level, supermodel: @supermodel, session:@session} - docs = new VictoryModal(options) - @openModalView(docs) - window.tracker?.trackEvent 'Saw Victory', level: @world.name, label: @world.name onNewWorld: (e) -> @world = e.world @@ -365,7 +360,7 @@ module.exports = class SpectateLevelView extends View initSurface: -> surfaceCanvas = $('canvas#surface', @$el) - @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview) + @surface = new Surface(@world, surfaceCanvas, thangTypes: @supermodel.getModels(ThangType), playJingle: not @isEditorPreview, spectateGame: true) worldBounds = @world.getBounds() bounds = [{x:worldBounds.left, y:worldBounds.top}, {x:worldBounds.right, y:worldBounds.bottom}] @surface.camera.setBounds(bounds) @@ -376,7 +371,14 @@ module.exports = class SpectateLevelView extends View @god.goalManager = @goalManager initScriptManager: -> - @scriptManager = new ScriptManager({scripts: @world.scripts or [], view:@, session: @session}) + if @world.scripts + nonVictoryPlaybackScripts = _.reject @world.scripts, (script) -> + script.id.indexOf("Set Camera Boundaries and Goals") == -1 + else + console.log "World scripts don't exist!" + nonVictoryPlaybackScripts = [] + console.log nonVictoryPlaybackScripts + @scriptManager = new ScriptManager({scripts: nonVictoryPlaybackScripts, view:@, session: @session}) @scriptManager.loadFromSession() initVolume: -> @@ -388,11 +390,6 @@ module.exports = class SpectateLevelView extends View return if @alreadyLoadedState @alreadyLoadedState = true state = @originalSessionState - if state.frame - Backbone.Mediator.publish 'level-set-time', { time: 0, frameOffset: state.frame } - if state.selected - # TODO: Should also restore selected spell here by saving spellName - Backbone.Mediator.publish 'level-select-sprite', { thangID: state.selected, spellName: null } if state.playing? Backbone.Mediator.publish 'level-set-playing', { playing: state.playing } @@ -428,11 +425,16 @@ module.exports = class SpectateLevelView extends View console.log "You want to see the next game!" @sessionOne = "53193c8f7a89df21c4d968e9" @sessionTwo = "531aa613026834331eac5e7e" - @destroy(true) - @load() - @afterRender() + url = "/play/spectate/dungeon-arena?session-one=#{@sessionOne}&session-two=#{@sessionTwo}" + Backbone.Mediator.publish 'router:navigate', { + route: url, + viewClass: SpectateLevelView, + viewArgs: [{spectateSessions:{sessionOne: @sessionOne, sessionTwo: @sessionTwo}}, "dungeon-arena"]} - destroy: (destroyHalfway)-> + + + + destroy: ()-> @supermodel?.off 'error', @onLevelLoadError @levelLoader?.off 'loaded-all', @onLevelLoaderLoaded @levelLoader?.destroy() @@ -440,11 +442,9 @@ module.exports = class SpectateLevelView extends View @god?.destroy() @goalManager?.destroy() @scriptManager?.destroy() - unless destroyHalfway - $(window).off('resize', @onWindowResize) + $(window).off('resize', @onWindowResize) delete window.world # not sure where this is set, but this is one way to clean it up clearInterval(@pointerInterval) - console.profileEnd?() if PROFILE_ME @session?.off 'change:multiplayer', @onMultiplayerChanged, @ @onLevelLoadError = null @@ -452,5 +452,4 @@ module.exports = class SpectateLevelView extends View @onSupermodelLoadedOne = null @preloadNextLevel = null @saveScreenshot = null - unless destroyHalfway - super() + super()