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; }
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, }); }