codecombat/app/lib/surface/DebugDisplay.coffee
2014-07-01 12:23:22 +08: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