Exemple #1
0
    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();
        }
    }
Exemple #2
0
    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);
            }
        }
    }
Exemple #3
0
 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;
     }
 }