       Tetromino.drop_blocks()
       drop_queued_block_if_no_active()
 
+    start_game_interval = ->
+      return if angular.isDefined(game_interval)
+      game_interval = $interval(game_loop, $scope.game_info.tick_length)
+
     $scope.upcoming.push new Block
       color: get_color()
     $scope.upcoming.push new Block

      block.locked = true
      block.active = false
      Tetromino.on_block_land block
      $interval.cancel game_interval
      drop_queued_block()
      game_interval = $interval(game_loop, $scope.game_info.tick_length)

    $scope.$watch 'game_info.level', ->
      if $scope.game_info.level > 1
        $scope.game_info.tick_length -=
            $scope.game_info.tick_length *
            $scope.game_info.tick_length_decrement_pct
        $interval.cancel game_interval
      game_interval = $interval(game_loop, $scope.game_info.tick_length)

    $scope.new_game = ->
      $window.location.reload();


    $scope.$on 'pause', (event) ->
      $scope.game_info.in_progress = false
      cancel_game_interval()

    $scope.$on 'resume', (event) ->
      $scope.game_info.in_progress = true
      start_game_interval()

    $scope.$on 'move_left', (event) ->
      block = Tetromino.get_active_block()
