2014-01-03 10:32:13 -08:00
ScriptModule = require ' ./ScriptModule '
{ me } = require ' lib/auth '
2014-03-13 09:02:19 -07:00
utils = require ' lib/utils '
2014-01-03 10:32:13 -08:00
module.exports = class SpritesScriptModule extends ScriptModule
@neededFor: (noteGroup) ->
return noteGroup . sprites ? . length
startNotes: ->
notes = [ ]
@moveSums = { }
@speakingSprites = { }
for sprite in @ noteGroup . sprites or [ ]
notes . push ( @ spriteMoveNote sprite ) if sprite . move ?
for sprite in @ noteGroup . sprites or [ ]
notes . push ( @ spriteSayNote ( sprite , @ noteGroup . script ) ) if sprite . say ?
notes . push ( @ spriteSelectNote sprite ) if sprite . select ?
return ( n for n in notes when n )
spriteMoveNote: (sprite, instant=false) ->
duration = if instant then 0 else sprite . move . duration
note =
channel: ' level-sprite-move '
event:
pos: sprite . move . target
duration: duration
spriteID: sprite . id
if duration
@ moveSums [ sprite . id ] ? = 0
note.delay = @ scrubbingTime + @ moveSums [ sprite . id ]
@ moveSums [ sprite . id ] += sprite . move . duration
return note
spriteSayNote: (sprite, script) ->
return if @ speakingSprites [ sprite . id ]
responses = sprite . say . responses
2014-02-25 13:27:02 -08:00
responses = [ ] unless script . skippable or responses
2014-01-03 10:32:13 -08:00
for response in responses ? [ ]
2014-03-13 09:02:19 -07:00
response.text = utils . i18n response , ' text '
text = utils . i18n sprite . say , ' text '
blurb = utils . i18n sprite . say , ' blurb '
2014-03-13 01:07:36 +01:00
sound = sprite . say . sound # TODO support sound i18n
2014-01-03 10:32:13 -08:00
note =
channel: ' level-sprite-dialogue '
event:
message: text
blurb: blurb
mood: sprite . say . mood or " explain "
responses: responses
spriteID: sprite . id
sound: sound
@ maybeApplyDelayToNote note
return note
spriteSelectNote: (sprite) ->
note =
channel: ' level-select-sprite '
event:
thangID: if sprite . select then sprite . id else null
return note
endNotes: ->
notes = { }
for sprite in @ noteGroup . sprites or [ ]
notes [ sprite . id ] ? = { }
notes [ sprite . id ] [ ' move ' ] = ( @ spriteMoveNote sprite , true ) if sprite . move ?
notes [ sprite . id ] [ ' say ' ] = { channel: ' level-sprite-clear-dialogue ' } if sprite . say ?
noteArray = [ ]
for spriteID of notes
for type of notes [ spriteID ]
noteArray . push ( notes [ spriteID ] [ type ] )
noteArray