codecombat/app/lib/surface/MusicPlayer.coffee

55 lines
1.5 KiB
CoffeeScript
Raw Normal View History

2014-01-03 13:32:13 -05:00
CocoClass = require 'lib/CocoClass'
AudioPlayer = require 'lib/AudioPlayer'
{me} = require 'lib/auth'
CROSSFADE_LENGTH = 1500
module.exports = class MusicPlayer extends CocoClass
currentMusic: null
standingBy: null
2014-02-12 15:41:41 -05:00
2014-01-03 13:32:13 -05:00
subscriptions:
'level-play-music': 'onPlayMusic'
'audio-player:loaded': 'onAudioLoaded'
2014-02-12 15:41:41 -05:00
2014-01-03 13:32:13 -05:00
constructor: ->
2014-02-12 15:41:41 -05:00
super arguments...
me.on 'change:music', @onMusicSettingChanged, @
2014-01-03 13:32:13 -05:00
onAudioLoaded: ->
@onPlayMusic(@standingBy) if @standingBy
onPlayMusic: (e) ->
src = e.file
if src
src = "/file#{src}#{AudioPlayer.ext}"
return @currentMusic.play('none', 0, 0, -1, 0.3) if src is @currentMusic?.src
2014-01-03 13:32:13 -05:00
media = AudioPlayer.getStatus(src)
if not media?.loaded
AudioPlayer.preloadSound(src)
@standingBy = e
return
2014-02-12 15:41:41 -05:00
2014-01-03 13:32:13 -05:00
@standingBy = null
if @currentMusic
f = -> @stop()
createjs.Tween.get(@currentMusic).to({volume:0.0}, CROSSFADE_LENGTH).call(f)
2014-02-12 15:41:41 -05:00
2014-01-03 13:32:13 -05:00
@currentMusic = createjs.Sound.play(src, 'none', 0, 0, -1, 0.3) if src and e.play
return unless @currentMusic
@currentMusic.volume = 0.0
if me.get('music')
createjs.Tween.get(@currentMusic).to({volume:1.0}, CROSSFADE_LENGTH)
onMusicSettingChanged: ->
@updateMusicVolume()
updateMusicVolume: ->
return unless @currentMusic
createjs.Tween.removeTweens(@currentMusic)
@currentMusic.volume = if me.get('music') then 1.0 else 0.0
2014-02-12 15:41:41 -05:00
destroy: ->
me.off 'change:music', @onMusicSettingChanged, @
super()