Пример #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());
        }