Changed LevelLoader to always deeply load components and thang types, not just for hero levels.

This commit is contained in:
Scott Erickson 2014-08-28 15:19:04 -07:00
parent e3bc9045d1
commit 154b91c753
2 changed files with 16 additions and 42 deletions

View file

@ -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)

View file

@ -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()