topical media & game development 
  
 
 
 
 
  
    
    
  
 game-xna-intro-XnaShooterUIProject-Graphics-NumbersTextureFont.cs / cs
  // Project: XnaGraphicEngine, File: TextureFont.cs
  // Namespace: XnaGraphicEngine.Graphics, Class: TextureFont
  // Path: C:\code\XnaGraphicEngine\Graphics, Author: Abi
  // Code lines: 380, Size of file: 10,76 KB
  // Creation date: 31.08.2006 19:47
  // Last modified: 18.09.2006 22:11
  // Generated with Commenter by abi.exDream.com
  
  #region Using directives
  using System;
  using System.Collections.Generic;
  using System.Text;
  using XnaGraphicEngine.Game;
  using XnaGraphicEngine.Helpers;
  using Microsoft.Xna.Framework;
  using Microsoft.Xna.Framework.Graphics;
  #endregion
  
  namespace XnaGraphicEngine.Graphics
  {
   <summary>
 Texture font
 
</summary>
        public class NumbersTextureFont
        {
                #region Constants
 
<summary>
 Smaller numbers in the NumbersFont.png graphic
 
</summary>
                private static readonly Rectangle[] SmallNumberRects =
                        {
                                // 0
                                new Rectangle(0, 0, 25, 36),
                                // 1
                                new Rectangle(26, 0, 20, 36),
                                // 2
                                new Rectangle(48, 0, 24, 36),
                                // 3
                                new Rectangle(72, 0, 24, 36),
                                // 4
                                new Rectangle(96, 0, 25, 36),
                                // 5
                                new Rectangle(121, 0, 23, 36),
                                // 6
                                new Rectangle(144, 0, 25, 36),
                                // 7
                                new Rectangle(169, 0, 23, 36),
                                // 8
                                new Rectangle(192, 0, 24, 36),
                                // 9
                                new Rectangle(216, 0, 24, 36),
                                // :
                                new Rectangle(240, 0, 15, 36),
                        };
                #endregion
                  #region Variables
   <summary>
 Texture for rendering all these fonts
 
</summary>
                private Texture fontTexture = null;
                #endregion
                  #region Constructor
   <summary>
 Create texture font
 
</summary>
                public NumbersTextureFont(Texture setFontTexture)
                {
                        fontTexture = setFontTexture;
                } // NumbersTextureFont(setFontTexture)
                #endregion
                  #region Write number
   <summary>
 Write digit
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="gfxRects">Gfx rects
</param>
 <returns>Int
</returns>
                private int WriteDigit(int x, int y, int digit, Rectangle[] gfxRects)
                {
                        float resScalingX = 0.725f * (float)BaseGame.Width / 1024.0f;
                        float resScalingY = 0.725f * (float)BaseGame.Height / 768.0f;
                          Rectangle rect = gfxRects[digit % gfxRects.Length];
                          fontTexture.RenderOnScreen(new Rectangle(x, y,
                                  (int)Math.Round(rect.Width * resScalingX),
                                  (int)Math.Round(rect.Height * resScalingY)), rect);
  
                          return (int)Math.Round((rect.Width - 4) * resScalingX);
                  } // WriteDigit(x, y, digit)
  
   <summary>
 Write digit
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="digit">Digit
</param>
 <param name="gfxRects">Gfx rects
</param>
 <param name="alpha">Alpha
</param>
 <returns>Int
</returns>
                private int WriteDigit(int x, int y, int digit, Rectangle[] gfxRects,
                        float alpha)
                {
                        float resScalingX = 0.725f * (float)BaseGame.Width / 1024.0f;
                        float resScalingY = 0.725f * (float)BaseGame.Height / 768.0f;
                          Rectangle rect = gfxRects[digit % gfxRects.Length];
                          fontTexture.RenderOnScreen(new Rectangle(x, y,
                                  (int)Math.Round(rect.Width * resScalingX),
                                  (int)Math.Round(rect.Height * resScalingY)), rect,
                                  ColorHelper.ApplyAlphaToColor(Color.White, alpha));
  
                          return (int)Math.Round((rect.Width-4) * resScalingX);
                  } // WriteDigit(x, y, digit)
  
   <summary>
 Write number
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="number">Number
</param>
 <param name="gfxRects">Gfx rects
</param>
 <returns>Int
</returns>
                private int WriteNumber(int x, int y, int number, Rectangle[] gfxRects)
                {
                        // Convert to string
                        string numberText = number.ToString();
                        int width = 0;
                          // And now process every letter
                          foreach (char numberChar in numberText.ToCharArray())
                          {
                                  width += WriteDigit(x + width, y, (int)numberChar - (int)'0', gfxRects);
                          } // foreach (numberChar)
  
                          return width;
                  } // WriteNumber(x, y, number)
  
   <summary>
 Write number
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="number">Number
</param>
 <param name="gfxRects">Gfx rects
</param>
 <param name="alpha">Alpha
</param>
 <returns>Int
</returns>
                private int WriteNumber(int x, int y, int number, Rectangle[] gfxRects,
                        float alpha)
                {
                        // Convert to string
                        string numberText = number.ToString();
                        int width = 0;
                          // And now process every letter
                          foreach (char numberChar in numberText.ToCharArray())
                          {
                                  width += WriteDigit(
                                          x + width, y, (int)numberChar - (int)'0', gfxRects, alpha);
                          } // foreach (numberChar)
  
                          return width;
                  } // WriteNumber(x, y, number)
  
   <summary>
 Write number
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="number">Number
</param>
                public void WriteNumber(int x, int y, int number)
                {
                        WriteNumber(x, y, number, SmallNumberRects);
                } // WriteSmallNumber(x, y, number)
   <summary>
 Write number centered
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="number">Number
</param>
                public void WriteNumberCentered(int x, int y, int number)
                {
                        float resScalingY = 0.725f * (float)BaseGame.Height / 768.0f;
                        WriteNumber(x - (int)(resScalingY *
                                (number.ToString().Length * SmallNumberRects[0].Width / 2)),
                                y, number, SmallNumberRects);
                } // WriteSmallNumberCentered(x, y, number)
   <summary>
 Write number centered
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="number">Number
</param>
 <param name="alpha">Alpha
</param>
                public void WriteNumberCentered(int x, int y, int number, float alpha)
                {
                        float resScalingY = 0.725f * (float)BaseGame.Height / 768.0f;
                        WriteNumber(x - (int)(resScalingY *
                                number.ToString().Length * SmallNumberRects[0].Width / 2),
                                y, number, SmallNumberRects, alpha);
                } // WriteNumberCentered(x, y, number)
                #endregion
                  #region Write time
   <summary>
 Write time
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="minutes">Minutes
</param>
 <param name="seconds">Seconds
</param>
                public void WriteTime(int x, int y, int minutes, int seconds)
                {
                        // Start with minutes
                        int minuteWidth = WriteNumber(x, y, minutes, SmallNumberRects);
                          // Show : in the middle
                          minuteWidth += WriteDigit(x + minuteWidth, y,
                                  SmallNumberRects.Length - 1, SmallNumberRects);
  
                          // Add a zero if we got 0-9 seconds
                          if (seconds < 10)
                                  minuteWidth += WriteDigit(x + minuteWidth, y, 0, SmallNumberRects);
  
                          // And now add seconds
                          WriteNumber(x + minuteWidth, y, seconds, SmallNumberRects);
                  } // WriteTime(x, y, minutes)
  
   <summary>
 Write time
 
</summary>
 <param name="x">X
</param>
 <param name="y">Y
</param>
 <param name="timeMs">Time in ms
</param>
                public void WriteTime(int x, int y, int timeMs)
                {
                        int minutes = (int)(BaseGame.TotalTimeMs / 1000) / 60;
                        int seconds = (int)(BaseGame.TotalTimeMs / 1000) % 60;
                        WriteTime(x, y, minutes, seconds);
                } // WriteTime(x, y, timeMs)
                #endregion
                  #region Unit Testing
  if DEBUG
   <summary>
 Test write numbers
 
</summary>
                public static void TestWriteNumbers()
                {
                        NumbersTextureFont textureFont = null;
                        TestGame.Start(
                                "TestWriteNumbers",
                                delegate
                                {
                                        textureFont = new NumbersTextureFont(new Texture("NumbersFont"));
                                },
                                delegate
                                {
                                        BaseGame.EnableAlphaBlending();
                                        textureFont.WriteNumber(100, 100, 123);
                                        textureFont.WriteNumberCentered(100, 200, 123);
                                        textureFont.WriteNumberCentered(100, 250, 123);
                                        textureFont.WriteTime(250, 250, (int)BaseGame.TotalTimeMs);
                                });
                } // TestWriteNumbers()
endif
                #endregion
        } // class NumbersTextureFont
} // namespace XnaGraphicEngine.Graphics
    
  
    
  
  
  
  
  
  
  
  (C) Æliens 
  20/2/2008
  
  
  You may not copy or print any of this material without explicit permission of the author or the publisher. 
  In case of other copyright issues, contact the author.
  
  
 
  <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  </script>
  <script type="text/javascript">
  _uacct = "UA-2780434-1";
  urchinTracker();
  </script>