private void Execute() { //playerPos = playerTrans.position; float dis = MathExtra.FastSqrt(playerTrans.position.sqrMagnitude); playerPos = playerTrans.position / dis * Mathf.Max((dis - activePlanet.sphereRadius * activePlanet.heightScale), activePlanet.sphereRadius); for (int i = 0; i < activePlanet.quadList.Count; i++) { activeTerrain = activePlanet.quadList[i]; activeTerrain.Execute(); activeTerrain.TryGenerateBorder(); activeTerrain.CalculateMesh(); activeTerrain.UpdateMesh(); } }
public void Init(QTNode parent, int quadrantID) { QTTerrain activeTerrain = QTManager.Instance.activeTerrain; QTPlanet activePlanet = QTManager.Instance.activePlanet; this.parent = parent; lodLevel = parent.lodLevel - 1; this.quadrantID = quadrantID; length = parent.length * 0.5f; float offSet = length * 0.5f; center = new Vector3(parent.center.x + ((quadrantID == 0 || quadrantID == 3) ? offSet : -offSet), parent.center.y, parent.center.z + ((quadrantID == 0 || quadrantID == 1) ? offSet : -offSet)); sphereCenter = MathExtra.FastNormalize(center) * activePlanet.sphereRadius; sphereLength = activePlanet.lengthArray[this.lodLevel]; if (parent.borderStatus != BorderStatus.NotBorder) { if (((parent.borderStatus & BorderStatus.UpBorder) == BorderStatus.UpBorder) && (quadrantID == 0 || quadrantID == 1)) { borderStatus &= BorderStatus.UpBorder; } if (((parent.borderStatus & BorderStatus.RightBorder) == BorderStatus.RightBorder) && (quadrantID == 0 || quadrantID == 3)) { borderStatus &= BorderStatus.RightBorder; } if (((parent.borderStatus & BorderStatus.DownBorder) == BorderStatus.DownBorder) && (quadrantID == 2 || quadrantID == 3)) { borderStatus &= BorderStatus.DownBorder; } if (((parent.borderStatus & BorderStatus.LeftBorder) == BorderStatus.LeftBorder) && (quadrantID == 1 || quadrantID == 2)) { borderStatus &= BorderStatus.LeftBorder; } } fullGenerateWidth = ((parent.fullGenerateWidth - 1) >> 1) + 1; fullGenerateOffset = fullGenerateWidth - 1; switch (quadrantID) { case 0: fullGenerateOrigin = parent.fullGenerateOrigin + new Vector2(fullGenerateOffset, fullGenerateOffset); break; case 1: fullGenerateOrigin = parent.fullGenerateOrigin + new Vector2(0, fullGenerateOffset); break; case 2: fullGenerateOrigin = parent.fullGenerateOrigin; break; case 3: fullGenerateOrigin = parent.fullGenerateOrigin + new Vector2(this.fullGenerateOffset, 0); break; } //terrainCenter = sphereCenter*(1f+activeTerrain.heightMap[activePlanet.vectorToHeightMapTable[ (int)((fullGenerateOrigin.x+(int)(fullGenerateOffset/2f))*activePlanet.mapScale), // (int)((fullGenerateOrigin.y+(int)(fullGenerateOffset/2f))*activePlanet.mapScale) ]]*activePlanet.heightScale); //terrainCenter = activeTerrain.transform.TransformPoint(terrainCenter); sphereCenter = activeTerrain.transform.TransformPoint(sphereCenter); fullGenerateOffset /= activePlanet.splitCount; activeTerrain.allNodeListArray [lodLevel].Add(this); CheckForLOD(); }