Grey.Vox.Region.AddVoxel C# (CSharp) Method

AddVoxel() public method

public AddVoxel ( int x, int y, int z, ushort id ) : void
x int
y int
z int
id ushort
return void
        public void AddVoxel(int x, int y, int z, ushort id)
        {
            // Check If A Voxel Exists There
            int i = ToIndex(x, y, z);
            if(voxels[i].ID == id) return;

            // Set The Voxel To Be Empty
            bool change = Flags.HasSomeFlags(voxels[i].Flags, Voxel.FACE_MASK);
            voxels[i].ID = id;
            voxels[i].Flags = 0x00;

            // TODO: Check Surrounding Faces
            if(x < WIDTH - 1)
                change |= RecalculateSeams(i + 1, i, Voxel.FACE_NX);
            if(x > 0)
                change |= RecalculateSeams(i - 1, i, Voxel.FACE_PX);
            if(z < DEPTH - 1)
                change |= RecalculateSeams(i + WIDTH, i, Voxel.FACE_NZ);
            if(z > 0)
                change |= RecalculateSeams(i - WIDTH, i, Voxel.FACE_PZ);
            if(y < HEIGHT - 1)
                change |= RecalculateSeams(i + PLANE_SIZE, i, Voxel.FACE_NY);
            if(y > 0)
                change |= RecalculateSeams(i - PLANE_SIZE, i, Voxel.FACE_PY);

            // TODO: Send Update To Neighboring Regions
            if(x == 0 && rNX != null) rNX.NotifyFacesChanged();
            else if(x == Region.WIDTH - 1 && rPX != null) rPX.NotifyFacesChanged();
            if(z == 0 && rNZ != null) rNZ.NotifyFacesChanged();
            else if(z == Region.DEPTH - 1 && rPZ != null) rPZ.NotifyFacesChanged();

            // TODO: Use The Change
            NotifyFacesChanged();
        }