private void CheckF(CubePathData end_cube, CubeManager cm) { var nears = cm.GetNearPathData(end_cube); for (int i = 0; i < nears.Count; ++i) { var n_cube = nears [i]; if (n_cube == null) { continue; } float F = n_cube.cost + end_cube.F; if (n_cube.F > F) { n_cube.F = F; if (F > max_F) { max_F = F; } if (!open_cube.Contains(n_cube)) { open_cube.Add(n_cube); } } } open_cube.Remove(end_cube); close_cube.Add(end_cube); }
public static CubePathData GetNextCube(CubeManager cm, CubePathData cube) { if (cube.index == cm.end_cube) { return(null); } var near = cm.GetNearPathData(cube); float min_F = float.MaxValue; int n_index = -1; for (int i = 0; i < near.Count; ++i) { if (near[i].F < min_F && near[i].cost != 65535f) { n_index = i; min_F = near [i].F; } } if (n_index != -1) { return(near [n_index]); } else { return(null); } }
public FlowField GenerateVectorMap(CubeManager cm) { for (int i = 0; i < cm.path_datas.Count; ++i) { if (cm.path_datas [i].F == 65535) { cm.path_datas [i].vec = Vector2.zero; } var nears = cm.GetNearPathData(cm.path_datas [i]); float[] nears_F = new float[8]; Vector2 vec = Vector2.zero; float new_x = nears [0].F - nears [2].F; float new_y = nears [1].F - nears [3].F; cm.path_datas [i].vec = new Vector2(new_x, new_y); cm.path_datas [i].cube.name += string.Format(" vec: {0} / {1}", new_x, new_y); } return(this); }