void Update_node_colors() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); //keepfor color //if (cScript.IsLegitPath) GridArra[x, z].GetComponent<Renderer>().material.color = Color.cyan; //if (cScript.isStart) GridArra[x, z].GetComponent<Renderer>().material.color = Color.white; //if (cScript.isEnd) GridArra[x, z].GetComponent<Renderer>().material.color = Color.black; //if (!cScript.IsLegitPath) GridArra[x, z].GetComponent<Renderer>().material.color = Color.yellow; if (cScript.isfound) { GridArra[x, z].GetComponent <NavMazeBlock>().UpdateTileMAterial(LightTiles[1]); } else { GridArra[x, z].GetComponent <NavMazeBlock>().UpdateTileMAterial(DarkTiles[1]); } if (cScript.isStart) { GridArra[x, z].GetComponent <NavMazeBlock>().UpdateTileMAterial(GreenMatDark); } if (cScript.isEnd) { GridArra[x, z].GetComponent <NavMazeBlock>().UpdateTileMAterial(RedMAt); } // if (!cScript.isfound) { GridArra[x, z].GetComponent<NavMazeBlock>().UpdateBlockText("X"); } //if (Grid_end_ptr.GetComponent<NavMazeBlock>().isfound) //{ // Grid_end_ptr.GetComponent<NavMazeBlock>().UpdateTileMAterial(LightTiles[1]); //} //else //{ // Grid_end_ptr.GetComponent<NavMazeBlock>().UpdateTileMAterial(DarkTiles[1]); //} //if(cScript.isStart)GridArra[x,z].GetComponent<Renderer>().material.color=Color.white; //if(cScript.isStart)GridArra[x,z].GetComponent<Renderer>().material.color=Color.white; } } }
void populate_template() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); //cScript._F = cScript._H+ cScript._G ; T_Cell_in_grid.name = "(" + cScript.MyStupid__X + "," + cScript.MyStupid__Z + ")" + "g." + cScript._G + "h." + cScript._H + "f." + cScript._F; } } }
void resetALL_G_H_F() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); cScript._g = 0; cScript._H = 0; cScript._F = 0; } } }
void populate_H() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); cScript._H = (Mathf.Abs(cScript.MyStupid__X - (int)EndNodeV3.x)) + (Mathf.Abs(cScript.MyStupid__Z - (int)EndNodeV3.z)); // cScript._H= myx-_endNodeX + myy- endy } } }
void makeAdjList_and_Actualparent_AFTER_WALLSELECTION() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; if (T_Cell_in_grid.GetComponent <NavMazeBlock>().IsLegitPath) { NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); //CHECK BOT if (x - 1 >= 0) { cScript.Adjacent_list_Transforms.Add(GridArra[x - 1, z]); //GridArra[x-1,z].GetComponent<NavMazeBlock>().ptrT_Parent=T_Cell_in_grid; GridArra[x - 1, z].GetComponent <NavMazeBlock>().ptrT_ActualParent = T_Cell_in_grid; } //CHECK TOP if (x + 1 < Matrix_Size.x) { cScript.Adjacent_list_Transforms.Add(GridArra[x + 1, z]); //GridArra[x+1,z].GetComponent<NavMazeBlock>().ptrT_Parent=T_Cell_in_grid; GridArra[x + 1, z].GetComponent <NavMazeBlock>().ptrT_ActualParent = T_Cell_in_grid; } //CHECK BRIGHT if (z - 1 >= 0) { cScript.Adjacent_list_Transforms.Add(GridArra[x, z - 1]); //GridArra[x,z-1].GetComponent<NavMazeBlock>().ptrT_Parent=T_Cell_in_grid; GridArra[x, z - 1].GetComponent <NavMazeBlock>().ptrT_ActualParent = T_Cell_in_grid; } //CHECK LEFT if (z + 1 < Matrix_Size.z) { cScript.Adjacent_list_Transforms.Add(GridArra[x, z + 1]); //GridArra[x,z+1].GetComponent<NavMazeBlock>().ptrT_Parent=T_Cell_in_grid; GridArra[x, z + 1].GetComponent <NavMazeBlock>().ptrT_ActualParent = T_Cell_in_grid; } } } //Xforz } //Xforx } //XSetAdj
void clearListOfAdjascent() { for (int x = 0; x < Matrix_Size.x; x++) { for (int z = 0; z < Matrix_Size.z; z++) { Transform T_Cell_in_grid; T_Cell_in_grid = GridArra[x, z]; NavMazeBlock cScript = T_Cell_in_grid.GetComponent <NavMazeBlock>(); if (cScript.ptrT_ActualParent != null) { cScript.ptrT_ActualParent = null; } //cScript.ptrT_Parent_PATH=null; //cScript.ptrT_Parent=null; cScript.isfound = false; cScript.Adjacent_list_Transforms.Clear(); // T_Cell_in_grid.GetComponent<Renderer>().material.color=Color.cyan; //cScript._F = cScript._H+ cScript._G ; //T_Cell_in_grid.name= "("+ cScript.MyStupid__X + "," + cScript.MyStupid__Z+ ")" + "g."+ cScript._G + "h."+cScript._H + "f." + cScript._F; } } }
public bool Aalgo() { Update_node_colors(); resetPTRSandLists(); populate_H(); clearListOfAdjascent(); // MWay_ptr.Reset_Waypointtile_list(); // MWay_ptr.Reset_Waypointtile_OBJ_list(); // randCell_deselect(); makeAdjList_and_Actualparent_AFTER_WALLSELECTION(); resetALL_G_H_F(); Grid_curr_ptr = Grid_start_ptr; ClosedSet.Add(Grid_curr_ptr); do { foreach (Transform n in Grid_curr_ptr.GetComponent <NavMazeBlock>().Adjacent_list_Transforms) { float curnodeG = Grid_curr_ptr.GetComponent <NavMazeBlock>()._G; if (isThisInSet(n, ClosedSet)) { continue; } else if (isThisInSet(n, OpenSet)) { //computeG(n); float adjG = n.GetComponent <NavMazeBlock>()._G; float newG = curnodeG + adjG; if (newG < curnodeG) { //n.GetComponent<NavMazeBlock>().GetComponent<Transform>().GetComponent<Renderer>().material.color=Color.red; n.GetComponent <NavMazeBlock>().ptrT_Parent_PATH = Grid_curr_ptr; n.GetComponent <NavMazeBlock>()._G = newG; n.GetComponent <NavMazeBlock>()._F = n.GetComponent <NavMazeBlock>()._G + n.GetComponent <NavMazeBlock>()._H; }//end } else { n.GetComponent <NavMazeBlock>().ptrT_Parent_PATH = Grid_curr_ptr; // n.GetComponent<NavMazeBlock>().GetComponent<Transform>().GetComponent<Renderer>().material.color=Color.red; //compute H NavMazeBlock nscript = n.GetComponent <NavMazeBlock>(); nscript._H = (Mathf.Abs(nscript.MyStupid__X - (int)EndNodeV3.x)) + (Mathf.Abs(nscript.MyStupid__Z - (int)EndNodeV3.z)); //compute G nscript._G = (Mathf.Abs((int)StartNodeV3.x - nscript.MyStupid__X)) + (Mathf.Abs((int)StartNodeV3.z - nscript.MyStupid__Z)); n.GetComponent <NavMazeBlock>()._F = n.GetComponent <NavMazeBlock>()._G + n.GetComponent <NavMazeBlock>()._H; OpenSet.Add(n); } }//loopdone //if (isThisInSet(ClosedSet, new)); if (OpenSet.Count < 1) { break; } Grid_curr_ptr = Findnode_loweststF_inOpenset(); OpenSet.RemoveAt(0); ClosedSet.Add(Grid_curr_ptr); } while (Grid_curr_ptr.GetComponent <NavMazeBlock>().SquareID != Grid_end_ptr.GetComponent <NavMazeBlock>().SquareID); MakePath(); if (Grid_end_ptr.GetComponent <NavMazeBlock>().isfound) { Grid_end_ptr.GetComponent <Transform>().GetComponent <Renderer>().material.color = Color.green; return(true); } else { Grid_end_ptr.GetComponent <Transform>().GetComponent <Renderer>().material.color = Color.red; return(false); } }