public static void CalculatFlowField(PlayGrid grid, Vector2Int origin) { List <Vector2Int> OpenList = new List <Vector2Int>(); List <Vector2Int> temporalToAdd = new List <Vector2Int>(); foreach (Cell cell in grid.Cells) { cell.SetMoveValue(int.MaxValue); } OpenList.Add(origin); grid.GetCell(origin).SetMoveValue(0); while (OpenList.Count > 0) { foreach (Vector2Int cell in OpenList) { foreach (Vector2Int neibors in grid.GetNeibors(cell)) { if ((neibors - cell).magnitude > 1) { if (grid.GetCell(neibors).MoveValue > grid.GetCell(cell).MoveValue + 14 + grid.GetCell(neibors).IndividualMoveValue) { grid.GetCell(neibors).SetMoveValue(grid.GetCell(cell).MoveValue + 14 + grid.GetCell(neibors).IndividualMoveValue); temporalToAdd.Add(neibors); Vector2Int oriantation = cell - neibors; grid.GetCell(neibors).SetFlowFieldVector(new Vector3(oriantation.x, 0, oriantation.y)); } } else { if (grid.GetCell(neibors).MoveValue > grid.GetCell(cell).MoveValue + 10 + grid.GetCell(neibors).IndividualMoveValue) { grid.GetCell(neibors).SetMoveValue(grid.GetCell(cell).MoveValue + 10 + grid.GetCell(neibors).IndividualMoveValue); temporalToAdd.Add(neibors); Vector2Int oriantation = cell - neibors; grid.GetCell(neibors).SetFlowFieldVector(new Vector3(oriantation.x, 0, oriantation.y)); } } } } OpenList.Clear(); OpenList.AddRange(temporalToAdd); temporalToAdd.Clear(); } /* OpenList.Add(origin); * do * { * List<Vector2Int> temporalToRemouve = new List<Vector2Int>(); * List<Vector2Int> temporalTAdd = new List<Vector2Int>(); * foreach (Vector2Int pos in OpenList) * { * Vector2Int testPos = pos + new Vector2Int(1, 0); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(10); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(-1, 0); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(10); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(0, 1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(10); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(0, -1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(10); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(1, 1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(14); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(-1, 1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(14); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(1, -1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(14); temporalTAdd.Add(testPos); * testPos = pos + new Vector2Int(-1, -1); * if (CheckCell(grid, testPos, closeList)) grid.GetCell(testPos).calculatMoveValue(14); temporalTAdd.Add(testPos); * temporalToRemouve.Add(pos); * } * * foreach (Vector2Int pos in temporalToRemouve) { * closeList.Add(pos); * OpenList.Remove(pos); * } * OpenList.AddRange(temporalTAdd); * * * } while (OpenList.Count>0);*/ }