       eachObject: (iterator) ->
         I.objects.each iterator
 
+      ###*
+      Start the game simulation.
+      @methodOf Engine#
+      @name start
+      ###
       start: () ->
         unless intervalId
           intervalId = setInterval(() ->
             step()
           , 1000 / I.FPS)
 
+      ###*
+      Stop the simulation.
+      @methodOf Engine#
+      @name stop
+      ###
       stop: ->
         clearInterval(intervalId)
         intervalId = null

    includedModules: []
    paused: false

  window.Engine = (I) ->
    I ||= {}


    canvas = I.canvas || $("<canvas />").powerCanvas()

    self = Core(I).extend
      ###*
      The add method creates and adds an object to the game world.

      Events triggered:
      <code>beforeAdd(entityData)</code>
      <code>afterAdd(gameObject)</code>

      @name add
      @methodOf Engine#
      @param entityData The data used to create the game object.
      ###
      add: (entityData) ->
        self.trigger "beforeAdd", entityData

