public void CreateGrid() { if (manager == null) { manager = GameObject.Find("TerrainManager").GetComponent <TerrainManager>(); } myInfo = manager.myInfo; map = new Node[myInfo.x_N, myInfo.z_N]; bool walkable; Vector3 pos; for (int i = 0; i < myInfo.x_N; i++) { for (int j = 0; j < myInfo.z_N; j++) { if (myInfo.traversability[i, j] > 0.5) { walkable = false; } else { walkable = true; } pos = new Vector3(myInfo.get_x_pos(i), 0f, myInfo.get_z_pos(j)); map[i, j] = new Node(walkable, pos, i, j); } } }
public void CreateMap() { map = new Node[info.x_N, info.z_N]; bool walkable; Vector3 pos; for (int i = 0; i < info.x_N; i++) { for (int j = 0; j < info.z_N; j++) { if (info.traversability[i, j] > 0.5) { walkable = false; } else { walkable = true; } pos = new Vector3(info.get_x_pos(i), 0f, info.get_z_pos(j)); map[i, j] = new Node(walkable, pos, i, j); } } }
public List <Vector3> getV3Path() { int indexI = get_i_index(rawTerrainInfo.get_x_pos(mDFSPath[0].Item1)); int indexJ = get_j_index(rawTerrainInfo.get_z_pos(mDFSPath[0].Item2)); List <Vector3> path = new List <Vector3>(); var neigbour = getNeigbour(indexI, indexJ); int mOffsetType = neigbour[0]; indexI += mOffset[mOffsetType, 0]; indexJ += mOffset[mOffsetType, 1]; path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ))); traversability[indexI, indexJ] = 1f; remainArea--; int whileCounter = 0; while (remainArea > 0 && whileCounter < 10000) { whileCounter++; neigbour = getNeigbour(indexI, indexJ); if (neigbour.Count == 1) { mOffsetType = neigbour[0]; indexI += mOffset[mOffsetType, 0]; indexJ += mOffset[mOffsetType, 1]; path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ))); traversability[indexI, indexJ] = 1f; remainArea--; } else if (neigbour.Count > 1) { bool ifAddPoint = false; foreach (var t in neigbour) { int pIndexI_P1 = rawTerrainInfo.get_i_index(get_x_pos(indexI)); int pIndexJ_P1 = rawTerrainInfo.get_j_index(get_z_pos(indexJ)); int pIndexI_P2 = rawTerrainInfo.get_i_index(get_x_pos(indexI + mOffset[t, 0])); int pIndexJ_P2 = rawTerrainInfo.get_j_index(get_z_pos(indexJ + mOffset[t, 1])); if (pIndexI_P1 == pIndexI_P2 && pIndexJ_P1 == pIndexJ_P2) { indexI += mOffset[t, 0]; indexJ += mOffset[t, 1]; mOffsetType = t; path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ))); traversability[indexI, indexJ] = 1f; remainArea--; ifAddPoint = true; break; } } if (!ifAddPoint && neigbour.Exists(x => x == mOffsetType)) { indexI += mOffset[mOffsetType, 0]; indexJ += mOffset[mOffsetType, 1]; path.Add(new Vector3(get_x_pos(indexI), 0f, get_z_pos(indexJ))); traversability[indexI, indexJ] = 1f; remainArea--; ifAddPoint = true; } } else { break; } } path = splitPath(path); for (int i = 0; i < path.Count; i++) { float ori_center_x = rawTerrainInfo.get_x_pos(rawTerrainInfo.get_i_index(path[i].x)); float ori_center_z = rawTerrainInfo.get_z_pos(rawTerrainInfo.get_j_index(path[i].z)); Vector3 centerV3 = new Vector3(ori_center_x, 0f, ori_center_z); path[i] += (centerV3 - path[i]) * 0.5f; } return(path); }