Entity = require './Entity.coffee'

# A collection of Entities that outputs to the primary canvas layer via a
# composite mode
module.exports = class Layer extends Entity

  @SOURCE_OVER : 'source-over'
  @LIGHTER     : 'lighter'
  @DARKER      : 'darker'

  constructor: (opts = {}) ->
    super
    @entities = []
    @compositeMode = opts.compositeMode ? Layer.SOURCE_OVER

    return

  # More stuff
  addEntity: (e) -> @entities.push e

  # Have all our entities draw onto our own canvas, then blit that to the
  # parent context. Will clear the canvas everytime first
  render: (ctx) ->
    ctx.globalCompositeOperation = @compositeMode
    for entity in @entities
      entity.render ctx
    return

  # Instruct all entities to update
  update: (dt) ->
    entity.update(dt) for entity in @entities
    return
