void
EdgePosition::advance(Vector2f& adv, Node*& next_node)
{
  // FIXME: This might be optimizable
  Vector2f p1 = edge->get_node1()->get_pos();
  Vector2f p2 = edge->get_node2()->get_pos();
  
  Vector2f edge_v = p2 - p1;

  Vector2f proj = adv.project(edge_v);

  float angle = atan2f(edge_v.y, edge_v.x) - atan2f(proj.y, proj.x);

  // Check if we are going forward or backward
  float advf;
  if (angle > M_PI/2 || angle < -M_PI/2)
    advf = -proj.length();
  else
    advf = proj.length();

  // Move forward
  advance(advf, next_node);
  
  // Calculate the rest Vector2f
  // Calculate the rest Vector2f
  if (advf == 0.0f)
    adv = Vector2f(0,0);
  else
    adv -= (proj * ((proj.length() - advf)/proj.length()));
}