Show level indexes in courses

This commit is contained in:
Nick Winter 2015-11-24 08:56:28 -08:00
parent d675e14f59
commit ec7f17a149
7 changed files with 10 additions and 3 deletions

View file

@ -116,6 +116,7 @@ _.extend CampaignSchema.properties, {
}} }}
campaign: c.shortString title: 'Campaign', description: 'Which campaign this level is part of (like "desert").', format: 'hidden' # Automatically set by campaign editor. campaign: c.shortString title: 'Campaign', description: 'Which campaign this level is part of (like "desert").', format: 'hidden' # Automatically set by campaign editor.
campaignIndex: c.int title: 'Campaign Index', description: 'The 0-based index of this level in its campaign.', format: 'hidden' # Automatically set by campaign editor.
tasks: c.array {title: 'Tasks', description: 'Tasks to be completed for this level.'}, c.task tasks: c.array {title: 'Tasks', description: 'Tasks to be completed for this level.'}, c.task
concepts: c.array {title: 'Programming Concepts', description: 'Which programming concepts this level covers.'}, c.concept concepts: c.array {title: 'Programming Concepts', description: 'Which programming concepts this level covers.'}, c.concept

View file

@ -344,6 +344,7 @@ _.extend LevelSchema.properties,
type: 'string', links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], format: 'latest-version-original-reference' type: 'string', links: [{rel: 'db', href: '/db/thang.type/{($)}/version'}], format: 'latest-version-original-reference'
}} }}
campaign: c.shortString title: 'Campaign', description: 'Which campaign this level is part of (like "desert").', format: 'hidden' # Automatically set by campaign editor. campaign: c.shortString title: 'Campaign', description: 'Which campaign this level is part of (like "desert").', format: 'hidden' # Automatically set by campaign editor.
campaignIndex: c.int title: 'Campaign Index', description: 'The 0-based index of this level in its campaign.', format: 'hidden' # Automatically set by campaign editor.
scoreTypes: c.array {title: 'Score Types', description: 'What metric to show leaderboards for.', uniqueItems: true}, scoreTypes: c.array {title: 'Score Types', description: 'What metric to show leaderboards for.', uniqueItems: true},
c.shortString(title: 'Score Type', 'enum': ['time', 'damage-taken', 'damage-dealt', 'gold-collected', 'difficulty']) # TODO: good version of LoC; total gear value. c.shortString(title: 'Score Type', 'enum': ['time', 'damage-taken', 'damage-dealt', 'gold-collected', 'difficulty']) # TODO: good version of LoC; total gear value.
concepts: c.array {title: 'Programming Concepts', description: 'Which programming concepts this level covers.', uniqueItems: true}, c.concept concepts: c.array {title: 'Programming Concepts', description: 'Which programming concepts this level covers.', uniqueItems: true}, c.concept

View file

@ -269,6 +269,7 @@ mixin levels-tab
tbody tbody
if campaign if campaign
- var lastLevelCompleted = true; - var lastLevelCompleted = true;
- var levelCount = 0;
each level, levelID in campaign.get('levels') each level, levelID in campaign.get('levels')
tr tr
td td
@ -281,7 +282,7 @@ mixin levels-tab
- lastLevelCompleted = userLevelStateMap[me.id][levelID] === 'complete' - lastLevelCompleted = userLevelStateMap[me.id][levelID] === 'complete'
else else
- lastLevelCompleted = false - lastLevelCompleted = false
td= level.name.replace('Course: ', '') td= ++levelCount + '. ' + level.name.replace('Course: ', '')
td td
if levelConceptMap[levelID] if levelConceptMap[levelID]
each concept in course.get('concepts') each concept in course.get('concepts')

View file

@ -22,7 +22,7 @@ else
.level-name-area .level-name-area
.level-label(data-i18n="play_level.level") .level-label(data-i18n="play_level.level")
.level-name(title=difficultyTitle || "") .level-name(title=difficultyTitle || "")
span= worldName.replace('Course: ', '') span= (campaignIndex ? (campaignIndex + 1) + '. ' : '') + worldName.replace('Course: ', '')
if levelDifficulty if levelDifficulty
sup.level-difficulty= levelDifficulty sup.level-difficulty= levelDifficulty

View file

@ -92,7 +92,7 @@ module.exports = class CampaignEditorView extends RootView
onLoaded: -> onLoaded: ->
@toSave.add @campaign if @campaign.hasLocalChanges() @toSave.add @campaign if @campaign.hasLocalChanges()
campaignLevels = $.extend({}, @campaign.get('levels')) campaignLevels = $.extend({}, @campaign.get('levels'))
for level in @levels.models for level, levelIndex in @levels.models
levelOriginal = level.get('original') levelOriginal = level.get('original')
campaignLevel = campaignLevels[levelOriginal] campaignLevel = campaignLevels[levelOriginal]
continue if not campaignLevel continue if not campaignLevel
@ -129,6 +129,8 @@ module.exports = class CampaignEditorView extends RootView
delete campaignLevel.unlocks delete campaignLevel.unlocks
# Save campaign to level, unless it's a course campaign, since we reuse hero levels for course levels. # Save campaign to level, unless it's a course campaign, since we reuse hero levels for course levels.
campaignLevel.campaign = @campaign.get 'slug' if @campaign.get('type', true) isnt 'course' campaignLevel.campaign = @campaign.get 'slug' if @campaign.get('type', true) isnt 'course'
# Save campaign index to level if it's a course campaign, since we show linear level order numbers for course levels.
campaignLevel.campaignIndex = (@levels.models.length - levelIndex - 1) if @campaign.get('type', true) is 'course'
campaignLevels[levelOriginal] = campaignLevel campaignLevels[levelOriginal] = campaignLevel
@campaign.set('levels', campaignLevels) @campaign.set('levels', campaignLevels)

View file

@ -61,6 +61,7 @@ module.exports = class ControlBarView extends CocoView
getRenderData: (c={}) -> getRenderData: (c={}) ->
super c super c
c.worldName = @worldName c.worldName = @worldName
c.campaignIndex = @level.get('campaignIndex') if @level.get('type') is 'course'
c.multiplayerEnabled = @session.get('multiplayer') c.multiplayerEnabled = @session.get('multiplayer')
c.ladderGame = @level.get('type') in ['ladder', 'hero-ladder', 'course-ladder'] c.ladderGame = @level.get('type') in ['ladder', 'hero-ladder', 'course-ladder']
if c.isMultiplayerLevel = @isMultiplayerLevel if c.isMultiplayerLevel = @isMultiplayerLevel

View file

@ -61,6 +61,7 @@ LevelHandler = class LevelHandler extends Handler
'tasks' 'tasks'
'helpVideos' 'helpVideos'
'campaign' 'campaign'
'campaignIndex'
'replayable' 'replayable'
'buildTime' 'buildTime'
'scoreTypes' 'scoreTypes'