private void TryGenerate(int dir) { if (lodLevel == QTManager.Instance.activePlanet.maxLodLevel) { return; } if (dir == 0 && ((borderStatus & BorderStatus.UpBorder) == BorderStatus.UpBorder)) { return; } if (dir == 1 && ((borderStatus & BorderStatus.RightBorder) == BorderStatus.RightBorder)) { return; } if (dir == 2 && ((borderStatus & BorderStatus.DownBorder) == BorderStatus.DownBorder)) { return; } if (dir == 3 && ((borderStatus & BorderStatus.LeftBorder) == BorderStatus.LeftBorder)) { return; } Vector3 pos = center; float halfLength = length * 0.5f; switch (dir) { case 0: pos = pos + new Vector3(0f, 0f, halfLength + 0.1f); break; case 1: pos = pos + new Vector3(halfLength + 0.1f, 0f, 0f); break; case 2: pos = pos - new Vector3(0f, 0f, halfLength + 0.1f); break; case 3: pos = pos - new Vector3(halfLength + 0.1f, 0f, 0f); break; } QTNode border = FindNearest(QTManager.Instance.activeTerrain.GetRoot(), pos); if (border.lodLevel > this.lodLevel + 1) { border.Generate(); } }
// Update is called once per frame public void Execute() { _tempNode = null; for (int i = 0; i < activeNodeListArray.Length; i++) { for (int m = 0; m < activeNodeListArray[i].Count; m++) { _tempNode = activeNodeListArray [i] [m]; if (_tempNode.lodLevel > 0 && QTManager.Instance.CanGenerate(_tempNode)) { _tempNode.Generate(); } else { if (_tempNode.lodLevel < _planet.maxLodLevel && QTManager.Instance.NeedBack(_tempNode.parent)) { _tempNode.parent.Back(); } } } } }