private BlockTexture GetTexture(BlockFaceField faceDir, BlockType type) { switch (type) { case BlockType.Dirt: return(BlockTexture.Dirt); case BlockType.Grass: { switch (faceDir) { case BlockFaceField.YIncreasing: return(BlockTexture.GrassTop); case BlockFaceField.YDecreasing: return(BlockTexture.Dirt); default: return(BlockTexture.GrassSide); } } case BlockType.Stone: return(BlockTexture.Stone); default: throw new ArgumentException("Unsupported Block Type"); } }
public void RemoveFace(Vector3i position, BlockFaceField facing) { if ((visibleFaceBitField[position.X, position.Y, position.Z] & (byte)facing) > 0) { visibleFaceBitField[position.X, position.Y, position.Z] ^= (byte)facing; visibleFaces--; Altered = true; } }
public void AddFace(Vector3i position, BlockFaceField facing) { if ((visibleFaceBitField[position.X, position.Y, position.Z] & (byte)facing) == 0) { visibleFaceBitField[position.X, position.Y, position.Z] |= (byte)facing; visibleFaces++; Altered = true; } }
public void ChangeFacing(Vector3i absolutePosition, BlockFaceField facing, bool activate) { Optional <Region> currentRegion = GetRegionFromAbsolute(absolutePosition); Debug.Assert(currentRegion.Valid); Vector3i relativePosition = Transformation.AbsoluteToRelative(absolutePosition, currentRegion.Data.RegionOrigin); if (activate) { currentRegion.Data.AddFace(relativePosition, facing); } else { currentRegion.Data.RemoveFace(relativePosition, facing); } }
private void BuildFace(Vector3i bottomBackLeft, BlockFaceField faceDir, BlockType type) { if (type == BlockType.Air) { return; } BlockTexture faceTexture = GetTexture(faceDir, type); Vector2[] uvMap = UVMap[faceTexture][faceDir]; Vector3i[] offsetMap = faceVertexOffsetMap[faceDir]; Vector3i currentFace; for (int k = 0; k < 6; k++) { if (regionMesh.Length < index + k + 1) { break; } currentFace = (bottomBackLeft + offsetMap[k]); if (regionMesh[index + k] == null) { regionMesh[index + k] = new VertexPositionTexture(currentFace.ToVector3, uvMap[k]); } else { regionMesh[index + k].Position = currentFace.ToVector3; regionMesh[index + k].TextureCoordinate = uvMap[k]; } } index += 6; }