mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-02-17 08:50:58 -05:00
Changed LevelLoader to always deeply load components and thang types, not just for hero levels.
This commit is contained in:
parent
e3bc9045d1
commit
154b91c753
2 changed files with 16 additions and 42 deletions
|
@ -155,21 +155,22 @@ module.exports = class LevelLoader extends CocoClass
|
|||
@worldNecessities = @worldNecessities.concat worldNecessities
|
||||
|
||||
loadItemThangsEquippedByLevelThang: (levelThang) ->
|
||||
return unless levelThang.components
|
||||
for component in levelThang.components
|
||||
if component.original is LevelComponent.EquipsID and inventory = component.config?.inventory
|
||||
for itemThangType in _.values(inventory)
|
||||
unless itemThangType
|
||||
console.warn "Empty item in inventory for", levelThang
|
||||
continue
|
||||
url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
|
||||
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
||||
@loadItemThangsFromComponentList levelThang.components
|
||||
|
||||
loadItemThangsEquippedByThangType: (thangType) ->
|
||||
@loadItemThangsFromComponentList thangType.get('components')
|
||||
|
||||
loadItemThangsFromComponentList: (components) ->
|
||||
equipsThangComponent = _.find components, (c) -> c.original is LevelComponent.EquipsID
|
||||
inventory = equipsThangComponent?.config?.inventory
|
||||
for itemThangType in _.values inventory
|
||||
url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
|
||||
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
||||
|
||||
onThangNamesLoaded: (thangNames) ->
|
||||
if @level.get('type') is 'hero'
|
||||
for thangType in thangNames.models
|
||||
@loadDefaultComponentsForThangType(thangType)
|
||||
@loadEquippedItemsInheritedFromThangType(thangType)
|
||||
for thangType in thangNames.models
|
||||
@loadDefaultComponentsForThangType(thangType)
|
||||
@loadItemThangsEquippedByThangType(thangType)
|
||||
|
||||
loadDefaultComponentsForThangType: (thangType) ->
|
||||
return unless components = thangType.get('components')
|
||||
|
@ -177,23 +178,11 @@ module.exports = class LevelLoader extends CocoClass
|
|||
url = "/db/level.component/#{component.original}/version/#{component.majorVersion}"
|
||||
@worldNecessities.push @maybeLoadURL(url, LevelComponent, 'component')
|
||||
|
||||
loadEquippedItemsInheritedFromThangType: (thangType) ->
|
||||
for levelThang in @level.get('thangs') or []
|
||||
if levelThang.thangType is thangType.get('original')
|
||||
levelThang = $.extend true, {}, levelThang
|
||||
@level.denormalizeThang(levelThang, @supermodel)
|
||||
equipsComponent = _.find levelThang.components, {original: LevelComponent.EquipsID}
|
||||
inventory = equipsComponent?.config?.inventory
|
||||
continue unless inventory
|
||||
for itemThangType in _.values inventory
|
||||
url = "/db/thang.type/#{itemThangType}/version?project=name,components,original"
|
||||
@worldNecessities.push @maybeLoadURL(url, ThangType, 'thang')
|
||||
|
||||
onWorldNecessityLoaded: (resource) ->
|
||||
index = @worldNecessities.indexOf(resource)
|
||||
if (@level?.loading or (@level?.get('type') is 'hero')) and resource.name is 'thang'
|
||||
if resource.name is 'thang'
|
||||
@loadDefaultComponentsForThangType(resource.model)
|
||||
@loadEquippedItemsInheritedFromThangType(resource.model)
|
||||
@loadItemThangsEquippedByThangType(resource.model)
|
||||
|
||||
return unless index >= 0
|
||||
@worldNecessities.splice(index, 1)
|
||||
|
|
|
@ -7,7 +7,6 @@ LevelLoader = require 'lib/LevelLoader'
|
|||
# LEVELS
|
||||
|
||||
levelWithOgreWithMace = {
|
||||
type: 'hero'
|
||||
thangs: [{
|
||||
thangType: 'ogre'
|
||||
components: [{
|
||||
|
@ -19,14 +18,12 @@ levelWithOgreWithMace = {
|
|||
}
|
||||
|
||||
levelWithShaman = {
|
||||
type: 'hero'
|
||||
thangs: [{
|
||||
thangType: 'shaman'
|
||||
}]
|
||||
}
|
||||
|
||||
levelWithShamanWithSuperWand = {
|
||||
type: 'hero'
|
||||
thangs: [{
|
||||
thangType: 'shaman'
|
||||
components: [{
|
||||
|
@ -180,15 +177,3 @@ describe 'LevelLoader', ->
|
|||
requests = jasmine.Ajax.requests.all()
|
||||
urls = (r.url for r in requests)
|
||||
expect('/db/level.component/poisons/version/0' in urls).toBeTruthy()
|
||||
|
||||
it 'does not load item thang types from thang type equips component configs which are overriden by level thang equips component configs', ->
|
||||
new LevelLoader({supermodel:new SuperModel(), sessionID: 'id', levelID: 'id'})
|
||||
|
||||
responses =
|
||||
'/db/level/id': levelWithShamanWithSuperWand
|
||||
'/db/thang.type/names': [thangTypeShamanWithWandEquipped]
|
||||
|
||||
jasmine.Ajax.requests.sendResponses(responses)
|
||||
requests = jasmine.Ajax.requests.all()
|
||||
urls = (r.url for r in requests)
|
||||
expect('/db/thang.type/wand/version?project=name,components,original' in urls).toBeFalsy()
|
||||
|
|
Loading…
Reference in a new issue