mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-07 10:34:46 -04:00
Moved Hero Placeholder replacement logic to Level's denormalizeThang.
This commit is contained in:
parent
98bed57751
commit
69c22db434
4 changed files with 23 additions and 20 deletions
app
|
@ -156,11 +156,9 @@ module.exports = class LevelLoader extends CocoClass
|
|||
return if @inLevelEditor
|
||||
return unless @level.get('type') is 'hero' and hero = _.find @level.get('thangs'), id: 'Hero Placeholder'
|
||||
heroConfig = @session.get('heroConfig')
|
||||
hero.thangType = heroConfig.thangType
|
||||
hero.inventory = heroConfig.inventory # Will take effect in Level's denormalizeThang
|
||||
hero.placeholderComponents = hero.components # Will be replaced in Level's denormalizeThang
|
||||
hero.components = []
|
||||
hero.thangType = heroConfig.thangType # Will mutate the level, but we're okay showing the last-used Hero here
|
||||
#hero.id = ... ? # What do we want to do about this?
|
||||
# Actually, swapping out inventory and placeholder Components is done in Level's denormalizeThang
|
||||
|
||||
loadItemThangsEquippedByLevelThang: (levelThang) ->
|
||||
return unless levelThang.components
|
||||
|
@ -333,7 +331,7 @@ module.exports = class LevelLoader extends CocoClass
|
|||
@initialized = true
|
||||
@world = new World()
|
||||
@world.levelSessionIDs = if @opponentSessionID then [@sessionID, @opponentSessionID] else [@sessionID]
|
||||
serializedLevel = @level.serialize(@supermodel)
|
||||
serializedLevel = @level.serialize(@supermodel, @session)
|
||||
@world.loadFromLevel serializedLevel, false
|
||||
console.log 'World has been initialized from level loader.'
|
||||
|
||||
|
|
|
@ -8,8 +8,8 @@ module.exports = class Level extends CocoModel
|
|||
@schema: require 'schemas/models/level'
|
||||
urlRoot: '/db/level'
|
||||
|
||||
serialize: (supermodel) ->
|
||||
o = @denormalize supermodel
|
||||
serialize: (supermodel, session) ->
|
||||
o = @denormalize supermodel, session
|
||||
|
||||
# Figure out Components
|
||||
o.levelComponents = _.cloneDeep (lc.attributes for lc in supermodel.getModels LevelComponent)
|
||||
|
@ -28,23 +28,28 @@ module.exports = class Level extends CocoModel
|
|||
|
||||
o
|
||||
|
||||
denormalize: (supermodel) ->
|
||||
denormalize: (supermodel, session) ->
|
||||
o = $.extend true, {}, @attributes
|
||||
if @get('type') is 'hero'
|
||||
# TOOD: figure out if/when/how we are doing this for non-Hero levels that aren't expecting denormalization.
|
||||
for levelThang in o.thangs
|
||||
@denormalizeThang(levelThang, supermodel)
|
||||
@denormalizeThang(levelThang, supermodel, session)
|
||||
o
|
||||
|
||||
denormalizeThang: (levelThang, supermodel) ->
|
||||
denormalizeThang: (levelThang, supermodel, session) ->
|
||||
levelThang.components ?= []
|
||||
thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType)
|
||||
|
||||
# Empty out placeholder Components and store their values if we're the hero placeholder.
|
||||
placeholders = {}
|
||||
if levelThang.id is 'Hero Placeholder'
|
||||
for thangComponent in levelThang.components ? []
|
||||
placeholders[thangComponent.original] = thangComponent
|
||||
levelThang.components = []
|
||||
|
||||
configs = {}
|
||||
for thangComponent in levelThang.components
|
||||
configs[thangComponent.original] = thangComponent
|
||||
placeholders = {}
|
||||
for thangComponent in levelThang.placeholderComponents ? []
|
||||
placeholders[thangComponent.original] = thangComponent
|
||||
|
||||
for defaultThangComponent in thangType.get('components')
|
||||
if levelThangComponent = configs[defaultThangComponent.original]
|
||||
|
@ -70,9 +75,9 @@ module.exports = class Level extends CocoModel
|
|||
copy = $.extend true, {}, placeholderConfig
|
||||
levelThangComponent.config = _.merge copy, levelThangComponent.config
|
||||
|
||||
if levelThang.inventory and equips = _.find levelThang.components, {original: LevelComponent.EquipsID}
|
||||
# inventory is assigned from the LevelSession in LevelLoader's populateHero
|
||||
equips.config.inventory = $.extend true, {}, levelThang.inventory
|
||||
if levelThang.id is 'Hero Placeholder' and equips = _.find levelThang.components, {original: LevelComponent.EquipsID}
|
||||
inventory = session?.get('heroConfig')?.inventory
|
||||
equips.config.inventory = $.extend true, {}, inventory if inventory
|
||||
|
||||
|
||||
sortSystems: (levelSystems, systemModels) ->
|
||||
|
|
|
@ -90,7 +90,7 @@ module.exports = class SpectateLevelView extends RootView
|
|||
application.router.navigate "/play?not_found=#{@levelID}", {trigger: true}
|
||||
|
||||
setLevel: (@level, @supermodel) ->
|
||||
serializedLevel = @level.serialize @supermodel
|
||||
serializedLevel = @level.serialize @supermodel, @session
|
||||
@god?.setLevel serializedLevel
|
||||
if @world
|
||||
@world.loadFromLevel serializedLevel, false
|
||||
|
@ -155,7 +155,7 @@ module.exports = class SpectateLevelView extends RootView
|
|||
#at this point, all requisite data is loaded, and sessions are not denormalized
|
||||
team = @world.teamForPlayer(0)
|
||||
@loadOpponentTeam(team)
|
||||
@god.setLevel @level.serialize @supermodel
|
||||
@god.setLevel @level.serialize @supermodel, @session
|
||||
@god.setLevelSessionIDs if @otherSession then [@session.id, @otherSession.id] else [@session.id]
|
||||
@god.setWorldClassMap @world.classMap
|
||||
@setTeam team
|
||||
|
|
|
@ -104,7 +104,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
@supermodel.collections = givenSupermodel.collections
|
||||
@supermodel.shouldSaveBackups = givenSupermodel.shouldSaveBackups
|
||||
|
||||
serializedLevel = @level.serialize @supermodel
|
||||
serializedLevel = @level.serialize @supermodel, @session
|
||||
@god?.setLevel serializedLevel
|
||||
if @world
|
||||
@world.loadFromLevel serializedLevel, false
|
||||
|
@ -213,7 +213,7 @@ module.exports = class PlayLevelView extends RootView
|
|||
@session.set 'multiplayer', false
|
||||
|
||||
setupGod: ->
|
||||
@god.setLevel @level.serialize @supermodel
|
||||
@god.setLevel @level.serialize @supermodel, @session
|
||||
@god.setLevelSessionIDs if @otherSession then [@session.id, @otherSession.id] else [@session.id]
|
||||
@god.setWorldClassMap @world.classMap
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue