 				@addAngularForce(new Three.Euler(0, @cannon.rotation.y * 20 * dt, 0, 'YXZ'))
 				@cannon.addAngularForce(new Three.Euler(0, -@cannon.rotation.y * 20 * dt, 0, 'YXZ'))
 
-			# Update our cannon.
-			@cannon.update(dt)
-
 			# Update alien animation.
-			@animation.update(dt)
-
-		# Fires a projectile.
+			@animation.update(dt)			
+
+		# Fires a projectile when the cannon is ready, which is a fixed amount of time
+		# after the last shot.
 		#
 		fire: ( ) ->
 			if @_cannonReady and @cannon.extended

			force = new Three.Euler().setFromQuaternion(forceQuaternion)
			@addAngularForce(force)

			# Add thrust straight downward from the player.
			thrustVector = new Three.Vector3(0, 1, 0).applyQuaternion(rotationQuaternion)

			if @boost

			
			# Update physics.
			super(dt, not @landed)

			# Update our cannon.
			@cannon.update(dt)

			# Make the ufo bounce upward a bit when landed.
			if @landed
				targetPosition = @landedPosition.clone().add(@landedPosition.clone().setLength(.8))
				@position.lerp(targetPosition, dt * 8)

			# Retract or extend the base.
			if @baseExtended
				@_ufoBase.position.lerp(new Three.Vector3(0, 0, 0), dt * 8)
				@_ufoBase.scale.lerp(new Three.Vector3(1, 2, 1), dt * 8)
