static void YQuad(byte block, float y, int side) { int texId = info.GetTextureLoc(block, side); TextureRec rec = atlas.GetTexRec(texId); FastColour col = colNormal; cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X - scale, pos.Y - y, pos.Z - scale, rec.U2, rec.V2, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X - scale, pos.Y - y, pos.Z + scale, rec.U1, rec.V2, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + scale, pos.Y - y, pos.Z + scale, rec.U1, rec.V1, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + scale, pos.Y - y, pos.Z - scale, rec.U2, rec.V1, col); }
void AddSpriteVertices(BlockID block) { int i = TerrainAtlas1D.Get1DIndex(BlockInfo.GetTextureLoc(block, Side.Left)); DrawInfo part = normalParts[i]; part.spriteCount += 4 * 4; }
void AddVertices(BlockID block, int face) { int i = atlas.Get1DIndex(BlockInfo.GetTextureLoc(block, face)); DrawInfo part = BlockInfo.Draw[block] == DrawType.Translucent ? translucentParts[i] : normalParts[i]; part.vCount[face] += 4; }
void SpriteXQuad(BlockID block, bool firstPart) { int texLoc = BlockInfo.GetTextureLoc(block, Side.Right); TextureRec rec = TerrainAtlas1D.GetTexRec(texLoc, 1, out texIndex); if (lastTexIndex != texIndex) { Flush(); } VertexP3fT2fC4b v = default(VertexP3fT2fC4b); v.Colour = colNormal; if (BlockInfo.Tinted[block]) { v.Colour = Utils.Tint(v.Colour, BlockInfo.FogColour[block]); } float z1 = firstPart ? 0.5f : -0.1f, z2 = firstPart ? 1.1f : 0.5f; rec.U1 = firstPart ? 0.0f : 0.5f; rec.U2 = (firstPart ? 0.5f : 1.0f) * (15.99f / 16f); float minY = scale * (1 - 0 * 2) + pos.Y, maxY = scale * (1 - 1.1f * 2) + pos.Y; float minZ = scale * (1 - z1 * 2) + pos.Z, maxZ = scale * (1 - z2 * 2) + pos.Z; v.X = pos.X; v.Y = minY; v.Z = minZ; v.U = rec.U2; v.V = rec.V2; vertices[index++] = v; v.Y = maxY; v.V = rec.V1; vertices[index++] = v; v.Z = maxZ; v.U = rec.U1; vertices[index++] = v; v.Y = minY; v.V = rec.V2; vertices[index++] = v; }
void AddVertices(BlockID block, int face) { int i = TerrainAtlas1D.Get1DIndex(BlockInfo.GetTextureLoc(block, face)); bool isLava = IsBlockLiquid(block); bool isTranslucent = BlockInfo.Draw[block] == DrawType.Translucent; DrawInfo part; //DrawInfo part = BlockInfo.Draw[block] == DrawType.Translucent ? translucentParts[i] : normalParts[i]; if (isLava && !isTranslucent) { part = liquidParts[i]; } else { part = isTranslucent ? translucentParts[i] : normalParts[i]; } #if ALPHA if (block == Block.Fence) { part.vCount[face] += 4 * 9; } else { part.vCount[face] += 4; } #else part.vCount[face] += 4; #endif }
void SpriteZQuad(BlockID block, bool firstPart) { int texLoc = BlockInfo.GetTextureLoc(block, Side.Right); TextureRec rec = Atlas1D.GetTexRec(texLoc, 1, out texIndex); if (lastTexIndex != texIndex) { Flush(); } VertexP3fT2fC4b v = default(VertexP3fT2fC4b); v.Col = colNormal; if (BlockInfo.Tinted[block]) { v.Col *= BlockInfo.FogCol[block]; } float x1 = firstPart ? 0.5f : -0.1f, x2 = firstPart ? 1.1f : 0.5f; rec.U1 = firstPart ? 0.0f : 0.5f; rec.U2 = (firstPart ? 0.5f : 1.0f) * (15.99f / 16f); float minX = scale * (1 - x1 * 2) + pos.X, maxX = scale * (1 - x2 * 2) + pos.X; float minY = scale * (1 - 0 * 2) + pos.Y, maxY = scale * (1 - 1.1f * 2) + pos.Y; v.Z = pos.Z; v.X = minX; v.Y = minY; v.U = rec.U2; v.V = rec.V2; vertices[index++] = v; v.Y = maxY; v.V = rec.V1; vertices[index++] = v; v.X = maxX; v.U = rec.U1; vertices[index++] = v; v.Y = minY; v.V = rec.V2; vertices[index++] = v; }
static void YQuad(byte block, float y, int side) { int texLoc = info.GetTextureLoc(block, side); TextureRec rec = atlas.GetTexRec(texLoc, 1, out texIndex); FlushIfNotSame(); FastColour col = colNormal; float vOrigin = (texLoc % atlas.elementsPerAtlas1D) * atlas.invElementSize; rec.U1 = minBB.X; rec.U2 = maxBB.X; rec.V1 = vOrigin + minBB.Z * atlas.invElementSize; rec.V2 = vOrigin + maxBB.Z * atlas.invElementSize * (15.99f / 16f); cache.vertices[index++] = new VertexPos3fTex2fCol4b(Make(minBB.X), y, Make(minBB.Z), rec.U1, rec.V1, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(Make(maxBB.X), y, Make(minBB.Z), rec.U2, rec.V1, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(Make(maxBB.X), y, Make(maxBB.Z), rec.U2, rec.V2, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(Make(minBB.X), y, Make(maxBB.Z), rec.U1, rec.V2, col); }
int GetTex(BlockID block, int side) { int texLoc = BlockInfo.GetTextureLoc(block, side); texIndex = texLoc / TerrainAtlas1D.elementsPerAtlas1D; if (lastTexIndex != texIndex) { Flush(); } return(texLoc); }
int GetTex(BlockID block, int side) { int texLoc = BlockInfo.GetTextureLoc(block, side); texIndex = texLoc >> Atlas1D.Shift; if (lastTexIndex != texIndex) { Flush(); } return(texLoc); }
static void YQuad(byte block, float y, int side) { int texId = info.GetTextureLoc(block, side); TextureRec rec = atlas.GetTexRec(texId); FastColour col = colNormal; float uOrigin = rec.U1, vOrigin = rec.V1; rec.U1 = uOrigin + minBB.Z * invElemSize; rec.U2 = uOrigin + maxBB.Z * invElemSize * 15.99f / 16f; rec.V1 = vOrigin + minBB.X * invElemSize; rec.V2 = vOrigin + maxBB.X * invElemSize * 15.99f / 16f; cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + Make(minBB.X), pos.Y + y, pos.Z + Make(minBB.Z), rec.U2, rec.V2, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + Make(minBB.X), pos.Y + y, pos.Z + Make(maxBB.Z), rec.U1, rec.V2, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + Make(maxBB.X), pos.Y + y, pos.Z + Make(maxBB.Z), rec.U1, rec.V1, col); cache.vertices[index++] = new VertexPos3fTex2fCol4b(pos.X + Make(maxBB.X), pos.Y + y, pos.Z + Make(minBB.Z), rec.U2, rec.V1, col); }
unsafe void WriteBlockDefinitionCompound(byte id) { BlockInfo info = game.BlockInfo; WriteTag(NbtTagType.Compound); WriteString("Block" + id); WriteTag(NbtTagType.Int8); WriteString("ID"); WriteUInt8(id); WriteTag(NbtTagType.String); WriteString("Name"); WriteString(info.Name[id]); WriteTag(NbtTagType.Int8); WriteString("CollideType"); WriteUInt8((byte)info.CollideType[id]); float speed = info.SpeedMultiplier[id]; WriteTag(NbtTagType.Real32); WriteString("Speed"); WriteInt32(*((int *)&speed)); WriteTag(NbtTagType.Int8Array); WriteString("Textures"); WriteInt32(6); WriteUInt8(info.GetTextureLoc(id, TileSide.Top)); WriteUInt8(info.GetTextureLoc(id, TileSide.Bottom)); WriteUInt8(info.GetTextureLoc(id, TileSide.Left)); WriteUInt8(info.GetTextureLoc(id, TileSide.Right)); WriteUInt8(info.GetTextureLoc(id, TileSide.Front)); WriteUInt8(info.GetTextureLoc(id, TileSide.Back)); WriteTag(NbtTagType.Int8); WriteString("TransmitsLight"); WriteUInt8(info.BlocksLight[id] ? 0 : 1); WriteTag(NbtTagType.Int8); WriteString("WalkSound"); WriteUInt8((byte)info.DigSounds[id]); WriteTag(NbtTagType.Int8); WriteString("FullBright"); WriteUInt8(info.FullBright[id] ? 1 : 0); WriteTag(NbtTagType.Int8); WriteString("Shape"); WriteUInt8(GetShape(info, id)); WriteTag(NbtTagType.Int8); WriteString("BlockDraw"); WriteUInt8(GetDraw(info, id)); FastColour col = info.FogColour[id]; WriteTag(NbtTagType.Int8Array); WriteString("Fog"); WriteInt32(4); WriteUInt8((byte)(128 * info.FogDensity[id] - 1)); WriteUInt8(col.R); WriteUInt8(col.G); WriteUInt8(col.B); Vector3 min = info.MinBB[id], max = info.MaxBB[id]; WriteTag(NbtTagType.Int8Array); WriteString("Coords"); WriteInt32(6); WriteUInt8((byte)(min.X * 16)); WriteUInt8((byte)(min.Y * 16)); WriteUInt8((byte)(min.Z * 16)); WriteUInt8((byte)(max.X * 16)); WriteUInt8((byte)(max.Y * 16)); WriteUInt8((byte)(max.Z * 16)); WriteTag(NbtTagType.End); }