diff --git a/app/lib/LevelLoader.coffee b/app/lib/LevelLoader.coffee index 131b01688..52865a8b1 100644 --- a/app/lib/LevelLoader.coffee +++ b/app/lib/LevelLoader.coffee @@ -99,8 +99,7 @@ module.exports = class LevelLoader extends CocoClass onSupermodelError: -> onSupermodelLoadedOne: (e) -> - #if e.model instanceof ThangType - # console.log "LevelLoader loaded ThangType", e.model.get('name'), "so we should figure out how to build it." + @buildSpriteSheetsForThangType e.model if not @headless and e.model instanceof ThangType @update() # Things to do when either the Session or Supermodel load @@ -131,6 +130,51 @@ module.exports = class LevelLoader extends CocoClass tempSession.save(patch, {patch: true}) @sessionDenormalized = true + # Building sprite sheets + + grabThangTypeTeams: -> + @grabTeamConfigs() + @thangTypeTeams = {} + for thang in @level.get('thangs') + for component in thang.components + if team = component.config?.team + @thangTypeTeams[thang.thangType] ?= [] + @thangTypeTeams[thang.thangType].push team unless team in @thangTypeTeams[thang.thangType] + break + @thangTypeTeams + + grabTeamConfigs: -> + for system in @level.get('systems') + if @teamConfigs = system.config?.teamConfigs + break + unless @teamConfigs + # Hack: pulled from Alliance System code. TODO: put in just one place. + @teamConfigs = {"humans":{"superteam":"humans","color":{"hue":0,"saturation":0.75,"lightness":0.5},"playable":true},"ogres":{"superteam":"ogres","color":{"hue":0.66,"saturation":0.75,"lightness":0.5},"playable":false},"neutral":{"superteam":"neutral","color":{"hue":0.33,"saturation":0.75,"lightness":0.5}}} + @teamConfigs + + buildSpriteSheetsForThangType: (thangType) -> + @grabThangTypeTeams() unless @thangTypeTeams + for team in @thangTypeTeams[thangType.get('original')] ? [null] + spriteOptions = {resolutionFactor: 4, async: true} + if thangType.get('kind') is 'Floor' + spriteOptions.resolutionFactor = 2 + if team and color = @teamConfigs[team]?.color + spriteOptions.colorConfig = team: color + @buildSpriteSheet thangType, spriteOptions + + buildSpriteSheet: (thangType, options) -> + if thangType.get('name') is 'Wizard' + options.colorConfig = me.get('wizard')?.colorConfig or {} + building = thangType.buildSpriteSheet options + return unless building + #console.log 'Building:', thangType.get('name'), options + t0 = new Date() + @spriteSheetsToBuild += 1 + thangType.once 'build-complete', => + @spriteSheetsBuilt += 1 + @notifyProgress() + console.log "Built", thangType.get('name'), 'after', ((new Date()) - t0), 'ms' + # World init initWorld: -> @@ -139,46 +183,6 @@ module.exports = class LevelLoader extends CocoClass @world = new World @level.get('name') serializedLevel = @level.serialize(@supermodel) @world.loadFromLevel serializedLevel, false - @buildSpriteSheets() - - buildSpriteSheets: -> - return if @headless - thangTypes = {} - thangTypes[tt.get('name')] = tt for tt in @supermodel.getModels(ThangType) - - colorConfigs = @world.getTeamColors() - - thangsProduced = {} - - for thang in @world.thangs - continue unless thang.spriteName - thangType = thangTypes[thang.spriteName] - options = thang.getSpriteOptions(colorConfigs) - options.async = true - if thangType.get('kind') is 'Floor' - options.resolutionFactor = 2 - thangsProduced[thang.spriteName] = true - @buildSpriteSheet(thangType, options) - - for thangName, thangType of thangTypes - continue if thangsProduced[thangName] - thangType.spriteOptions = {resolutionFactor: 4, async: true} - if thangType.get('kind') is 'Floor' - thangType.spriteOptions.resolutionFactor = 2 - @buildSpriteSheet(thangType, thangType.spriteOptions) - - buildSpriteSheet: (thangType, options) -> - if thangType.get('name') is 'Wizard' - options.colorConfig = me.get('wizard')?.colorConfig or {} - building = thangType.buildSpriteSheet options - return unless building - console.log 'Building:', thangType.get('name'), options - t0 = new Date() - @spriteSheetsToBuild += 1 - thangType.once 'build-complete', => - @spriteSheetsBuilt += 1 - @notifyProgress() - console.log "Built", thangType.get('name'), 'after', ((new Date()) - t0), 'ms' # Initial Sound Loading diff --git a/app/models/ThangType.coffee b/app/models/ThangType.coffee index 544052316..6aaff80a5 100644 --- a/app/models/ThangType.coffee +++ b/app/models/ThangType.coffee @@ -139,7 +139,7 @@ module.exports = class ThangType extends CocoModel @builder.buildAsync() @builder.on 'complete', @onBuildSpriteSheetComplete, @, true, key return true - console.warn 'Building', @get('name'), 'and blocking the main thread.' + console.warn 'Building', @get('name'), @options, 'and blocking the main thread.' spriteSheet = @builder.build() @spriteSheets[key] = spriteSheet delete @building[key]