public override void BuildBlock(Chunk chunk, ref Vector3Int localPos, int materialID) { for (int d = 0; d < 6; d++) { Direction dir = DirectionUtils.Get(d); BlockFace face = new BlockFace { block = null, pos = localPos, side = dir, light = new BlockLightData(0), materialID = materialID }; BuildFace(chunk, null, null, ref face, false); } RenderGeometryBatcher batcher = chunk.GeometryHandler.Batcher; var d2 = customMeshConfig.data; Rect texture = d2.textures.GetTexture(chunk, ref localPos, Direction.down); batcher.AddMeshData(materialID, d2.tris, d2.verts, d2.colors, d2.uvs, ref texture, localPos); }
public override void BuildFace(Chunk chunk, Vector3[] vertices, Color32[] palette, ref BlockFace face, bool rotated) { var d = connectedMeshConfig.dataDir[(int)face.side]; var tris = d.tris; if (tris == null) { return; } var verts = d.verts; var uvs = d.uvs; var textures = d.textures; var colors = d.colors; Rect rect; ChunkBlocks blocks = chunk.blocks; RenderGeometryBatcher batcher = chunk.GeometryHandler.Batcher; Vector3Int sidePos = face.pos.Add(face.side); if (connectedMeshConfig.connectsToSolid && blocks.Get(ref sidePos).Solid) { rect = textures.GetTexture(chunk, ref face.pos, face.side); batcher.AddMeshData(face.materialID, tris, verts, colors, uvs, ref rect, face.pos); } else if (connectedMeshConfig.connectsToTypes.Length != 0) { int neighborType = blocks.Get(ref sidePos).Type; for (int i = 0; i < connectedMeshConfig.connectsToTypes.Length; i++) { if (neighborType == connectedMeshConfig.connectsToTypes[i]) { rect = textures.GetTexture(chunk, ref face.pos, face.side); batcher.AddMeshData(face.materialID, tris, verts, colors, uvs, ref rect, face.pos); break; } } } var d2 = customMeshConfig.data; rect = d2.textures.GetTexture(chunk, ref face.pos, Direction.down); batcher.AddMeshData(face.materialID, d2.tris, d2.verts, d2.colors, d2.uvs, ref rect, face.pos); }
public override void BuildBlock(Chunk chunk, Vector3Int localPos) { Rect texture = customMeshConfig.texture != null ? customMeshConfig.texture.GetTexture(chunk, localPos, Direction.down) : new Rect(); RenderGeometryBatcher batcher = chunk.GeometryHandler.Batcher; batcher.AddMeshData(customMeshConfig.tris, customMeshConfig.verts, texture, localPos); }
public override void BuildBlock(Chunk chunk, ref Vector3Int localPos, int materialID) { var data = customMeshConfig.data; Rect texture = data.textures != null ? data.textures.GetTexture(chunk, ref localPos, Direction.down) : new Rect(); RenderGeometryBatcher batcher = chunk.GeometryHandler.Batcher; if (data.uvs == null) { batcher.AddMeshData(materialID, data.tris, data.verts, data.colors, localPos); } else if (data.colors == null) { batcher.AddMeshData(materialID, data.tris, data.verts, data.uvs, ref texture, localPos); } else { batcher.AddMeshData(materialID, data.tris, data.verts, data.colors, data.uvs, ref texture, localPos); } }
public override void BuildBlock(Chunk chunk, Vector3Int localPos, Vector3Int globalPos) { Rect texture; RenderGeometryBatcher batcher = chunk.GeometryHandler.Batcher; WorldBlocks blocks = chunk.world.blocks; for (int d = 0; d < 6; d++) { Direction dir = DirectionUtils.Get(d); if (!connectedMeshConfig.directionalTris.ContainsKey(dir)) { continue; } if (connectedMeshConfig.connectsToSolid && blocks.GetBlock(globalPos + dir).IsSolid(DirectionUtils.Opposite(dir))) { texture = connectedMeshConfig.texture.GetTexture(chunk, localPos, globalPos, dir); batcher.AddMeshData(connectedMeshConfig.directionalTris[dir], connectedMeshConfig.directionalVerts[dir], texture, localPos); } else if (connectedMeshConfig.connectsToTypes.Length != 0) { int neighborType = blocks.Get(globalPos.Add(dir)).Type; for (int i = 0; i < connectedMeshConfig.connectsToTypes.Length; i++) { if (neighborType == connectedMeshConfig.connectsToTypes[i]) { texture = connectedMeshConfig.texture.GetTexture(chunk, localPos, globalPos, dir); batcher.AddMeshData(connectedMeshConfig.directionalTris[dir], connectedMeshConfig.directionalVerts[dir], texture, localPos); break; } } } } texture = customMeshConfig.texture.GetTexture(chunk, localPos, globalPos, Direction.down); batcher.AddMeshData(customMeshConfig.tris, customMeshConfig.verts, texture, localPos); }