private void UpdatePreviewMesh() { editorCommon.ClearPreviewMesh(); if (baseTarget.edit_configureMode == VoxelBase.Edit_configureMode.Material && baseTarget.edit_configureMaterialIndex > 0 && baseTarget.edit_configureMaterialIndex < baseTarget.materialData.Count) { List <VoxelData.Voxel> voxels = new List <VoxelData.Voxel>(); editVoxelList.AllAction((x, y, z) => { var index = baseTarget.voxelData.VoxelTableContains(x, y, z); if (index < 0) { return; } var voxel = baseTarget.voxelData.voxels[index]; voxel.palette = -1; voxels.Add(voxel); }); if (voxels.Count > 0) { editorCommon.previewMesh = baseCore.Edit_CreateMesh(voxels, null, false); } } }
public Dictionary <IntVector3, VoxelBase.Face> GetSelectionRectVoxelFace() { Dictionary <IntVector3, VoxelBase.Face> result = new Dictionary <IntVector3, VoxelBase.Face>(); if (selectionRect.Enable && objectTarget.voxelData != null && objectTarget.voxelData.vertexList != null) { var localToWorldMatrix = objectTarget.transform.localToWorldMatrix; FlagTable3 containsTable = new FlagTable3(objectTarget.voxelData.voxelSize.x + 1, objectTarget.voxelData.voxelSize.y + 1, objectTarget.voxelData.voxelSize.z + 1); for (int i = 0; i < objectTarget.voxelData.vertexList.Count; i++) { var local = objectCore.GetVoxelRatePosition(objectTarget.voxelData.vertexList[i], Vector3.zero); var world = localToWorldMatrix.MultiplyPoint3x4(local); var screen = HandleUtility.WorldToGUIPoint(world); if (selectionRect.rect.Contains(screen)) { containsTable.Set(objectTarget.voxelData.vertexList[i], true); } } containsTable.AllAction((x, y, z) => { Action <int, int, int, VoxelBase.Face> AddFace = (xx, yy, zz, face) => { var pos = new IntVector3(xx, yy, zz); var index = objectTarget.voxelData.VoxelTableContains(pos); if (index < 0) { return; } if ((objectTarget.voxelData.voxels[index].visible & face) == 0) { return; } VoxelBase.Face combineFace; if (!result.TryGetValue(pos, out combineFace)) { result.Add(pos, face); } else { combineFace |= face; result[pos] = combineFace; } }; #region Left if (containsTable.Get(x, y + 1, z) && containsTable.Get(x, y, z + 1) && containsTable.Get(x, y + 1, z + 1)) { AddFace(x, y, z, VoxelBase.Face.left); AddFace(x - 1, y, z, VoxelBase.Face.right); } #endregion #region Down if (containsTable.Get(x + 1, y, z) && containsTable.Get(x, y, z + 1) && containsTable.Get(x + 1, y, z + 1)) { AddFace(x, y, z, VoxelBase.Face.down); AddFace(x, y - 1, z, VoxelBase.Face.up); } #endregion #region Back if (containsTable.Get(x + 1, y, z) && containsTable.Get(x, y + 1, z) && containsTable.Get(x + 1, y + 1, z)) { AddFace(x, y, z, VoxelBase.Face.back); AddFace(x, y, z - 1, VoxelBase.Face.forward); } #endregion }); } return(result); }