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); }
public void MoveAgent() { Edge_IA e = CalcMinorPath(); New_Node_IA n = e.OtherPeerNode(LocalNodePos); myBoid.GoTo(n); }
public void MoveAgent(New_Node_IA myTarget) { Target = myTarget; Edge_IA e = CalcMinorPath(); New_Node_IA n = e.OtherPeerNode(LocalNodePos); myBoid.GoTo(n); }
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; }
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; } }
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); } }
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(); }
public Node_AVL_Tree(/*int data, */ Edge_IA e) { this.data = e.GetEdgeAvlID(); this.Edge_From_Grid = e; }