 
   force: (pos, vel) =>
     difference = Vector.subtract(MOUSE.pos, pos)
-    dist_sq = Math.max(difference.mag_sq(), 1)
+    # Set the minimum at 25 to avoid a mouse-singularity
+    dist_sq = Math.max(difference.mag_sq(), 25)
 
     velocity = @vel.mag()
-    g_force = 10000000 * MOUSE.mass * @mass / dist_sq
-    spring_force = 10000 * Math.sqrt(dist_sq)
+    g_force = 1000 * MOUSE.mass * @mass / dist_sq
+    spring_force = 0.01 * Math.sqrt(dist_sq)
+
     spring_and_g_force_vector = Vector.unit(difference)
-      .s_mult(Math.min(spring_force, g_force))
+      .s_mult(Math.min(g_force, spring_force))
 
-    damp_force_vector = Vector.s_mult(@vel, -10)
+    damp_force_vector = Vector.s_mult(@vel, -0.01)
 
     return spring_and_g_force_vector.plus(damp_force_vector)
 

  pos: 
    x: 0
    y: 0
  mass: 1000
$ ->
  MOUSE = 
    pos: new Vector(0, 0)
    mass: 1000
  animator = new Animator($("canvas"))
  window.requestAnimationFrame(animator.draw)

    ctx.restore()

class Animator
  MS_PER_TICK: 1000 / 60.0
  constructor: (canvas) ->
    @$canvas = canvas
    @canvas = @$canvas[0]
    @$canvas.mousemove(@update_mouse_pos)
    @$canvas.mousedown(@explode_particles)
    @particles = @generate_particles(1)
    @tick = window.performance.now()

  generate_particles: (num) ->
    colors = ['#FF5454', '#FF904A', '#FFCD57', '#FFFC85', '#FFF']
