public bool SetVoxel(Vector3Int gridPosition, Voxel.VoxelType type) { if (!initialized) { return(false); } if (!VoxelUtil.BoundaryCheck(gridPosition, chunkSize)) { return(false); } voxels[VoxelUtil.To1DIndex(gridPosition, chunkSize)].data = type; dirty = true; argent = true; return(true); }
static unsafe void AddQuadByDirection(int direction, Voxel.VoxelType data, VoxelLight voxelLight, float width, float height, int3 gridPosition, NativeCounter.Concurrent counter, NativeArray <float3> vertices, NativeArray <float3> normals, NativeArray <float4> uvs, NativeArray <Color> colors, NativeArray <int> indices) { int numFace = counter.Increment(); int numVertices = numFace * 4; for (int i = 0; i < 4; i++) { float3 vertex; vertex = CubeVertices[CubeFaces[i + direction * 4]]; vertex[DirectionAlignedX[direction]] *= width; vertex[DirectionAlignedY[direction]] *= height; int atlasIndex = (int)data * 6 + direction; int2 atlasPosition = new int2 { x = atlasIndex % AtlasSize.x, y = atlasIndex / AtlasSize.x }; float4 uv = new float4 { x = CubeUVs[i].x * width, y = CubeUVs[i].y * height, z = atlasPosition.x, w = atlasPosition.y }; colors[numVertices + i] = new Color(0, 0, 0, voxelLight.ambient[i + direction * 4]); vertices[numVertices + i] = vertex + gridPosition; normals[numVertices + i] = VoxelDirectionOffsets[direction]; uvs[numVertices + i] = uv; } int numindices = numFace * 6; for (int i = 0; i < 6; i++) { if (voxelLight.ambient[direction * 4] + voxelLight.ambient[direction * 4 + 3] < voxelLight.ambient[direction * 4 + 1] + voxelLight.ambient[direction * 4 + 2]) { indices[numindices + i] = CubeFlipedIndices[direction * 6 + i] + numVertices; } else { indices[numindices + i] = CubeIndices[direction * 6 + i] + numVertices; } } }