You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.0 KiB
CoffeeScript
76 lines
2.0 KiB
CoffeeScript
class AsciiIo.AbstractPlayer
|
|
|
|
constructor: (@options) ->
|
|
@model = @options.model
|
|
@createView()
|
|
@fetchModel()
|
|
|
|
createView: ->
|
|
@view = new AsciiIo.PlayerView
|
|
el: @options.el
|
|
model: @model
|
|
cols: @options.cols
|
|
lines: @options.lines
|
|
hud: @options.hud
|
|
rendererClass: @options.rendererClass
|
|
snapshot: @options.snapshot
|
|
|
|
createVT: ->
|
|
throw 'not implemented'
|
|
|
|
createMovie: ->
|
|
throw 'not implemented'
|
|
|
|
movieOptions: ->
|
|
timing: @model.get 'stdout_timing_data'
|
|
stdout_data: @model.get 'stdout_data'
|
|
duration: @model.get 'duration'
|
|
speed: @options.speed
|
|
benchmark: @options.benchmark
|
|
cols: @options.cols
|
|
lines: @options.lines
|
|
|
|
fetchModel: ->
|
|
@model.fetch success: @onModelFetched
|
|
|
|
onModelFetched: =>
|
|
data = @model.get('escaped_stdout_data')
|
|
unpacker = new AsciiIo.DataUnpacker
|
|
unpacker.unpack data, @onModelDataUnpacked
|
|
|
|
onModelDataUnpacked: (data) =>
|
|
@model.set stdout_data: data
|
|
@onModelReady()
|
|
|
|
onModelReady: ->
|
|
@createVT()
|
|
@createMovie()
|
|
@bindEvents()
|
|
@view.onModelReady()
|
|
|
|
if @options.autoPlay
|
|
@movie.call 'play'
|
|
else
|
|
@view.showPlayOverlay()
|
|
|
|
bindEvents: ->
|
|
@view.on 'play-clicked', => @movie.call 'togglePlay'
|
|
@view.on 'seek-clicked', (percent) => @movie.call 'seek', percent
|
|
|
|
@vt.on 'cursor-visibility', (show) => @view.showCursor show
|
|
|
|
@movie.on 'started', => @view.onStateChanged 'playing'
|
|
@movie.on 'paused', => @view.onStateChanged 'paused'
|
|
@movie.on 'finished', => @view.onStateChanged 'finished'
|
|
@movie.on 'resumed', => @view.onStateChanged 'resumed'
|
|
@movie.on 'wakeup', => @view.restartCursorBlink()
|
|
@movie.on 'time', (time) => @view.updateTime time
|
|
@movie.on 'render', (state) => @view.renderState state
|
|
|
|
if @options.benchmark
|
|
@movie.on 'started', => @startedAt = (new Date).getTime()
|
|
|
|
@movie.on 'finished', =>
|
|
now = (new Date).getTime()
|
|
console.log "finished in #{(now - @startedAt) / 1000.0}s"
|