public HeuristicTile(HeuristicTile tile, Vector2Int goal) { path.AddRange(tile.path); direction = tile.direction; directionChanges = tile.directionChanges; CalculateDistToGoal(goal); }
private List <HeuristicTile> NewPositionsAvailableEnd(Vector2Int destino, HeuristicTile tile) //Retorna novas casas. { List <HeuristicTile> newTiles = new List <HeuristicTile>(); for (int i = 0; i < 4; i++) { Vector2Int newDir = Vector2Int.zero; Vector2Int newPosition = tile.path[tile.path.Count - 1]; switch (i) //Gera a nova casa. { case 0: newDir = Vector2Int.up; newPosition += newDir; break; case 1: newDir = Vector2Int.down; newPosition += newDir; break; case 2: newDir = Vector2Int.left; newPosition += newDir; break; case 3: newDir = Vector2Int.right; newPosition += newDir; break; } //Vefirica-se se não já se passou alina, se faz parte do grid e se não está ocupada e consolida a nova casa. if (!tile.path.Contains(newPosition) && VerifyTileIsInGrid(newPosition) && (!IsOccupied(newPosition))) { HeuristicTile newTile = new HeuristicTile(tile, destino); newTile.path.Add(newPosition); if (tile.direction != newDir) { newTile.direction = newDir; newTile.directionChanges++; } newTile.CalculateDistToGoal(destino); newTiles.Add(newTile); } } return(newTiles); }