2014-11-28 20:49:41 -05:00
RootView = require ' views/core/RootView '
2014-05-19 14:58:45 -04:00
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 "
2014-07-17 20:16:32 -04:00
module.exports = class LadderHomeView extends RootView
2014-06-30 22:16:26 -04:00
id: ' ladder-home-view '
2014-05-19 14:58:45 -04:00
template: template
constructor: (options) ->
super options
@levelStatusMap = { }
2014-08-28 01:23:24 -04:00
@levelPlayCountMap = { }
2015-02-11 16:12:42 -05:00
@sessions = @ supermodel . loadCollection ( new LevelSessionsCollection ( ) , ' your_sessions ' , { cache: false } , 0 ) . model
2014-05-19 14:58:45 -04:00
@ listenToOnce @ sessions , ' sync ' , @ onSessionsLoaded
2014-08-28 01:23:24 -04:00
@ getLevelPlayCounts ( )
2014-05-19 14:58:45 -04:00
onSessionsLoaded: (e) ->
for session in @ sessions . models
@ levelStatusMap [ session . get ( ' levelID ' ) ] = if session . get ( ' state ' ) ? . complete then ' complete ' else ' started '
@ render ( )
2014-08-28 01:23:24 -04:00
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 ( )
2014-05-19 14:58:45 -04:00
getRenderData: (context={}) ->
context = super ( context )
context.levelStatusMap = @ levelStatusMap
2014-08-28 01:23:24 -04:00
context.levelPlayCountMap = @ levelPlayCountMap
context.campaigns = campaigns
2014-05-19 14:58:45 -04:00
context
2015-07-07 14:43:24 -04:00
heroArenas = [
{
2015-09-12 09:54:14 -04:00
name: ' Ace of Coders '
2015-07-07 14:43:24 -04:00
difficulty: 3
2015-09-12 09:54:14 -04:00
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. '
2015-07-07 14:43:24 -04:00
}
2015-09-03 11:33:48 -04:00
{
2015-09-12 09:54:14 -04:00
name: ' Zero Sum '
2015-09-03 11:33:48 -04:00
difficulty: 3
2015-09-12 09:54:14 -04:00
id: ' zero-sum '
2015-09-03 11:33:48 -04:00
image: ' /file/db/level/550363b4ec31df9c691ab629/MAR26-Banner_Zero%20Sum.png '
2015-09-12 09:54:14 -04:00
description: ' Unleash your coding creativity in both gold gathering and battle tactics in this alpine mirror match between red sorcerer and blue sorcerer. '
2015-09-03 11:33:48 -04:00
}
2015-07-07 14:43:24 -04:00
{
name: ' Cavern Survival '
difficulty: 1
id: ' cavern-survival '
image: ' '
description: ' Stay alive longer than your multiplayer opponent amidst hordes of ogres! '
}
{
name: ' Dueling Grounds '
difficulty: 1
id: ' dueling-grounds '
image: ' '
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: ' '
description: ' Mix collection, flags, and combat in this multiplayer coin-gathering arena. '
}
{
name: ' Harrowland '
difficulty: 2
id: ' harrowland '
image: ' '
description: ' Go head-to-head against another player in this dueling arena--but watch out for their friends! '
}
]
2014-08-28 01:23:24 -04:00
2015-07-07 14:43:24 -04:00
oldArenas = [
2014-08-28 01:23:24 -04:00
{
name: ' Criss-Cross '
difficulty: 5
id: ' criss-cross '
image: ' /file/db/level/5391f3d519dc22b8082159b2/banner2.png '
description: ' Participate in a bidding war with opponents to reach the other side! '
}
{
name: ' Greed '
difficulty: 4
id: ' greed '
image: ' /file/db/level/53558b5a9914f5a90d7ccddb/greed_banner.jpg '
description: ' Liked Dungeon Arena and Gold Rush? Put them together in this economic arena! '
}
{
name: ' Sky Span (Testing) '
difficulty: 3
id: ' sky-span '
image: ' /file/db/level/53c80fce0ddbef000084c667/sky-Span-banner.jpg '
description: ' Preview version of an upgraded Dungeon Arena. Help us with hero balance before release! '
}
{
name: ' Dungeon Arena '
difficulty: 3
id: ' dungeon-arena '
image: ' /file/db/level/53173f76c269d400000543c2/Level%20Banner%20Dungeon%20Arena.jpg '
description: ' Play head-to-head against fellow Wizards in a dungeon melee! '
}
{
name: ' Gold Rush '
difficulty: 3
id: ' gold-rush '
image: ' /file/db/level/533353722a61b7ca6832840c/Gold-Rush.png '
description: ' Prove you are better at collecting gold than your opponent! '
}
{
name: ' Brawlwood '
difficulty: 4
id: ' brawlwood '
image: ' /file/db/level/52d97ecd32362bc86e004e87/Level%20Banner%20Brawlwood.jpg '
description: ' Combat the armies of other Wizards in a strategic forest arena! (Fast computer required.) '
}
]
campaigns = [
2015-07-07 14:43:24 -04:00
{ id: ' multiplayer ' , name: ' Multiplayer Arenas ' , description: ' ... in which you code head-to-head against other players. ' , levels: heroArenas }
2015-07-24 20:37:42 -04:00
#{id: 'old_multiplayer', name: '(Deprecated) Old Multiplayer Arenas', description: 'Relics of a more civilized age. No simulations are run for these older, hero-less multiplayer arenas.', levels: oldArenas}
2014-08-28 01:23:24 -04:00
]