public void Init(QTNode parent, int quadrantID) { this.parent = parent; this.lodLevel = parent.lodLevel - 1; this.quadrantID = quadrantID; this.length = parent.length * 0.5f; float offSet = this.length * 0.5f; this.center = new Vector3(parent.center.x + ((quadrantID == 0 || quadrantID == 3) ? offSet : -offSet), 0f, parent.center.z + ((quadrantID == 0 || quadrantID == 1) ? offSet : -offSet)); 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; } } QTManager.Instance.activeTerrain.allNodeListArray [lodLevel].Add(this); CheckForLOD(); }
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(); }