/*public bool reach(Trajectory.Node origin, LineHandler origin_line, LineHandler destiny, Dictionary<Trajectory.Node, bool> visited_nodes, Dictionary<LineHandler, bool> visited_lines, List<Vector2> route){ * bool reached = true; * if(visited_nodes[origin] == false && !destiny.containsNode(origin)){ * visited_nodes [origin] = true; * foreach (LineHandler line in origin_line.getNeighborLines()) { * if(visited_lines[line] == false && line.containsNode(origin)){ * visited_lines[line.Key] = true; * if (!visited_nodes[line.Key.start] && reach (line.Key.start, destiny, visited_nodes, visited_lines, route)) * route.Add (new Vector2(line.Key.start.getX () / 10f, 60 - line.Key.start.getY () / 10f)); * else if (!visited_nodes[line.Key.end] && reach (line.Key.end, destiny, visited_nodes, visited_lines, route)) * route.Add (new Vector2(line.Key.end.getX () / 10f, 60 - line.Key.end.getY () / 10f)); * else * reached = false; * } * } * } * return reached; * }*/ /*public bool reach(Trajectory.Node origin, LineHandler origin_line, LineHandler destiny, Dictionary<Trajectory.Node, bool> visited_nodes, Dictionary<LineHandler, bool> visited_lines, List<Vector2> route){ * bool reached = true; * if (!destiny.containsNode (origin)) { * visited_nodes [origin] = true; * foreach (LineHandler line in origin_line.getNeighborLines()) { * if (!visited_lines [line] && !visited_nodes [line.getOtherPoint (origin)] && reach (line.getOtherPoint (origin), origin_line, destiny, visited_nodes, visited_lines, route)) { * Trajectory.Node n = line.getOtherPoint (origin); * route.Add (new Vector2(n.getX () / 10f, 60 - n.getY () / 10f)); * } * } * } * return reached; * }*/ public bool reach(LineHandler origin, LineHandler destiny, Dictionary <LineHandler, bool> visited, List <KeyValuePair <Vector2, float> > route) { bool ret = false; if (origin == destiny) { ret = true; } else if (visited[origin]) { ret = false; } else { visited[origin] = true; foreach (LineHandler neighbor in origin.getNeighborLines()) { if (reach(neighbor, destiny, visited, route)) { Trajectory.Node point = LineHandler.commonPoint(origin, neighbor); route.Add(new KeyValuePair <Vector2, float>(LineHandler.nodeToVector2(point), point.getScale())); ret = true; break; } } } return(ret); }
public KeyValuePair <Vector2, float>[] reach(LineHandler origin, LineHandler destiny) { List <KeyValuePair <Vector2, float> > route = new List <KeyValuePair <Vector2, float> >(); //Scene s = (Scene) sd; //WE STORE IN A BOOLEAN IF WE HAVE VISITED OR NOT THAT LINE // Dictionary<LineHandler, bool> visited_lines = new Dictionary<LineHandler, bool>(); // Dictionary<Trajectory.Node, bool> visited_nodes = new Dictionary<Trajectory.Node, bool>(); // // foreach (LineHandler line in lines) // visited_lines.Add (line, false); // // reach (origin, destiny, visited_lines, route); Dictionary <LineHandler, KeyValuePair <float, LineHandler> > stickered = stick(origin); LineHandler current = destiny; while (current != origin) { KeyValuePair <float, LineHandler> node = stickered[current]; Trajectory.Node tmp = LineHandler.commonPoint(current, node.Value); route.Add(new KeyValuePair <Vector2, float>(LineHandler.nodeToVector2(tmp), tmp.getScale())); current = node.Value; } route.Reverse(); return(route.ToArray()); }