public void UpdateTransMesh() { if (bTransVoxelEnabled) { if (curStatus == ETransBuildStatus.Status_FinBuild) { if (0 == surfExtractorTrans.OnFin()) { curStatus = ETransBuildStatus.Status_Idle; } } } }
public void ThreadBuildTransExec() { surfExtractorTrans.Init(); List <IntVector4> locTransPosList = new List <IntVector4>(); List <VFVoxelChunkData> locTransChunkList = new List <VFVoxelChunkData>(); while (bTransVoxelEnabled) { if (curStatus == ETransBuildStatus.Status_ToBuild) { locTransPosList = transRebuildList.Keys.ToList(); locTransChunkList = transRebuildList.Values.ToList(); for (int i = 0; i < locTransChunkList.Count; i++) { VFVoxelChunkData cdata = locTransChunkList[i]; //if(cdata.LOD != 0) continue; if (cdata.LOD == LODOctreeMan._maxLod || null == (System.Object)cdata.ChunkGo) { continue; } int oldFaceMask = null == (System.Object)cdata.ChunkGo.TransvoxelGo ? 0 : cdata.ChunkGo.TransvoxelGo._faceMask; int faceMask = 0; int curLod = cdata.LOD; int posMask = (-1) << (curLod + 1); for (int dirIdx = 0; dirIdx < Transvoxel.Lengyel.Tables.TransitionFaceDir.Length; dirIdx++) { IntVector3 unitOfs = Transvoxel.Lengyel.Tables.TransitionFaceDir[dirIdx]; IntVector4 nearLow = new IntVector4((cdata.ChunkPosLod.x + (unitOfs.x << curLod)) & posMask, (cdata.ChunkPosLod.y + (unitOfs.y << curLod)) & posMask, (cdata.ChunkPosLod.z + (unitOfs.z << curLod)) & posMask, curLod + 1); if (locTransPosList.Contains(nearLow)) { faceMask |= 1 << dirIdx; } } if (faceMask == oldFaceMask) { continue; } surfExtractorTrans.AddSurfExtractReq(new SurfExtractReqTrans(faceMask, cdata)); } surfExtractorTrans.Exec(); curStatus = ETransBuildStatus.Status_FinBuild; } System.Threading.Thread.Sleep(16); } curStatus = ETransBuildStatus.Status_Idle; }
public bool PrepChunkList() { if (curStatus == ETransBuildStatus.Status_Idle) { transRebuildList.Clear(); Transform parTrans = VFVoxelTerrain.self.transform; foreach (Transform trans in parTrans) { if (trans.gameObject.activeSelf) { try{ VFVoxelChunkGo chunkGo = trans.GetComponent <VFVoxelChunkGo>(); VFVoxelChunkData cdata = chunkGo.Data; transRebuildList.Add(cdata.ChunkPosLod, cdata); } catch {} // Delayed Destroy will cause Dictionary.Add's exception } } curStatus = ETransBuildStatus.Status_ToBuild; return(true); } return(false); }