Level Editor doesn't need to load your session or its hero config (or break doing so). Fixed adding unconfigured heroes to levels busting the level.

This commit is contained in:
Nick Winter 2015-02-27 21:37:29 -08:00
parent 86d167394e
commit 44008be95f
3 changed files with 8 additions and 9 deletions
app

View file

@ -31,6 +31,7 @@ module.exports = class LevelLoader extends CocoClass
@opponentSessionID = options.opponentSessionID
@team = options.team
@headless = options.headless
@sessionless = options.sessionless
@spectateMode = options.spectateMode ? false
@observing = options.observing
@ -55,7 +56,7 @@ module.exports = class LevelLoader extends CocoClass
@listenToOnce @level, 'sync', @onLevelLoaded
onLevelLoaded: ->
@loadSession()
@loadSession() unless @sessionless
@populateLevel()
# Session Loading
@ -260,8 +261,8 @@ module.exports = class LevelLoader extends CocoClass
checkAllWorldNecessitiesRegisteredAndLoaded: ->
return false unless _.filter(@worldNecessities).length is 0
return false unless @thangNamesLoaded
return false if @sessionDependenciesRegistered and not @sessionDependenciesRegistered[@session.id]
return false if @sessionDependenciesRegistered and @opponentSession and not @sessionDependenciesRegistered[@opponentSession.id]
return false if @sessionDependenciesRegistered and not @sessionDependenciesRegistered[@session.id] and not @sessionless
return false if @sessionDependenciesRegistered and @opponentSession and not @sessionDependenciesRegistered[@opponentSession.id] and not @sessionless
true
onWorldNecessitiesLoaded: ->
@ -322,7 +323,7 @@ module.exports = class LevelLoader extends CocoClass
resource.markLoaded() if resource.spriteSheetKeys.length is 0
denormalizeSession: ->
return if @headless or @sessionDenormalized or @spectateMode
return if @headless or @sessionDenormalized or @spectateMode or @sessionless
patch =
'levelName': @level.get('name')
'levelID': @level.get('slug') or @level.id

View file

@ -58,7 +58,7 @@ module.exports = class LevelEditView extends RootView
super options
@supermodel.shouldSaveBackups = (model) ->
model.constructor.className in ['Level', 'LevelComponent', 'LevelSystem', 'ThangType']
@levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, headless: true
@levelLoader = new LevelLoader supermodel: @supermodel, levelID: @levelID, headless: true, sessionless: true
@level = @levelLoader.level
@files = new DocumentFiles(@levelLoader.level)
@supermodel.loadCollection(@files, 'file_names')

View file

@ -58,8 +58,7 @@ module.exports = class TomeView extends CocoView
afterRender: ->
super()
@worker = @createWorker()
#programmableThangs = _.filter @options.thangs, (t) -> t.isProgrammable and t.spriteName isnt 'Hero Placeholder'
programmableThangs = _.filter @options.thangs, 'isProgrammable'
programmableThangs = _.filter @options.thangs, (t) -> t.isProgrammable and t.programmableMethods
@createSpells programmableThangs, programmableThangs[0]?.world # Do before spellList, thangList, and castButton
@spellList = @insertSubView new SpellListView spells: @spells, supermodel: @supermodel, level: @options.level
@castButton = @insertSubView new CastButtonView spells: @spells, level: @options.level, session: @options.session
@ -73,7 +72,7 @@ module.exports = class TomeView extends CocoView
onNewWorld: (e) ->
thangs = _.filter e.world.thangs, 'inThangList'
programmableThangs = _.filter thangs, 'isProgrammable'
programmableThangs = _.filter thangs, (t) -> t.isProgrammable and t.programmableMethods
@createSpells programmableThangs, e.world
@spellList.adjustSpells @spells
@ -112,7 +111,6 @@ module.exports = class TomeView extends CocoView
for thang in programmableThangs
continue if @thangSpells[thang.id]?
@thangSpells[thang.id] = []
thang.programmableMethods ?= plan: {name: 'plan', source: '// Should fill in some default source.', permissions: {readwrite: ['humans']}}
for methodName, method of thang.programmableMethods
pathComponents = [thang.id, methodName]
if method.cloneOf