Esempio n. 1
0
        private void GetCharVerts(char character, float[] verts, ref int index, float[ , ] rotationMat, ref int x, ref int y)
        {
            if (char.IsWhiteSpace(character))
            {
                if (character == '\t')
                {
                    x += 4;
                }
                else if (character == '\n')
                {
                    y += 1;
                    x  = 0;
                }
                else
                {
                    x += 1;
                }

                return;
            }

            Vector2 subMin = myFont.GetCharOffset(character);

            Vector2 tMin = Texture.GetCoords(subMin.X, subMin.Y);
            Vector2 tMax = Texture.GetCoords(subMin.X + myFont.CharWidth, subMin.Y + myFont.CharHeight);
            float   xMin = tMin.X;
            float   yMin = tMin.Y;
            float   xMax = tMax.X;
            float   yMax = tMax.Y;

            float minX = x * myFont.CharWidth;
            float minY = y * myFont.CharHeight;

            float[,] pos = new float[, ]
            {
                { minX, minY },
                { minX + myFont.CharWidth, minY },
                { minX + myFont.CharWidth, minY + myFont.CharHeight },
                { minX, minY + myFont.CharHeight }
            };

            for (int i = 0; i < 4; ++i)
            {
                float xp = pos[i, 0];
                float yp = pos[i, 1];
                pos[i, 0] = X + rotationMat[0, 0] * xp + rotationMat[0, 1] * yp;
                pos[i, 1] = Y + rotationMat[1, 0] * xp + rotationMat[1, 1] * yp;
            }

            Array.Copy(new float[]
            {
                pos[0, 0], pos[0, 1], xMin, yMin, Colour.R, Colour.G, Colour.B, Colour.A,
                pos[1, 0], pos[1, 1], xMax, yMin, Colour.R, Colour.G, Colour.B, Colour.A,
                pos[2, 0], pos[2, 1], xMax, yMax, Colour.R, Colour.G, Colour.B, Colour.A,
                pos[3, 0], pos[3, 1], xMin, yMax, Colour.R, Colour.G, Colour.B, Colour.A,
            }, 0, verts, index, 8 * 4);

            index += 8 * 4;
            x     += 1;
        }
Esempio n. 2
0
        protected override float[] FindVerts()
        {
            Vector2 tMin = Texture.GetCoords(SubrectLeft, SubrectTop);
            Vector2 tMax = Texture.GetCoords(SubrectRight, SubrectBottom);
            Vector2 fMin = Texture.GetCoords(SubrectLeft + FrameLeftOffet, SubrectTop + FrameTopOffet);
            Vector2 fMax = Texture.GetCoords(SubrectRight - FrameRightOffet, SubrectBottom - FrameBottomOffet);

            float xtMin = FlipHorizontal ? tMax.X : tMin.X;
            float ytMin = FlipVertical ? tMax.Y : tMin.Y;
            float xtMax = FlipHorizontal ? tMin.X : tMax.X;
            float ytMax = FlipVertical ? tMin.Y : tMax.Y;
            float xfMin = FlipHorizontal ? fMax.X : fMin.X;
            float yfMin = FlipVertical ? fMax.Y : fMin.Y;
            float xfMax = FlipHorizontal ? fMin.X : fMax.X;
            float yfMax = FlipVertical ? fMin.Y : fMax.Y;

            float[,] verts = new float[, ]
            {
                { 0, 0 },
                { FrameLeftOffet *Scale.X, 0 },
                { FrameLeftOffet *Scale.X, FrameTopOffet *Scale.Y },
                { 0, FrameTopOffet *Scale.Y },

                { FrameLeftOffet *Scale.X, 0 },
                { Width - FrameRightOffet * Scale.X, 0 },
                { Width - FrameRightOffet * Scale.X, FrameTopOffet *Scale.Y },
                { FrameLeftOffet *Scale.X, FrameTopOffet *Scale.Y },

                { Width - FrameRightOffet * Scale.X, 0 },
                { Width, 0 },
                { Width, FrameTopOffet *Scale.Y },
                { Width - FrameRightOffet * Scale.X, FrameTopOffet *Scale.Y },

                //

                { 0, FrameTopOffet *Scale.Y },
                { FrameLeftOffet *Scale.X, FrameTopOffet *Scale.Y },
                { FrameLeftOffet *Scale.X, Height - FrameBottomOffet *Scale.Y },
                { 0, Height - FrameBottomOffet * Scale.Y },

                { FrameLeftOffet *Scale.X, FrameTopOffet *Scale.Y },
                { Width - FrameRightOffet * Scale.X, FrameTopOffet *Scale.Y },
                { Width - FrameRightOffet * Scale.X, Height - FrameBottomOffet * Scale.Y },
                { FrameLeftOffet *Scale.X, Height - FrameBottomOffet *Scale.Y },

                { Width - FrameRightOffet * Scale.X, FrameTopOffet *Scale.Y },
                { Width, FrameTopOffet *Scale.Y },
                { Width, Height - FrameBottomOffet * Scale.Y },
                { Width - FrameRightOffet * Scale.X, Height - FrameBottomOffet * Scale.Y },

                //

                { 0, Height - FrameBottomOffet * Scale.Y },
                { FrameLeftOffet *Scale.X, Height - FrameBottomOffet *Scale.Y },
                { FrameLeftOffet *Scale.X, Height },
                { 0, Height },

                { FrameLeftOffet *Scale.X, Height - FrameBottomOffet *Scale.Y },
                { Width - FrameRightOffet * Scale.X, Height - FrameBottomOffet * Scale.Y },
                { Width - FrameRightOffet * Scale.X, Height },
                { FrameLeftOffet *Scale.X, Height },

                { Width - FrameRightOffet * Scale.X, Height - FrameBottomOffet * Scale.Y },
                { Width, Height - FrameBottomOffet * Scale.Y },
                { Width, Height },
                { Width - FrameRightOffet * Scale.X, Height }
            };

            float[,] mat = new float[, ]
            {
                { (float)Math.Cos(Rotation), -(float)Math.Sin(Rotation) },
                { (float)Math.Sin(Rotation), (float)Math.Cos(Rotation) }
            };

            for (int i = 0; i < 4 * 9; ++i)
            {
                float x = verts[i, 0];
                float y = verts[i, 1];
                verts[i, 0] = X + mat[0, 0] * x + mat[0, 1] * y;
                verts[i, 1] = Y + mat[1, 0] * x + mat[1, 1] * y;
            }

            int v = 0;

            return(new float[]
            {
                verts[v, 0], verts[v++, 1], xtMin, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMin, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMax, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, ytMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,

                //

                verts[v, 0], verts[v++, 1], xtMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMin, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, yfMin, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,

                //

                verts[v, 0], verts[v++, 1], xtMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMin, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMin, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMin, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,

                verts[v, 0], verts[v++, 1], xfMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, yfMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xtMax, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,
                verts[v, 0], verts[v++, 1], xfMax, ytMax, Colour.R, Colour.G, Colour.B, Colour.A,
            });
        }