// - Sivujen/neljäsosien neljäsosat rekursiivisesti - void LODQuarters(string side, int lodIndex) { int i = lodIndex; bool nextLod = (i != lodsCount); // onko seuraavan tason lod tarkkuutta olemassa // Looppaa jokaisen neljäsosan läpi for (int quarter = 0; quarter < 4; ++quarter) { childName = side + quarter.ToString(); childArrayIndex = getArrayPosition(childName); lodObj = allChildObjs[childArrayIndex]; localPositionM = SphericalCubeGenerator.getMiddleVerticePosition(childName) * (planetData.planetSize); if (QualitySettings.CurrentLOD.LodsCount > (i + 1)) { removeDistanceClose = (QualitySettings.CurrentLOD.distance[(i + 1)]); // TODO: säädä näitä valueita } else { removeDistanceClose = 0; } removeDistanceFar = (QualitySettings.CurrentLOD.distance[(i)] + QualitySettings.CurrentLOD.distance[(i - 1)] * 5f); // TODO: säädä näitä valueita //Debug.DrawLine(myTransform.position + SphericalCubeGenerator.getLTopVerticePosition(childName) * (planetData.planetSize), player.transform.position, Color.red, 1f); if (!nextLod || ( Vector3.Distance(myTransform.position + localPositionM, player.transform.position) >= QualitySettings.CurrentLOD.distance[i] * planetData.planetSize && // Middle Vector3.Distance(myTransform.position + SphericalCubeGenerator.getLBottomVerticePosition(childName) * (planetData.planetSize), player.transform.position) >= QualitySettings.CurrentLOD.distance[i] * planetData.planetSize && // Left Bottom Vector3.Distance(myTransform.position + SphericalCubeGenerator.getRBottomVerticePosition(childName) * (planetData.planetSize), player.transform.position) >= QualitySettings.CurrentLOD.distance[i] * planetData.planetSize && // Right Bottom Vector3.Distance(myTransform.position + SphericalCubeGenerator.getLTopVerticePosition(childName) * (planetData.planetSize), player.transform.position) >= QualitySettings.CurrentLOD.distance[i] * planetData.planetSize && // Left Top Vector3.Distance(myTransform.position + SphericalCubeGenerator.getRTopVerticePosition(childName) * (planetData.planetSize), player.transform.position) >= QualitySettings.CurrentLOD.distance[i] * planetData.planetSize // Right Top )) // Jos on seuraavasta lodista kauempana niin aktivoi ittensä { if (lodObj == null || lodObj.GameObj == null) // Jos objektia ei ole niin generoi sen { System.Tuple <GameObject, List <RenderTexture> > planetChunk = planetData.GeneratePlanetChunk( QualitySettings.CurrentLOD.gridSize[i], myTransform.position, QualitySettings.CurrentLOD.hasHeight[i], QualitySettings.CurrentLOD.hasCollider[i], childName ); lodObj = new LodObject( childName, planetChunk.Item1, planetChunk.Item2, localPositionM, removeDistanceClose, removeDistanceFar, QualitySettings.LODSide.Quarter ); lodObj.GameObj.transform.parent = myTransform; allChildObjs[childArrayIndex] = lodObj; lodObjects.Add(lodObj); //StartCoroutine(SaveMesh(lodObj.GameObj.GetComponent<MeshFilter>())); } else { lodObj.GameObj.SetActive(true); } } else // Jos on tarkemman lodin jatkaa rekursiota { LODQuarters(childName, i + 1); } } }
// Generate planet mesh Mesh GenerateSphericalMesh(int gridSize, string side = "") { return(SphericalCubeGenerator.GetMesh(gridSize, side)); }