         xShift += coords[0]
         yShift += coords[1]
         @shakes.splice(index, 1) if shake.easing.complete
+
+      cameraPan =
+        x: 0
+        y: 0
+      for motion, index in @motions by -1
+        coordsBefore = motion.coords(motion.easing.value())
+        motion.easing.tick(fd.dt)
+        coordsAfter = motion.coords(motion.easing.value())
+        deltaX = coordsAfter[0] - coordsBefore[0]
+        deltaY = coordsAfter[1] - coordsBefore[1]
+        cameraPan.x += deltaX
+        cameraPan.y += deltaY
+        @x += deltaX
+        @y += deltaY
+        @motions.splice(index, 1) if motion.easing.complete
       x = @x + xShift
       y = @y + yShift
 

    )

  cameraPan: (options) ->
    #@shakes.push(
      #amount: amount
      #duration: duration
      #shakes: Math.ceil(duration / 100)
      #easing: new Crafty.easing(duration, 'linear')
      #startX: if Math.random() > 0.5 then -1 else 1
      #startY: if Math.random() > 0.5 then -1 else 1
      #coords: (v) ->
        #shake = Math.cos((Math.PI / 2) + (v * @shakes * (Math.PI / 2)))
        #[
          #shake * amount * @startX
          #shake * amount * @startY
        #]
    #)

  scrollWall: (speed) ->
    if speed.x? && speed.y?

  init: ->
    @requires('2D, Edge, Collision')
    @shakes = []
    @motions = []
    @attr
      x: 0
      y: 0
