mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-03-14 07:00:01 -04:00
Hot-swapping inventory works now.
This commit is contained in:
parent
495247661b
commit
1329d31a63
10 changed files with 46 additions and 21 deletions
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -152,3 +152,5 @@ module.exports =
|
|||
timedOut: {type: 'boolean'}
|
||||
|
||||
'level:edit-wizard-settings': c.object {}
|
||||
|
||||
'level:inventory-changed': c.object {}
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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', {}
|
||||
|
|
|
@ -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', =>
|
||||
|
|
|
@ -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 {}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue