Set up a build queue for async sprite sheet building, which lessens blocking the main thread.

This commit is contained in:
Scott Erickson 2014-03-13 13:25:03 -07:00
parent c238b49f52
commit b2e9768127
2 changed files with 6 additions and 2 deletions

View file

@ -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'

View file

@ -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