Пример #1
0
    /*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);
    }
Пример #2
0
    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());
    }