public void EditorCreateDataEnd() { if (mCreateDataJob == null || mCreateDataJob.QuadTrees == null) { return; } PillarSetting setting = mCreateDataJob.CreateSetting(); //finaliz the tree data for (int i = 0; i < mCreateDataJob.QuadTrees.Length; ++i) { QuadTreeNodeSerializable node = (QuadTreeNodeSerializable)mCreateDataJob.QuadTrees[i]; QuadTreeBase replaceLeaf = QuadTreeNode.CombineTree(node, 0.5f * mCreateDataJob.sliceSize[0], 0.5f * mCreateDataJob.sliceSize[1], mCreateDataJob.heightPerGrade, mCreateDataJob.slopeErr); if (replaceLeaf != null) { mCreateDataJob.QuadTrees[i] = replaceLeaf; } } // string path = string.Format("{0}/MightyPillar/Resources/{1}.bytes", Application.dataPath, DataName); MPFileUtil.SaveData(path, setting, mCreateDataJob.QuadTrees); MPDataDisplayer displayer = gameObject.GetComponent <MPDataDisplayer>(); if (displayer != null) { displayer.OnCreatorRegenData(); } }
private void ScanTree(QuadTreeNodeSerializable tree) { int detailedX = curXIdx * detailedSize; int detailedZ = curZIdx * detailedSize; OrderedSlices slices = new OrderedSlices(); for (int u = 0; u < detailedSize; ++u) { for (int v = 0; v < detailedSize; ++v) { slices.Clear(); float fx = (curXIdx + (float)(u + 0.5f) / detailedSize) * sliceSize[0]; float fz = (curZIdx + (float)(v + 0.5f) / detailedSize) * sliceSize[1]; Vector3 top = vCheckTop + fx * Vector3.right + fz * Vector3.forward; mScanner.RunScan(top, heightPerGrade, heightValRange, slices); tree.AddPillar(subdivision, detailedX + u, detailedZ + v, slices); } } }
public void Update() { if (IsDone) { return; } if (QuadTrees[curXIdx * maxZ + curZIdx] == null) { QuadTrees[curXIdx * maxZ + curZIdx] = new QuadTreeNodeSerializable(subdivision); } ScanTree((QuadTreeNodeSerializable)QuadTrees[curXIdx * maxZ + curZIdx]); //update idx ++curXIdx; if (curXIdx >= maxX) { if (curZIdx < maxZ - 1) { curXIdx = 0; } ++curZIdx; } }