mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-26 14:03:28 -04:00
Aether now loading all code languages possibly used in a match before the level can begin. Hopefully, this will fix #1943 and fix #1892.
This commit is contained in:
parent
7000048bee
commit
a8dc353f86
3 changed files with 16 additions and 12 deletions
|
@ -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?
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue