mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2025-04-27 06:23:41 -04:00
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
|
||||
padding-bottom: 30px
|
||||
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
|
||||
padding-top: 14px
|
||||
|
@ -13,6 +29,12 @@
|
|||
img
|
||||
margin-top: -14px
|
||||
width: 100%
|
||||
|
||||
#course-h1
|
||||
color: black
|
||||
font-size: 72px
|
||||
text-transform: capitalize
|
||||
margin-top: 0
|
||||
|
||||
h1
|
||||
text-align: center
|
||||
|
|
|
@ -273,7 +273,7 @@ mixin levels-tab
|
|||
tr
|
||||
td
|
||||
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
|
||||
if userLevelStateMap[me.id]
|
||||
div= userLevelStateMap[me.id][levelID]
|
||||
|
|
|
@ -3,14 +3,28 @@ block content
|
|||
- var base = "/images/pages/play/ladder/prize_";
|
||||
|
||||
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
|
||||
if leagueType === 'course'
|
||||
h1#course-h1= (level.get('name') || '').toUpperCase()
|
||||
|
||||
if levelDescription
|
||||
div!= levelDescription
|
||||
else
|
||||
h1= level.get('name')
|
||||
|
||||
if league
|
||||
if leagueType === 'clan'
|
||||
h1.league-header
|
||||
a(href="/#{leagueType == 'clan' ? 'clans' : leagueType}/#{league.id}")= league.get('name')
|
||||
span.spl(data-i18n="ladder.league") League
|
||||
|
@ -132,9 +146,10 @@ block content
|
|||
span= team.displayName
|
||||
div.column.col-md-2
|
||||
|
||||
.spectate-button-container
|
||||
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
|
||||
if leagueType !== 'course'
|
||||
.spectate-button-container
|
||||
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
|
||||
li.active
|
||||
|
@ -142,8 +157,9 @@ block content
|
|||
if !me.get('anonymous')
|
||||
li
|
||||
a(href="#my-matches", data-toggle="tab", data-i18n="ladder.my_matches") My Matches
|
||||
li
|
||||
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
|
||||
if leagueType !== 'course'
|
||||
li
|
||||
a(href="#simulate", data-toggle="tab", data-i18n="ladder.simulate") Simulate
|
||||
if level.get('name') == 'Greed'
|
||||
li
|
||||
a(href="#prizes", data-toggle="tab", data-i18n="ladder_prizes.prizes") Prizes
|
||||
|
|
|
@ -218,11 +218,18 @@ module.exports = class CourseDetailsView extends RootView
|
|||
|
||||
onClickPlayLevel: (e) ->
|
||||
levelSlug = $(e.target).data('level-slug')
|
||||
Backbone.Mediator.publish 'router:navigate', {
|
||||
route: @getLevelURL levelSlug
|
||||
viewClass: 'views/play/level/PlayLevelView'
|
||||
viewArgs: [{courseID: @courseID, courseInstanceID: @courseInstanceID}, levelSlug]
|
||||
}
|
||||
levelID = $(e.target).data('level-id')
|
||||
level = @campaign.get('levels')[levelID]
|
||||
if level.type is 'course-ladder'
|
||||
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) ->
|
||||
"/play/level/#{levelSlug}?course=#{@courseID}&course-instance=#{@courseInstanceID}"
|
||||
|
|
|
@ -81,6 +81,7 @@ module.exports = class LadderPlayModal extends ModalView
|
|||
# PART 4: Render
|
||||
|
||||
finishRendering: ->
|
||||
return if @destroyed
|
||||
@checkTutorialLevelExists (exists) =>
|
||||
@tutorialLevelExists = exists
|
||||
@render()
|
||||
|
|
|
@ -13,7 +13,8 @@ LadderPlayModal = require './LadderPlayModal'
|
|||
CocoClass = require 'core/CocoClass'
|
||||
|
||||
Clan = require 'models/Clan'
|
||||
#CourseInstance = require 'models/CourseInstance'
|
||||
CourseInstance = require 'models/CourseInstance'
|
||||
Course = require 'models/Course'
|
||||
|
||||
HIGHEST_SCORE = 1000000
|
||||
|
||||
|
@ -44,13 +45,20 @@ module.exports = class LadderView extends RootView
|
|||
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(@levelID), 'your_sessions', {cache: false}).model
|
||||
@teams = []
|
||||
@loadLeague()
|
||||
@course = new Course()
|
||||
|
||||
loadLeague: ->
|
||||
@leagueID = @leagueType = null unless @leagueType in ['clan'] #, 'course']
|
||||
@leagueID = @leagueType = null unless @leagueType in ['clan', 'course']
|
||||
return unless @leagueID
|
||||
modelClass = if @leagueType is 'clan' then Clan else null# else CourseInstance
|
||||
resourceString = if @leagueType is 'clan' then 'clans.clan' else null# else 'courses.course'
|
||||
modelClass = if @leagueType is 'clan' then Clan else CourseInstance
|
||||
resourceString = if @leagueType is 'clan' then 'clans.clan' else 'courses.course'
|
||||
@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: ->
|
||||
@teams = teamDataFromLevel @level
|
||||
|
|
|
@ -441,6 +441,13 @@ module.exports = class HeroVictoryModal extends ModalView
|
|||
viewClass = require 'views/courses/CourseDetailsView'
|
||||
viewArgs.push @courseID
|
||||
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
|
||||
viewClass = require 'views/play/CampaignView'
|
||||
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)
|
||||
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.
|
||||
newLeagues = []
|
||||
for leagueID in leagueIDs
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue