Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
        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;
                }
            }
        }