Aether now loading all code languages possibly used in a match before the level can begin. Hopefully, this will fix and fix .

This commit is contained in:
Nick Winter 2015-02-12 18:40:38 -08:00
parent 7000048bee
commit a8dc353f86
3 changed files with 16 additions and 12 deletions

View file

@ -91,18 +91,9 @@ module.exports = class LevelLoader extends CocoClass
loadDependenciesForSession: (session) ->
if me.id isnt session.get 'creator'
session.patch = session.save = -> console.error "Not saving session, since we didn't create it."
@loadCodeLanguagesForSession session
if session is @session
codeLanguage = session.get('codeLanguage') or me.get('aceConfig')?.language or 'python'
modulePath = "vendor/aether-#{codeLanguage}"
loading = application.moduleLoader?.load(modulePath)
if loading
@languageModuleResource = @supermodel.addSomethingResource 'language_module'
@listenTo application.moduleLoader, 'loaded', (e) ->
if e.id is modulePath
@languageModuleResource.markLoaded()
@stopListening application.moduleLoader
@addSessionBrowserInfo session
# hero-ladder games require the correct session team in level:loaded
team = @team ? @session.get('team')
Backbone.Mediator.publish 'level:loaded', level: @level, team: team
@ -138,6 +129,19 @@ module.exports = class LevelLoader extends CocoClass
if _.size(@sessionDependenciesRegistered) is 2 and @checkAllWorldNecessitiesRegisteredAndLoaded()
@onWorldNecessitiesLoaded()
loadCodeLanguagesForSession: (session) ->
codeLanguages = _.uniq _.filter [session.get('codeLanguage') or 'python', session.get('submittedCodeLanguage')]
for codeLanguage in codeLanguages
do (codeLanguage) =>
modulePath = "vendor/aether-#{codeLanguage}"
return unless application.moduleLoader?.load modulePath
languageModuleResource = @supermodel.addSomethingResource 'language_module'
onModuleLoaded = (e) ->
return unless e.id is modulePath
languageModuleResource.markLoaded()
@stopListening application.moduleLoader, 'loaded', onModuleLoaded # listenToOnce might work here instead, haven't tried
@listenTo application.moduleLoader, 'loaded', onModuleLoaded
addSessionBrowserInfo: (session) ->
return unless me.id is session.get 'creator'
return unless $.browser?

View file

@ -286,7 +286,7 @@ _.extend LevelSessionSchema.properties,
type: ['string', 'null'] # 'null' in case an opponent session got corrupted, don't care much here
description: 'What submittedCodeLanguage the opponent used during the match'
simulator: {type: 'object', description: 'Holds info on who simulated the match, and with what tools.'}
randomSeed: {type: 'integer', description: 'Stores the random seed that was used during this match.'}
randomSeed: {description: 'Stores the random seed that was used during this match.'}
c.extendBasicProperties LevelSessionSchema, 'level.session'
c.extendPermissionsProperties LevelSessionSchema, 'level.session'

View file

@ -611,7 +611,7 @@ updateMatchesInSession = (matchObject, sessionID, callback) ->
currentMatchObject.opponents = opponentsArray
currentMatchObject.codeLanguage = matchObject.opponents[opponentsArray[0].sessionID].codeLanguage
currentMatchObject.simulator = @clientResponseObject.simulator
currentMatchObject.randomSeed = @clientResponseObject.randomSeed
currentMatchObject.randomSeed = parseInt(@clientResponseObject.randomSeed or 0, 10)
LevelSession.findOne {'_id': sessionID}, (err, session) ->
session = session.toObject()
currentMatchObject.playtime = session.playtime ? 0