Rendering:

  Unoptimized:  used for zoom and pan
    - applyEdges on all quad edge, draw if edge is in "window"

  Optimized:  from curEdge, BFS and draw until BFS reaches outside
  the window (the window is factored to consider more edges)

Green Path:

  BFS on graph starting a curEdge, limited by path length or doorway,
  whichever is shorter

  A distinct path is one that is rooted at curEdge to either the leaf
  of BFS or to a doorway.

Navigation:
  
  Grid-based navigation: sends update for rendering, green path

NavArrow:

  Find, if exists, a Node in exclusively between root and end of path
  nodes (R, E)  such that Node maximizes the triangle formed by 
  R, Node, E.  The angle determines the "Type" of navarrow to be drawn.

  The orientation is determined by the slope R, Node or R, E, depending
  on the type of navarrow.

Todo:

  Use above to create end_2_end path
     should have distance to goal metric!!!
  load end_2_end path
  based on current position, see if it is on e2e path.
  if not, perform limited BFS to get back on path
    record the path node the BFS reaches, if any
      if( exists )
          use the first one (or node that yields overall
	  shortest path) 
      if( !exists ), get another e2e path.

  Implement A*
  for above, we can do A* search based on final destination??

  shortcut - if path length == 2, and if leaf is visibile from root,
  shortcut.
