2014-07-17 20:20:11 -04:00
|
|
|
CocoView = require 'views/kinds/CocoView'
|
2014-01-03 13:32:13 -05:00
|
|
|
template = require 'templates/play/level/control_bar'
|
|
|
|
|
2014-07-29 13:45:01 -04:00
|
|
|
LevelGuideModal = require './modal/LevelGuideModal'
|
2014-08-08 14:36:41 -04:00
|
|
|
GameMenuModal = require 'views/game-menu/GameMenuModal'
|
2014-01-03 13:32:13 -05:00
|
|
|
|
2014-07-17 20:20:11 -04:00
|
|
|
module.exports = class ControlBarView extends CocoView
|
2014-06-30 22:16:26 -04:00
|
|
|
id: 'control-bar-view'
|
2014-01-03 13:32:13 -05:00
|
|
|
template: template
|
|
|
|
|
|
|
|
subscriptions:
|
|
|
|
'bus:player-states-changed': 'onPlayerStatesChanged'
|
|
|
|
|
|
|
|
events:
|
|
|
|
'click #docs-button': ->
|
2014-05-16 20:38:33 -04:00
|
|
|
window.tracker?.trackEvent 'Clicked Docs', level: @level.get('name'), label: @level.get('name')
|
2014-01-03 13:32:13 -05:00
|
|
|
@showGuideModal()
|
|
|
|
|
2014-03-12 20:51:09 -04:00
|
|
|
'click #next-game-button': ->
|
|
|
|
Backbone.Mediator.publish 'next-game-pressed'
|
2014-01-03 13:32:13 -05:00
|
|
|
|
2014-08-08 14:36:41 -04:00
|
|
|
'click #game-menu-button': ->
|
|
|
|
@showGameMenuModal()
|
|
|
|
|
2014-06-25 00:07:36 -04:00
|
|
|
'click': -> Backbone.Mediator.publish 'tome:focus-editor'
|
2014-01-03 13:32:13 -05:00
|
|
|
|
|
|
|
constructor: (options) ->
|
|
|
|
@worldName = options.worldName
|
|
|
|
@session = options.session
|
|
|
|
@level = options.level
|
2014-02-06 20:31:08 -05:00
|
|
|
@playableTeams = options.playableTeams
|
2014-03-12 20:51:09 -04:00
|
|
|
@spectateGame = options.spectateGame ? false
|
2014-01-03 13:32:13 -05:00
|
|
|
super options
|
|
|
|
|
|
|
|
setBus: (@bus) ->
|
|
|
|
|
|
|
|
onPlayerStatesChanged: (e) ->
|
2014-02-12 15:41:41 -05:00
|
|
|
# TODO: this doesn't fire any more. Replacement?
|
2014-01-03 13:32:13 -05:00
|
|
|
return unless @bus is e.bus
|
|
|
|
numPlayers = _.keys(e.players).length
|
|
|
|
return if numPlayers is @numPlayers
|
|
|
|
@numPlayers = numPlayers
|
|
|
|
text = 'Multiplayer'
|
|
|
|
text += " (#{numPlayers})" if numPlayers > 1
|
|
|
|
$('#multiplayer-button', @$el).text(text)
|
|
|
|
|
2014-02-26 21:58:25 -05:00
|
|
|
getRenderData: (c={}) ->
|
|
|
|
super c
|
|
|
|
c.worldName = @worldName
|
|
|
|
c.multiplayerEnabled = @session.get('multiplayer')
|
2014-05-05 18:33:08 -04:00
|
|
|
c.ladderGame = @level.get('type') is 'ladder'
|
2014-03-12 20:51:09 -04:00
|
|
|
c.spectateGame = @spectateGame
|
2014-05-05 18:33:08 -04:00
|
|
|
if @level.get('type') in ['ladder', 'ladder-tutorial']
|
|
|
|
c.homeLink = '/play/ladder/' + @level.get('slug').replace /\-tutorial$/, ''
|
|
|
|
else
|
|
|
|
c.homeLink = '/'
|
2014-08-19 00:49:58 -04:00
|
|
|
c.editorLink = "/editor/level/#{@level.get('slug')}"
|
2014-02-26 21:58:25 -05:00
|
|
|
c
|
2014-01-03 13:32:13 -05:00
|
|
|
|
2014-03-28 15:22:53 -04:00
|
|
|
afterRender: ->
|
|
|
|
super()
|
|
|
|
@guideHighlightInterval ?= setInterval @onGuideHighlight, 5 * 60 * 1000
|
|
|
|
|
|
|
|
destroy: ->
|
|
|
|
clearInterval @guideHighlightInterval if @guideHighlightInterval
|
|
|
|
super()
|
|
|
|
|
|
|
|
onGuideHighlight: =>
|
|
|
|
return if @destroyed or @guideShownOnce
|
|
|
|
@$el.find('#docs-button').hide().show('highlight', 4000)
|
|
|
|
|
2014-01-03 13:32:13 -05:00
|
|
|
showGuideModal: ->
|
|
|
|
options = {docs: @level.get('documentation'), supermodel: @supermodel}
|
2014-07-29 13:45:01 -04:00
|
|
|
@openModalView(new LevelGuideModal(options))
|
2014-03-28 15:22:53 -04:00
|
|
|
clearInterval @guideHighlightInterval
|
|
|
|
@guideHighlightInterval = null
|
2014-01-03 13:32:13 -05:00
|
|
|
|
2014-08-08 14:36:41 -04:00
|
|
|
showGameMenuModal: ->
|
2014-08-10 20:26:30 -04:00
|
|
|
@openModalView new GameMenuModal level: @level, session: @session, playableTeams: @playableTeams
|