void OpenGridNeighbors(Vector2Int grid) { int range = openWorldSettings.lod1_distance; for (int x = -range; x <= range; x++) { for (int y = -range; y <= range; y++) { if (x == 0 && y == 0) { continue; } Vector2Int neighbor = new Vector2Int(grid.x + x, grid.y + y); if (neighbor.x < 0 || neighbor.x >= openWorldSettings.gridResolution) { continue; } if (neighbor.y < 0 || neighbor.y >= openWorldSettings.gridResolution) { continue; } int dist = GridManagement.GridDistance(neighbor, grid); OpenSceneIfWithinRange(neighbor, dist, openWorldSettings.lod1_distance, 1); OpenSceneIfWithinRange(neighbor, dist, openWorldSettings.lod0_distance, 0); } } }
void UnloadNonNeighbors(Vector2Int playerGrid) { for (int i = 0; i < loadedWorldScenes.Count; i++) { WorldScene loadedScene = loadedWorldScenes[i]; if (!SceneLoading.IsSceneLoadingOrUnloading(loadedScene.scene)) { int dist = loadedScene.lod == 0 ? settings.lod0_distance : settings.lod1_distance; if (GridManagement.GridDistance(loadedScene.grid, playerGrid) > dist) { SceneLoading.UnloadSceneAsync(loadedScene.scene); } } } }
void LoadNeighbors(Vector2Int playerGrid, int gridRes) { int maxDistance = settings.lod1_distance; for (int y = -maxDistance; y <= maxDistance; y++) { for (int x = -maxDistance; x <= maxDistance; x++) { if (y == 0 && x == 0) { continue; } Vector2Int n = new Vector2Int(playerGrid.x + x, playerGrid.y + y); if (n.y < 0 || n.y >= gridRes || n.x < 0 || n.x >= gridRes) { continue; } if (!loadedWorldGrids1.Contains(n)) { LoadGridScene(n, 1); } int cellDistance = GridManagement.GridDistance(n, playerGrid); if (cellDistance <= settings.lod0_distance) { if (!loadedWorldGrids0.Contains(n)) { LoadGridScene(n, 0); } } } } }