Set up course-ladder level handling
* LadderView displays course info, different style for course-ladder levels * LadderView hides simulate tab for course-ladder levels * HeroVictoryModal links to LadderView for course-ladder levels * CourseDetails page links to LadderView for course-ladder levels * Enable course instances for league simulation
This commit is contained in:
parent
890d528d80
commit
7a6c42b89f
8 changed files with 80 additions and 19 deletions
app
styles/play/ladder
templates
views
courses
ladder
play/level/modal
server/queues/scoring
|
@ -5,6 +5,22 @@
|
||||||
margin: -14px -12px 20px -12px
|
margin: -14px -12px 20px -12px
|
||||||
padding-bottom: 30px
|
padding-bottom: 30px
|
||||||
border-bottom: 1px solid #888
|
border-bottom: 1px solid #888
|
||||||
|
|
||||||
|
#course-header
|
||||||
|
background-color: black
|
||||||
|
font-size: 24px
|
||||||
|
padding: 6px 4px 8px
|
||||||
|
font-weight: bold
|
||||||
|
|
||||||
|
#course-details-link
|
||||||
|
position: absolute
|
||||||
|
background-color: white
|
||||||
|
padding: 2px 5px
|
||||||
|
a
|
||||||
|
color: black
|
||||||
|
|
||||||
|
#course-name
|
||||||
|
color: white
|
||||||
|
|
||||||
#level-column
|
#level-column
|
||||||
padding-top: 14px
|
padding-top: 14px
|
||||||
|
@ -13,6 +29,12 @@
|
||||||
img
|
img
|
||||||
margin-top: -14px
|
margin-top: -14px
|
||||||
width: 100%
|
width: 100%
|
||||||
|
|
||||||
|
#course-h1
|
||||||
|
color: black
|
||||||
|
font-size: 72px
|
||||||
|
text-transform: capitalize
|
||||||
|
margin-top: 0
|
||||||
|
|
||||||
h1
|
h1
|
||||||
text-align: center
|
text-align: center
|
||||||
|
|
|
@ -273,7 +273,7 @@ mixin levels-tab
|
||||||
tr
|
tr
|
||||||
td
|
td
|
||||||
if lastLevelCompleted || adminMode
|
if lastLevelCompleted || adminMode
|
||||||
button.btn.btn-success.btn-play-level(data-level-slug=level.slug, data-i18n="home.play")
|
button.btn.btn-success.btn-play-level(data-level-slug=level.slug, data-i18n="home.play", data-level-id=levelID)
|
||||||
td
|
td
|
||||||
if userLevelStateMap[me.id]
|
if userLevelStateMap[me.id]
|
||||||
div= userLevelStateMap[me.id][levelID]
|
div= userLevelStateMap[me.id][levelID]
|
||||||
|
|
|
@ -3,14 +3,28 @@ block content
|
||||||
- var base = "/images/pages/play/ladder/prize_";
|
- var base = "/images/pages/play/ladder/prize_";
|
||||||
|
|
||||||
div#ladder-top
|
div#ladder-top
|
||||||
|
|
||||||
|
if leagueType == 'course'
|
||||||
|
#course-header
|
||||||
|
#course-details-link
|
||||||
|
a(href="/courses/"+view.course.id+"/"+view.league.id)
|
||||||
|
span.glyphicon.glyphicon-arrow-left
|
||||||
|
span.spl Levels
|
||||||
|
|
||||||
|
.text-center
|
||||||
|
span#course-name
|
||||||
|
span= view.course.get('name')
|
||||||
|
span.spl - Arena
|
||||||
|
|
||||||
|
|
||||||
div#level-column
|
div#level-column
|
||||||
|
if leagueType === 'course'
|
||||||
|
h1#course-h1= (level.get('name') || '').toUpperCase()
|
||||||
|
|
||||||
if levelDescription
|
if levelDescription
|
||||||
div!= levelDescription
|
div!= levelDescription
|
||||||
else
|
|
||||||
h1= level.get('name')
|
|
||||||
|
|
||||||
if league
|
if leagueType === 'clan'
|
||||||
h1.league-header
|
h1.league-header
|
||||||
a(href="/#{leagueType == 'clan' ? 'clans' : leagueType}/#{league.id}")= league.get('name')
|
a(href="/#{leagueType == 'clan' ? 'clans' : leagueType}/#{league.id}")= league.get('name')
|
||||||
span.spl(data-i18n="ladder.league") League
|
span.spl(data-i18n="ladder.league") League
|
||||||
|
@ -132,9 +146,10 @@ block content
|
||||||
span= team.displayName
|
span= team.displayName
|
||||||
div.column.col-md-2
|
div.column.col-md-2
|
||||||
|
|
||||||
.spectate-button-container
|
if leagueType !== 'course'
|
||||||
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
|
.spectate-button-container
|
||||||
span(data-i18n="play.spectate") Spectate
|
a(href="/play/spectate/#{level.get('slug')}" + (league ? "?league=" + league.id : "")).spectate-button.btn.btn-illustrated.btn-info.center
|
||||||
|
span(data-i18n="play.spectate") Spectate
|
||||||
|
|
||||||
ul.nav.nav-pills
|
ul.nav.nav-pills
|
||||||
li.active
|
li.active
|
||||||
|
@ -142,8 +157,9 @@ block content
|
||||||
if !me.get('anonymous')
|
if !me.get('anonymous')
|
||||||
li
|
li
|
||||||
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
|
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
|
||||||
li
|
if leagueType !== 'course'
|
||||||
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
|
li
|
||||||
|
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
|
||||||
if level.get('name') == 'Greed'
|
if level.get('name') == 'Greed'
|
||||||
li
|
li
|
||||||
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes
|
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes
|
||||||
|
|
|
@ -218,11 +218,18 @@ module.exports = class CourseDetailsView extends RootView
|
||||||
|
|
||||||
onClickPlayLevel: (e) ->
|
onClickPlayLevel: (e) ->
|
||||||
levelSlug = $(e.target).data('level-slug')
|
levelSlug = $(e.target).data('level-slug')
|
||||||
Backbone.Mediator.publish 'router:navigate', {
|
levelID = $(e.target).data('level-id')
|
||||||
route: @getLevelURL levelSlug
|
level = @campaign.get('levels')[levelID]
|
||||||
viewClass: 'views/play/level/PlayLevelView'
|
if level.type is 'course-ladder'
|
||||||
viewArgs: [{courseID: @courseID, courseInstanceID: @courseInstanceID}, levelSlug]
|
Backbone.Mediator.publish 'router:navigate', {
|
||||||
}
|
route: '/play/ladder/' + levelSlug + '/course/' + @courseInstance.id
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Backbone.Mediator.publish 'router:navigate', {
|
||||||
|
route: @getLevelURL levelSlug
|
||||||
|
viewClass: 'views/play/level/PlayLevelView'
|
||||||
|
viewArgs: [{courseID: @courseID, courseInstanceID: @courseInstanceID}, levelSlug]
|
||||||
|
}
|
||||||
|
|
||||||
getLevelURL: (levelSlug) ->
|
getLevelURL: (levelSlug) ->
|
||||||
"/play/level/#{levelSlug}?course=#{@courseID}&course-instance=#{@courseInstanceID}"
|
"/play/level/#{levelSlug}?course=#{@courseID}&course-instance=#{@courseInstanceID}"
|
||||||
|
|
|
@ -81,6 +81,7 @@ module.exports = class LadderPlayModal extends ModalView
|
||||||
# PART 4: Render
|
# PART 4: Render
|
||||||
|
|
||||||
finishRendering: ->
|
finishRendering: ->
|
||||||
|
return if @destroyed
|
||||||
@checkTutorialLevelExists (exists) =>
|
@checkTutorialLevelExists (exists) =>
|
||||||
@tutorialLevelExists = exists
|
@tutorialLevelExists = exists
|
||||||
@render()
|
@render()
|
||||||
|
|
|
@ -13,7 +13,8 @@ LadderPlayModal = require './LadderPlayModal'
|
||||||
CocoClass = require 'core/CocoClass'
|
CocoClass = require 'core/CocoClass'
|
||||||
|
|
||||||
Clan = require 'models/Clan'
|
Clan = require 'models/Clan'
|
||||||
#CourseInstance = require 'models/CourseInstance'
|
CourseInstance = require 'models/CourseInstance'
|
||||||
|
Course = require 'models/Course'
|
||||||
|
|
||||||
HIGHEST_SCORE = 1000000
|
HIGHEST_SCORE = 1000000
|
||||||
|
|
||||||
|
@ -44,13 +45,20 @@ module.exports = class LadderView extends RootView
|
||||||
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(@levelID), 'your_sessions', {cache: false}).model
|
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(@levelID), 'your_sessions', {cache: false}).model
|
||||||
@teams = []
|
@teams = []
|
||||||
@loadLeague()
|
@loadLeague()
|
||||||
|
@course = new Course()
|
||||||
|
|
||||||
loadLeague: ->
|
loadLeague: ->
|
||||||
@leagueID = @leagueType = null unless @leagueType in ['clan'] #, 'course']
|
@leagueID = @leagueType = null unless @leagueType in ['clan', 'course']
|
||||||
return unless @leagueID
|
return unless @leagueID
|
||||||
modelClass = if @leagueType is 'clan' then Clan else null# else CourseInstance
|
modelClass = if @leagueType is 'clan' then Clan else CourseInstance
|
||||||
resourceString = if @leagueType is 'clan' then 'clans.clan' else null# else 'courses.course'
|
resourceString = if @leagueType is 'clan' then 'clans.clan' else 'courses.course'
|
||||||
@league = @supermodel.loadModel(new modelClass(_id: @leagueID), resourceString).model
|
@league = @supermodel.loadModel(new modelClass(_id: @leagueID), resourceString).model
|
||||||
|
if @leagueType is 'course'
|
||||||
|
@listenToOnce @league, 'sync', @onCourseInstanceLoaded
|
||||||
|
|
||||||
|
onCourseInstanceLoaded: (courseInstance) ->
|
||||||
|
course = new Course({_id: courseInstance.get('courseID')})
|
||||||
|
@course = @supermodel.loadModel(course, 'courses.course').model
|
||||||
|
|
||||||
onLoaded: ->
|
onLoaded: ->
|
||||||
@teams = teamDataFromLevel @level
|
@teams = teamDataFromLevel @level
|
||||||
|
|
|
@ -441,6 +441,13 @@ module.exports = class HeroVictoryModal extends ModalView
|
||||||
viewClass = require 'views/courses/CourseDetailsView'
|
viewClass = require 'views/courses/CourseDetailsView'
|
||||||
viewArgs.push @courseID
|
viewArgs.push @courseID
|
||||||
viewArgs.push @courseInstanceID if @courseInstanceID
|
viewArgs.push @courseInstanceID if @courseInstanceID
|
||||||
|
else if @level.get('type', true) is 'course-ladder'
|
||||||
|
leagueID = @getQueryVariable 'league'
|
||||||
|
link = "/play/ladder/"+@level.get('slug')+"/course/"+leagueID
|
||||||
|
Backbone.Mediator.publish 'router:navigate', {
|
||||||
|
route: link
|
||||||
|
}
|
||||||
|
return
|
||||||
else
|
else
|
||||||
viewClass = require 'views/play/CampaignView'
|
viewClass = require 'views/play/CampaignView'
|
||||||
viewArgs = [options, @getNextLevelCampaign()]
|
viewArgs = [options, @getNextLevelCampaign()]
|
||||||
|
|
|
@ -67,7 +67,7 @@ updateSessionToSubmit = (transpiledCode, user, sessionToUpdate, callback) ->
|
||||||
|
|
||||||
# Reset all league stats as well, and enter the session into any leagues the user is currently part of (not retroactive when joining new leagues)
|
# Reset all league stats as well, and enter the session into any leagues the user is currently part of (not retroactive when joining new leagues)
|
||||||
leagueIDs = user.get('clans') or []
|
leagueIDs = user.get('clans') or []
|
||||||
#leagueIDs = leagueIDs.concat user.get('courseInstances') or []
|
leagueIDs = leagueIDs.concat user.get('courseInstances') or []
|
||||||
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to save them as strings.
|
leagueIDs = (leagueID + '' for leagueID in leagueIDs) # Make sure to save them as strings.
|
||||||
newLeagues = []
|
newLeagues = []
|
||||||
for leagueID in leagueIDs
|
for leagueID in leagueIDs
|
||||||
|
|
Reference in a new issue