private void DrawBlockTransform(Entity p, float dispX, float dispY, float dispZ, float scale) { int lastTexIndex = -1; bool sprite = BlockInfo.Draw[p.ModelBlock] == DrawType.Sprite; if (sprite) { SpriteXQuad(false, false, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteXQuad(false, true, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteZQuad(false, false, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteZQuad(false, true, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteZQuad(true, false, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteZQuad(true, true, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteXQuad(true, false, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); SpriteXQuad(true, true, p.ModelBlock, ref lastTexIndex, game.ModelCache, dispX, dispY, dispZ, scale); } else { CuboidDrawer drawer = new CuboidDrawer(); drawer.minBB = BlockInfo.MinBB[p.ModelBlock]; drawer.minBB.Y = 1 - drawer.minBB.Y; drawer.maxBB = BlockInfo.MaxBB[p.ModelBlock]; drawer.maxBB.Y = 1 - drawer.maxBB.Y; Vector3 min = BlockInfo.RenderMinBB[p.ModelBlock]; Vector3 max = BlockInfo.RenderMaxBB[p.ModelBlock]; drawer.x1 = (min.X - 0.5f) * scale + dispX; drawer.y1 = min.Y * scale + dispY; drawer.z1 = (min.Z - 0.5f) * scale + dispZ; drawer.x2 = (max.X - 0.5f) * scale + dispX; drawer.y2 = max.Y * scale + dispY; drawer.z2 = (max.Z - 0.5f) * scale + dispZ; drawer.Tinted = BlockInfo.Tinted[p.ModelBlock]; drawer.TintCol = BlockInfo.FogCol[p.ModelBlock]; drawer.Bottom(1, cols[1], GetTex(Side.Bottom, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); drawer.Front(1, cols[3], GetTex(Side.Front, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); drawer.Right(1, cols[5], GetTex(Side.Right, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); drawer.Back(1, cols[2], GetTex(Side.Back, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); drawer.Left(1, cols[4], GetTex(Side.Left, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); drawer.Top(1, cols[0], GetTex(Side.Top, p.ModelBlock, ref lastTexIndex), game.ModelCache.vertices, ref index); } if (index == 0) { return; } if (sprite) { game.Graphics.FaceCulling = true; } lastTexIndex = texIndex; if (lastTexIndex != -1) { game.Graphics.BindTexture(Atlas1D.TexIds[lastTexIndex]); UpdateVB(); } lastTexIndex = texIndex; index = 0; if (sprite) { game.Graphics.FaceCulling = false; } }