Hot-swapping inventory works now.

This commit is contained in:
Nick Winter 2014-08-31 15:08:52 -07:00
parent 495247661b
commit 1329d31a63
10 changed files with 46 additions and 21 deletions

View file

@ -66,15 +66,21 @@ module.exports = class LevelLoader extends CocoClass
session = new LevelSession().setURL url
@sessionResource = @supermodel.loadModel(session, 'level_session', {cache: false})
@session = @sessionResource.model
@listenToOnce @session, 'sync', ->
@session.url = -> '/db/level.session/' + @id
@loadDependenciesForSession(@session)
if @session.loaded
@loadDependenciesForSession @session
else
@listenToOnce @session, 'sync', ->
@session.url = -> '/db/level.session/' + @id
@loadDependenciesForSession @session
if @opponentSessionID
opponentSession = new LevelSession().setURL "/db/level_session/#{@opponentSessionID}"
@opponentSessionResource = @supermodel.loadModel(opponentSession, 'opponent_session')
@opponentSession = @opponentSessionResource.model
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
if @opponentSession.loaded
@loadDependenciesForSession @opponentSession
else
@listenToOnce @opponentSession, 'sync', @loadDependenciesForSession
loadDependenciesForSession: (session) ->
return if @levelID is 'sky-span' # TODO

View file

@ -143,7 +143,7 @@ module.exports.Trailmaster = class Trailmaster
i = 0
sprites = []
sprite = @sprites[thang.id]
return sprites unless sprite?
return sprites unless sprite?.actions
lastPos = @camera.surfaceToWorld x: sprite.imageObject.x, y: sprite.imageObject.y
minDistance = Math.pow(CLONE_INTERVAL * Camera.MPP, 2)
actions = @world.actionsForThang(thang.id)

View file

@ -38,17 +38,17 @@ module.exports = class Level extends CocoModel
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 ? []
for thangComponent in levelThang.components
placeholders[thangComponent.original] = thangComponent
levelThang.components = []
levelThang.components = [] # We have stored the placeholder values, so we can inherit everything else.
heroThangType = session?.get('heroConfig')?.thangType
levelThang.thangType = heroThangType if heroThangType
thangType = supermodel.getModelByOriginal(ThangType, levelThang.thangType)
configs = {}
for thangComponent in levelThang.components
configs[thangComponent.original] = thangComponent
@ -79,6 +79,7 @@ module.exports = class Level extends CocoModel
if levelThang.id is 'Hero Placeholder' and equips = _.find levelThang.components, {original: LevelComponent.EquipsID}
inventory = session?.get('heroConfig')?.inventory
equips.config ?= {}
equips.config.inventory = $.extend true, {}, inventory if inventory

View file

@ -152,3 +152,5 @@ module.exports =
timedOut: {type: 'boolean'}
'level:edit-wizard-settings': c.object {}
'level:inventory-changed': c.object {}

View file

@ -20,7 +20,7 @@ module.exports = class EmployersView extends RootView
'change #select_all_checkbox': 'handleSelectAllChange'
'click .get-started-button': 'openSignupModal'
'click .navbar-brand': 'restoreBodyColor'
'click #login-link': 'onClickAuthbutton'
'click #login-link': 'onClickAuthButton'
'click #filter-link': 'swapFolderIcon'
'click #create-alert-button': 'createFilterAlert'
'click .deletion-col': 'deleteFilterAlert'

View file

@ -13,6 +13,7 @@ module.exports = class GameMenuModal extends ModalView
template: template
modalWidthPercent: 95
id: 'game-menu-modal'
instant: true
constructor: (options) ->
super options
@ -28,6 +29,7 @@ module.exports = class GameMenuModal extends ModalView
afterRender: ->
super()
@$el.toggleClas
@insertSubView new submenuView @options for submenuView in submenuViews
(if @options.showDevBits then @subviews.inventory_view else @subviews.choose_hero_view).$el.addClass 'active'

View file

@ -240,8 +240,10 @@ module.exports = class InventoryView extends CocoView
onHidden: ->
inventory = @getCurrentEquipmentConfig()
heroConfig = @options.session.get('heroConfig') ? {}
unless _.isEqual inventory, heroConfig.inventory
heroConfig.inventory = inventory
heroConfig.thangType ?= '529ffbf1cf1818f2be000001' # Temp: assign Tharin as the hero
@options.session.set 'heroConfig', heroConfig
@options.session.patch()
return if _.isEqual inventory, heroConfig.inventory
heroConfig.inventory = inventory
heroConfig.thangType ?= '529ffbf1cf1818f2be000001' # Temp: assign Tharin as the hero
@options.session.set 'heroConfig', heroConfig
@options.session.patch success: ->
_.defer ->
Backbone.Mediator.publish 'level:inventory-changed', {}

View file

@ -6,6 +6,7 @@ module.exports = class ModalView extends CocoView
closesOnClickOutside: true
modalWidthPercent: null
plain: false
instant: false
events:
'click a': 'toggleModal'
@ -17,7 +18,7 @@ module.exports = class ModalView extends CocoView
constructor: (options) ->
options ?= {}
@className = @className.replace ' fade', '' if options.instant
@className = @className.replace ' fade', '' if options.instant or @instant
@closeButton = options.closeButton if options.closeButton?
@modalWidthPercent = options.modalWidthPercent if options.modalWidthPercent
super options
@ -35,7 +36,7 @@ module.exports = class ModalView extends CocoView
if Backbone.history.fragment is "employers"
$(@$el).find(".background-wrapper").each ->
$(this).addClass("employer-modal-background-wrapper").removeClass("background-wrapper")
if @modalWidthPercent
@$el.find('.modal-dialog').css width: "#{@modalWidthPercent}%"
@$el.on 'hide.bs.modal', =>

View file

@ -25,7 +25,7 @@ module.exports = class RootView extends CocoView
'click #logout-button': 'logoutAccount'
'change .language-dropdown': 'onLanguageChanged'
'click .toggle-fullscreen': 'toggleFullscreen'
'click .auth-button': 'onClickAuthbutton'
'click .auth-button': 'onClickAuthButton'
'click a': 'toggleModal'
'click button': 'toggleModal'
'click li': 'toggleModal'
@ -50,7 +50,7 @@ module.exports = class RootView extends CocoView
subview = new WizardSettingsModal {}
@openModalView subview
onClickAuthbutton: ->
onClickAuthButton: ->
AuthModal = require 'views/modal/AuthModal'
@openModalView new AuthModal {}

View file

@ -64,6 +64,7 @@ module.exports = class PlayLevelView extends RootView
'level:loading-view-unveiled': 'onLoadingViewUnveiled'
'playback:real-time-playback-started': 'onRealTimePlaybackStarted'
'playback:real-time-playback-ended': 'onRealTimePlaybackEnded'
'level:inventory-changed': 'onInventoryChanged'
events:
'click #level-done-button': 'onDonePressed'
@ -349,7 +350,7 @@ module.exports = class PlayLevelView extends RootView
@setLevel e.level, e.supermodel
if isReload
@scriptManager.setScripts(e.level.get('scripts'))
Backbone.Mediator.publish 'tome:cast-spell' # a bit hacky
Backbone.Mediator.publish 'tome:cast-spell', {} # a bit hacky
onLevelReloadThangType: (e) ->
tt = e.thangType
@ -358,7 +359,17 @@ module.exports = class PlayLevelView extends RootView
for key, val of tt.attributes
model.attributes[key] = val
break
Backbone.Mediator.publish 'tome:cast-spell'
Backbone.Mediator.publish 'tome:cast-spell', {}
onInventoryChanged: (e) ->
# Doesn't work because the new inventory ThangTypes may not be loaded.
#@setLevel @level, @supermodel
#Backbone.Mediator.publish 'tome:cast-spell', {}
# We'll just make a new PlayLevelView instead
Backbone.Mediator.publish 'router:navigate', {
route: window.location.pathname,
viewClass: PlayLevelView,
viewArgs: [{supermodel: @supermodel}, @levelID]}
onWindowResize: (s...) ->
$('#pointer').css('opacity', 0.0)