codecombat/app/views/ladder/MainLadderView.coffee
2016-07-14 10:26:09 -07:00

99 lines
3.3 KiB
CoffeeScript

RootView = require 'views/core/RootView'
template = require 'templates/play/ladder_home'
LevelSession = require 'models/LevelSession'
CocoCollection = require 'collections/CocoCollection'
class LevelSessionsCollection extends CocoCollection
url: ''
model: LevelSession
constructor: (model) ->
super()
@url = "/db/user/#{me.id}/level.sessions?project=state.complete,levelID"
module.exports = class MainLadderView extends RootView
id: 'main-ladder-view'
template: template
initialize: ->
@levelStatusMap = []
@levelPlayCountMap = []
@campaigns = campaigns
@sessions = @supermodel.loadCollection(new LevelSessionsCollection(), 'your_sessions', {cache: false}, 0).model
@listenToOnce @sessions, 'sync', @onSessionsLoaded
@getLevelPlayCounts()
onSessionsLoaded: (e) ->
for session in @sessions.models
@levelStatusMap[session.get('levelID')] = if session.get('state')?.complete then 'complete' else 'started'
@render()
getLevelPlayCounts: ->
success = (levelPlayCounts) =>
return if @destroyed
for level in levelPlayCounts
@levelPlayCountMap[level._id] = playtime: level.playtime, sessions: level.sessions
@render() if @supermodel.finished()
levelIDs = []
for campaign in campaigns
for level in campaign.levels
levelIDs.push level.id
levelPlayCountsRequest = @supermodel.addRequestResource 'play_counts', {
url: '/db/level/-/play_counts'
data: {ids: levelIDs}
method: 'POST'
success: success
}, 0
levelPlayCountsRequest.load()
heroArenas = [
{
name: 'Ace of Coders'
difficulty: 3
id: 'ace-of-coders'
image: '/file/db/level/55de80407a57948705777e89/Ace-of-Coders-banner.png'
description: 'Battle for control over the icy treasure chests as your gigantic warrior marshals his armies against his mirror-match nemesis.'
}
{
name: 'Zero Sum'
difficulty: 3
id: 'zero-sum'
image: '/file/db/level/550363b4ec31df9c691ab629/MAR26-Banner_Zero%20Sum.png'
description: 'Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer.'
}
{
name: 'Cavern Survival'
difficulty: 1
id: 'cavern-survival'
image: '/file/db/level/544437e0645c0c0000c3291d/OCT30-Cavern%20Survival.png'
description: 'Stay alive longer than your multiplayer opponent amidst hordes of ogres!'
}
{
name: 'Dueling Grounds'
difficulty: 1
id: 'dueling-grounds'
image: '/file/db/level/5442ba0e1e835500007eb1c7/OCT27-Dueling%20Grounds.png'
description: 'Battle head-to-head against another hero in this basic beginner combat arena.'
}
{
name: 'Multiplayer Treasure Grove'
difficulty: 2
id: 'multiplayer-treasure-grove'
image: '/file/db/level/5469643c37600b40e0e09c5b/OCT27-Multiplayer%20Treasure%20Grove.png'
description: 'Mix collection, flags, and combat in this multiplayer coin-gathering arena.'
}
{
name: 'Harrowland'
difficulty: 2
id: 'harrowland'
image: '/file/db/level/54b83c2629843994803c838e/OCT27-Harrowland.png'
description: 'Go head-to-head against another player in this dueling arena--but watch out for their friends!'
}
]
campaigns = [
{id: 'multiplayer', name: 'Multiplayer Arenas', description: '... in which you code head-to-head against other players.', levels: heroArenas}
]