2014-06-30 22:16:26 -04:00
|
|
|
CocoModel = require './CocoModel'
|
2014-01-03 13:32:13 -05:00
|
|
|
|
|
|
|
module.exports = class LevelSession extends CocoModel
|
2014-06-30 22:16:26 -04:00
|
|
|
@className: 'LevelSession'
|
2014-04-22 14:11:08 -04:00
|
|
|
@schema: require 'schemas/models/level_session'
|
2014-06-30 22:16:26 -04:00
|
|
|
urlRoot: '/db/level.session'
|
2014-01-03 13:32:13 -05:00
|
|
|
|
|
|
|
initialize: ->
|
|
|
|
super()
|
|
|
|
@on 'sync', (e) =>
|
|
|
|
state = @get('state') or {}
|
|
|
|
state.scripts ?= {}
|
|
|
|
@set('state', state)
|
2014-04-22 14:11:08 -04:00
|
|
|
|
2014-01-03 13:32:13 -05:00
|
|
|
updatePermissions: ->
|
|
|
|
permissions = @get 'permissions'
|
|
|
|
permissions = (p for p in permissions when p.target isnt 'public')
|
|
|
|
if @get('multiplayer')
|
2014-06-30 22:16:26 -04:00
|
|
|
permissions.push {target: 'public', access: 'write'}
|
2014-01-03 13:32:13 -05:00
|
|
|
@set 'permissions', permissions
|
|
|
|
|
|
|
|
getSourceFor: (spellKey) ->
|
|
|
|
# spellKey ex: 'tharin/plan'
|
|
|
|
code = @get('code')
|
|
|
|
parts = spellKey.split '/'
|
|
|
|
code?[parts[0]]?[parts[1]]
|
2014-05-05 19:59:12 -04:00
|
|
|
|
|
|
|
readyToRank: ->
|
|
|
|
return false unless @get('levelID') # If it hasn't been denormalized, then it's not ready.
|
|
|
|
return false unless c1 = @get('code')
|
|
|
|
return false unless team = @get('team')
|
|
|
|
return true unless c2 = @get('submittedCode')
|
2014-06-30 22:16:26 -04:00
|
|
|
thangSpellArr = (s.split('/') for s in @get('teamSpells')[team])
|
2014-05-05 19:59:12 -04:00
|
|
|
for item in thangSpellArr
|
|
|
|
thang = item[0]
|
|
|
|
spell = item[1]
|
2014-06-20 23:52:50 -04:00
|
|
|
return true if c1[thang][spell] isnt c2[thang]?[spell]
|
2014-05-05 19:59:12 -04:00
|
|
|
false
|
2014-07-29 10:50:07 -04:00
|
|
|
|
2014-08-03 17:58:51 -04:00
|
|
|
isMultiplayer: ->
|
2014-07-29 14:11:45 -04:00
|
|
|
@get('team')? # Only multiplayer level sessions have teams defined
|
2014-08-07 16:03:00 -04:00
|
|
|
|
|
|
|
completed: ->
|
|
|
|
@get('state')?.complete || false
|