mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-16 00:19:50 -05:00
Improved the LayerAdapter to more accurately adjust its size downward if it renders a spritesheet, handle when a single thang is too large, and cancels in-progress async builds if a new one starts.
This commit is contained in:
parent
5bb1275cea
commit
d02d58ed4e
1 changed files with 14 additions and 3 deletions
|
@ -222,6 +222,8 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
|
|||
@_renderNewSpriteSheet()
|
||||
|
||||
_renderNewSpriteSheet: (async) ->
|
||||
@asyncBuilder.stopAsync() if @asyncBuilder
|
||||
|
||||
async ?= @buildAsync
|
||||
builder = new createjs.SpriteSheetBuilder()
|
||||
groups = _.groupBy(@toRenderBundles, ((bundle) -> @renderGroupingKey(bundle.thangType, '', bundle.colorConfig)), @)
|
||||
|
@ -259,8 +261,13 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
|
|||
@renderRasterThangType(thangType, builder)
|
||||
|
||||
if async
|
||||
builder.buildAsync()
|
||||
try
|
||||
builder.buildAsync()
|
||||
catch e
|
||||
@resolutionFactor *= 0.9
|
||||
return @_renderNewSpriteSheet(async)
|
||||
builder.on 'complete', @onBuildSpriteSheetComplete, @, true, builder
|
||||
@asyncBuilder = builder
|
||||
else
|
||||
sheet = builder.build()
|
||||
@onBuildSpriteSheetComplete({async:async}, builder)
|
||||
|
@ -268,10 +275,14 @@ module.exports = LayerAdapter = class LayerAdapter extends CocoClass
|
|||
|
||||
onBuildSpriteSheetComplete: (e, builder) ->
|
||||
return if @initializing
|
||||
@asyncBuilder = null
|
||||
|
||||
if builder.spriteSheet._images.length > 1
|
||||
@resolutionFactor *= 0.9
|
||||
console.debug('Sprite sheet is too large... re-rendering at', @resolutionFactor.toFixed(2))
|
||||
total = 0
|
||||
# get a rough estimate of how much smaller the spritesheet needs to be
|
||||
for image, index in builder.spriteSheet._images
|
||||
total += image.height / builder.maxHeight
|
||||
@resolutionFactor /= (Math.max(1.1, Math.sqrt(total)))
|
||||
@_renderNewSpriteSheet(e.async)
|
||||
return
|
||||
|
||||
|
|
Loading…
Reference in a new issue