Fixed #1604: changing languages and reloading work better now.

This commit is contained in:
Nick Winter 2014-11-10 09:36:40 -08:00
parent ab448532f5
commit 956186b538
5 changed files with 9 additions and 17 deletions

View file

@ -91,6 +91,7 @@ module.exports =
'tome:change-language': c.object {title: 'Tome Change Language', description: 'Published when the Tome should update its programming language', required: ['language']},
language: {type: 'string'}
reload: {type: 'boolean', description: 'Whether player code should reload to the default when the language changes.'}
'tome:spell-changed-language': c.object {title: 'Spell Changed Language', description: 'Published when an individual spell has updated its code language', required: ['spell']},
spell: {type: 'object'}

View file

@ -70,7 +70,7 @@ module.exports = class ControlBarView extends CocoView
@openModalView gameMenuModal
@listenToOnce gameMenuModal, 'change-hero', ->
@setupManager?.destroy()
@setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @level.get('slug'), parent: @})
@setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @level.get('slug'), parent: @, session: @session})
@setupManager.open()
onClickHome: (e) ->

View file

@ -78,7 +78,6 @@ module.exports = class PlayLevelView extends RootView
'real-time-multiplayer:joined-game': 'onRealTimeMultiplayerJoinedGame'
'real-time-multiplayer:left-game': 'onRealTimeMultiplayerLeftGame'
'real-time-multiplayer:manual-cast': 'onRealTimeMultiplayerCast'
'level:hero-config-changed': 'onHeroConfigChanged'
events:
'click #level-done-button': 'onDonePressed'
@ -281,7 +280,7 @@ module.exports = class PlayLevelView extends RootView
# Just the level and session have been loaded by the level loader
if e.level.get('type', true) in ['hero', 'hero-ladder', 'hero-coop'] and not _.size e.session.get('heroConfig')?.inventory ? {}
@setupManager?.destroy()
@setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @levelID, parent: @})
@setupManager = new LevelSetupManager({supermodel: @supermodel, levelID: @levelID, parent: @, session: @session})
@setupManager.open()
@onRealTimeMultiplayerLevelLoaded e.session if e.level.get('type') in ['ladder', 'hero-ladder']
@ -397,18 +396,6 @@ module.exports = class PlayLevelView extends RootView
break
Backbone.Mediator.publish 'tome:cast-spell', {}
onHeroConfigChanged: (e) ->
# Doesn't work because the new inventory ThangTypes may not be loaded.
#@setLevel @level, @supermodel
#Backbone.Mediator.publish 'tome:cast-spell', {}
# We'll just make a new PlayLevelView instead
console.log 'Hero config changed; reload the level.'
Backbone.Mediator.publish 'router:navigate', {
route: window.location.pathname,
viewClass: PlayLevelView,
viewArgs: [{supermodel: @supermodel, autoUnveil: true}, @levelID]
}
onWindowResize: (e) => @endHighlight()
onDisableControls: (e) ->
@ -433,7 +420,7 @@ module.exports = class PlayLevelView extends RootView
@victorySeen = true
victoryTime = (new Date()) - @loadEndTime
if victoryTime > 10 * 1000 # Don't track it if we're reloading an already-beaten level
application.tracker?.trackEvent 'Saw Victory',
application.tracker?.trackEvent 'Saw Victory',
level: @level.get('name')
label: @level.get('name')
getDirectFirstGroup: me.getDirectFirstGroup()

View file

@ -231,7 +231,10 @@ module.exports = class TomeView extends CocoView
updateLanguageForAllSpells: (e) ->
spell.updateLanguageAether e.language for spellKey, spell of @spells when spell.canWrite()
@cast()
if e.reload
@reloadAllCode()
else
@cast()
onSelectPrimarySprite: (e) ->
# TODO: this may not be correct

View file

@ -175,6 +175,7 @@ module.exports = class PlayHeroesModal extends ModalView
if @session.get('codeLanguage') isnt @codeLanguage
@session.set('codeLanguage', @codeLanguage)
changed = true
Backbone.Mediator.publish 'tome:change-language', language: @codeLanguage, reload: true
@session.patch() if changed