mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-30 10:56:53 -05:00
99 lines
3.3 KiB
CoffeeScript
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}
|
|
]
|