Ejemplo n.º 1
0
    Edge_IA CalcMinorPath()// retorna a direção do edge cuja proximidade baseada na heuristica + pese é menor do target
    {
        if (LocalNodePos.EdgesColection().Count == 0)
        {
            Debug.Log("ERROR_On_CalcMinorPath()"); return(null);
        }

        List <Edge_IA> edges_in_node = LocalNodePos.EdgesColection();
        float          minor_value   = edges_in_node[0].Weight + CalcHeuristic(Target.transform.position, edges_in_node[0].OtherPeerNode(LocalNodePos));
        Edge_IA        Edge_to_move  = edges_in_node[0];

        foreach (Edge_IA e in edges_in_node)//atualiza minor value com o menor valor de edge_weigths
        {
            float w = e.Weight;
            float h = CalcHeuristic(Target.transform.position, e.OtherPeerNode(LocalNodePos));
            if ((w + h) < minor_value)
            {
                minor_value  = (w + h);
                Edge_to_move = e;
            }
        }
        ValidateEdgeAVL(Edge_to_move);
        if (TintEdges)
        {
            tintEdge(Edge_to_move);
        }
        return(Edge_to_move);
    }
Ejemplo n.º 2
0
    public void MoveAgent()
    {
        Edge_IA     e = CalcMinorPath();
        New_Node_IA n = e.OtherPeerNode(LocalNodePos);

        myBoid.GoTo(n);
    }
Ejemplo n.º 3
0
    public void MoveAgent(New_Node_IA myTarget)
    {
        Target = myTarget;
        Edge_IA     e = CalcMinorPath();
        New_Node_IA n = e.OtherPeerNode(LocalNodePos);

        myBoid.GoTo(n);
    }
Ejemplo n.º 4
0
 public void tintEdge(Edge_IA e)// colore o edge de
 {
     if (e == null)
     {
         Debug.Log("ERROR_On_tintEdge()"); return;
     }                                                           //se for nullo não pinta o edge
     //colore o edge:
     e.GetComponent <MeshRenderer>().material =
         this.gameObject.GetComponent <MeshRenderer>().material;
 }
Ejemplo n.º 5
0
 void ValidateEdgeAVL(Edge_IA e)
 {
     AVL.Node_AVL_Tree NAT = tree.Find(e.GetEdgeAvlID());
     if (NAT == null)
     {
         e.Weight += 1;
         tree.Add(e);
     }
     else
     {
         NAT.Edge_From_Grid.Weight += 1;
     }
 }
Ejemplo n.º 6
0
    public void Add(/*int data,*/ Edge_IA e)
    {
        Node_AVL_Tree newItem = new Node_AVL_Tree(/*data,*/ e);

        if (root == null)
        {
            root = newItem;
        }
        else
        {
            root = RecursiveInsert(root, newItem);
        }
    }
Ejemplo n.º 7
0
 public void GenerateEdges()// gera os edges apartir dos nodes vizinhos (PS: esse método só pode ser chamado após todos nodes já estarem criados)
 {
     if (NorteNode != null && NorteNode.imReachable && imReachable && NorteNode.SulEdge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, NorteNode.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; NorteEdge = aux_e.GetComponent <Edge_IA>(); NorteNode.SulEdge = aux_e.GetComponent <Edge_IA>(); NorteEdge.Init(this, NorteNode);                                                                                                         /*NorteEdge.EdgeDirection = 8;*/
     }
     if (NE_Node != null && NE_Node.imReachable && imReachable && NE_Node.SO_Edge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, NE_Node.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; NE_Edge = aux_e.GetComponent <Edge_IA>(); NE_Node.SO_Edge = aux_e.GetComponent <Edge_IA>(); NE_Edge.Init(this, NE_Node); NE_Edge.Weight = 1.4f;                                                                                            /*NE_Edge.EdgeDirection   = 9;*/
     }
     if (LesteNode != null && LesteNode.imReachable && imReachable && LesteNode.OesteEdge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, LesteNode.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; LesteEdge = aux_e.GetComponent <Edge_IA>(); LesteNode.OesteEdge = aux_e.GetComponent <Edge_IA>(); LesteEdge.Init(this, LesteNode);                                                                                                       /*LesteEdge.EdgeDirection = 6;*/
     }
     if (SE_Node != null && SE_Node.imReachable && imReachable && SE_Node.NO_Edge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, SE_Node.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; SE_Edge = aux_e.GetComponent <Edge_IA>(); SE_Node.NO_Edge = aux_e.GetComponent <Edge_IA>(); SE_Edge.Init(this, SE_Node); SE_Edge.Weight = 1.4f;                                                                                            /*SE_Edge.EdgeDirection   = 3;*/
     }
     if (SulNode != null && SulNode.imReachable && imReachable && SulNode.NorteEdge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, SulNode.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; SulEdge = aux_e.GetComponent <Edge_IA>(); SulNode.NorteEdge = aux_e.GetComponent <Edge_IA>(); SulEdge.Init(this, SulNode);                                                                                                                 /*SulEdge.EdgeDirection   = 2;*/
     }
     if (SO_Node != null && SO_Node.imReachable && imReachable && SO_Node.NE_Edge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, SO_Node.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; SO_Edge = aux_e.GetComponent <Edge_IA>(); SO_Node.NE_Edge = aux_e.GetComponent <Edge_IA>(); SO_Edge.Init(this, SO_Node); SO_Edge.Weight = 1.4f;                                                                                            /*SO_Edge.EdgeDirection   = 1;*/
     }
     if (OesteNode != null && OesteNode.imReachable && imReachable && OesteNode.LesteEdge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, OesteNode.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; OesteEdge = aux_e.GetComponent <Edge_IA>(); OesteNode.LesteEdge = aux_e.GetComponent <Edge_IA>(); OesteEdge.Init(this, OesteNode);                                                                                                       /*OesteEdge.EdgeDirection = 4;*/
     }
     if (NO_Node != null && NO_Node.imReachable && imReachable && NO_Node.SE_Edge == null)
     {
         GameObject aux_e = (Instantiate(grid_Generator.Edge, this.transform.position, Quaternion.LookRotation(transform.position, NO_Node.transform.position)) as GameObject); aux_e.gameObject.transform.parent = grid_Generator.Edges_Controller.transform; NO_Edge = aux_e.GetComponent <Edge_IA>(); NO_Node.SE_Edge = aux_e.GetComponent <Edge_IA>(); NO_Edge.Init(this, NO_Node); NO_Edge.Weight = 1.4f;                                                                                            /*NO_Edge.EdgeDirection   = 7;*/
     }
     if (EdgesColection() != null)
     {
         generated_edges = true;
     }
     nameEdges();
 }
Ejemplo n.º 8
0
 public Node_AVL_Tree(/*int data, */ Edge_IA e)
 {
     this.data           = e.GetEdgeAvlID();
     this.Edge_From_Grid = e;
 }