コード例 #1
0
        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);
        }
コード例 #2
0
        void AddSpriteVertices(BlockID block)
        {
            int      i    = TerrainAtlas1D.Get1DIndex(BlockInfo.GetTextureLoc(block, Side.Left));
            DrawInfo part = normalParts[i];

            part.spriteCount += 4 * 4;
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
        }
コード例 #5
0
        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
        }
コード例 #6
0
        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;
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        int GetTex(BlockID block, int side)
        {
            int texLoc = BlockInfo.GetTextureLoc(block, side);

            texIndex = texLoc / TerrainAtlas1D.elementsPerAtlas1D;

            if (lastTexIndex != texIndex)
            {
                Flush();
            }
            return(texLoc);
        }
コード例 #9
0
        int GetTex(BlockID block, int side)
        {
            int texLoc = BlockInfo.GetTextureLoc(block, side);

            texIndex = texLoc >> Atlas1D.Shift;

            if (lastTexIndex != texIndex)
            {
                Flush();
            }
            return(texLoc);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }