codecombat/app/lib/surface/DebugDisplay.coffee
2014-05-12 13:28:46 -07:00

45 lines
1.5 KiB
CoffeeScript

module.exports = class DebugDisplay extends createjs.Container
layerPriority: 20
subscriptions:
'level-set-debug': 'onSetDebug'
constructor: (options) ->
super()
@initialize()
@canvasWidth = options.canvasWidth
@canvasHeight = options.canvasHeight
console.error "DebugDisplay needs canvasWidth/Height." unless @canvasWidth and @canvasHeight
@build()
@onSetDebug debug: true
Backbone.Mediator.subscribe(channel, @[func], @) for channel, func of @subscriptions
destroy: ->
Backbone.Mediator.unsubscribe(channel, @[func], @) for channel, func of @subscriptions
onSetDebug: (e) ->
return if e.debug is @on
@visible = @on = e.debug
@fps = null
@framesRenderedThisSecond = 0
@lastFrameSecondStart = Date.now()
build: ->
@mouseEnabled = @mouseChildren = false
@addChild @frameText = new createjs.Text "...", "20px Arial", "#FFF"
@frameText.name = 'frame text'
@frameText.x = @canvasWidth - 50
@frameText.y = @canvasHeight - 25
@frameText.alpha = 0.5
updateFrame: (currentFrame) ->
return unless @on
++@framesRenderedThisSecond
time = Date.now()
diff = (time - @lastFrameSecondStart) / 1000
if diff > 1
@fps = Math.round @framesRenderedThisSecond / diff
@lastFrameSecondStart = time
@framesRenderedThisSecond = 0
@frameText.text = Math.round(currentFrame) + (if @fps? then " - " + @fps + ' fps' else '')
@frameText.x = @canvasWidth - @frameText.getMeasuredWidth() - 10