32 using Microsoft.Xna.Framework;
33 using Microsoft.Xna.Framework.Graphics;
69 string originalText =
"";
70 string visibleText =
"";
72 int decimalPlaces = 2;
73 string doubleFormatString =
"{0:N2}";
74 string intFormatString =
"{0:D1}";
75 string doubleFormatStringWithTitle =
"{0:N2}";
76 string intFormatStringWithTitle =
"{0:D1}";
78 private double _yMargin;
79 bool useDefaultHeight =
false;
80 bool initialized =
false;
82 const double DefaultWidth = 100;
84 static double GetDefaultHeight()
86 Vector2 fontDims =
Font.
Default.XnaFont.MeasureString(
"A" );
93 public virtual string Text
95 get {
return originalText; }
99 throw new ArgumentException(
"Text must not be null" );
100 originalText = value;
108 public bool IsTruncated
110 get {
return visibleText.Length < ( originalText.Length ); }
113 Vector3 _textScale =
new Vector3(1, 1, 1);
120 get {
return new Vector(_textScale.X, _textScale.Y); }
123 _textScale =
new Vector3((
float)value.X, (
float)value.Y, 1.0f);
133 public int DecimalPlaces
135 get {
return decimalPlaces; }
138 decimalPlaces = value;
139 DoubleFormatString =
"{0:N" + decimalPlaces +
"}";
147 public string DoubleFormatString
149 get {
return doubleFormatString; }
152 doubleFormatString = value;
153 doubleFormatStringWithTitle = Title +
": " + value;
167 public string IntFormatString
169 get {
return intFormatString; }
172 intFormatString = value;
173 intFormatStringWithTitle = Title +
": " + value;
192 intFormatStringWithTitle = _title ==
"" ? IntFormatString : value +
": " + IntFormatString;
193 doubleFormatStringWithTitle = _title ==
"" ? DoubleFormatString : value +
": " + DoubleFormatString;
202 get {
return sizeMode; }
203 set { sizeMode = value; updateSize(); }
210 public Vector TextSize {
get;
private set; }
215 public Color TextColor {
get;
set; }
223 set { font = value; updateSize(); }
243 public double XMargin
245 get {
return _xMargin; }
246 set { _xMargin = value; updateSize(); }
252 public double YMargin
254 get {
return _yMargin; }
255 set { _yMargin = value; updateSize(); }
263 public override Vector Size
272 TextScale =
new Vector( TextScale.X * value.X / base.Size.X, TextScale.Y * value.Y / base.Size.Y );
274 useDefaultHeight =
false;
294 : this( DefaultWidth, 10 )
300 this.Height = GetDefaultHeight();
312 : this( DefaultWidth, 10, text )
318 this.Height = GetDefaultHeight();
349 public Label(
double width,
double height )
350 : this( width, height,
"" )
360 public Label(
double width,
double height,
string text )
364 this.originalText = text;
368 private void setDefaultHeight()
370 if ( !useDefaultHeight )
return;
371 this.Height = GetDefaultHeight();
374 private void Initialize()
388 if ( !initialized || !Bound )
return;
392 int newNumber = ( (IntMeter)
Meter ).Value;
393 Text =
string.Format( intFormatString, newNumber );
397 double newNumber = ( (DoubleMeter)
Meter ).Value;
398 Text =
string.Format( doubleFormatString, newNumber );
405 private void updateSize()
407 SpriteFont xnaFont = this.
Font.XnaFont;
408 visibleText = (_title.Length > 0) ? (_title +
": " + originalText) : originalText;
410 if ( visibleText.Length == 0 )
413 NotifyParentAboutChangedSizingAttributes();
417 Vector2 rawTextDims = xnaFont.MeasureString( visibleText );
418 Vector2 fullTextDims =
new Vector2( _textScale.X * rawTextDims.X, _textScale.Y * rawTextDims.Y );
420 TextSize =
new Vector( fullTextDims.X, fullTextDims.Y );
429 base.Size = PreferredSize =
new Vector( fullTextDims.X + 2 * XMargin, fullTextDims.Y + 2 * YMargin );
437 NotifyParentAboutChangedSizingAttributes();
440 private void TruncateText()
442 double textWidth = this.Width - 2 * XMargin;
443 if ( textWidth <= 0 )
445 textWidth = this.Width;
450 Vector2 textDims =
Font.XnaFont.MeasureString( visibleText );
451 TextSize =
new Vector( textDims.X, textDims.Y );
454 private void WrapText()
456 SpriteFont xnaFont = this.
Font.XnaFont;
457 Vector2 rawTextDims = xnaFont.MeasureString( visibleText );
458 Vector2 fullTextDims =
new Vector2( _textScale.X * rawTextDims.X, _textScale.Y * rawTextDims.Y );
460 if ( Width <= 0 || fullTextDims.X <= Width )
463 double hardBreak = base.Size.X - 2 * XMargin;
466 visibleText =
Font.
WrapText( visibleText, hardBreak, softBreak );
467 Vector2 textDims = xnaFont.MeasureString( visibleText );
468 base.Size = PreferredSize =
new Vector( base.Size.X, textDims.Y + 2 * YMargin );
469 TextSize =
new Vector( textDims.X, textDims.Y );
472 private double GetHorizontalAlignment()
477 return -TextSize.X / 2;
479 return -Width / 2 + XMargin;
481 return Width / 2 - TextSize.X - XMargin;
487 private double GetVerticalAlignment()
492 return -TextSize.Y / 2;
494 return -Size.Y / 2 - YMargin;
496 return Size.Y / 2 - TextSize.Y + YMargin;
502 protected override void Draw( Matrix parentTransformation, Matrix transformation )
504 Draw( parentTransformation, transformation, visibleText );
507 protected void Draw( Matrix parentTransformation, Matrix transformation,
string text )
510 Matrix p = parentTransformation;
511 p.Translation =
new Vector3( p.Translation.X, -p.Translation.Y, p.Translation.Z );
514 Matrix.CreateScale( _textScale )
515 * Matrix.CreateTranslation( (
float)GetHorizontalAlignment(), (
float)GetVerticalAlignment(), 0 )
517 * Matrix.CreateTranslation( (
float)Position.X, -(
float)Position.Y, 0 )
523 base.Draw( parentTransformation, transformation );
HorizontalAlignment
Asemointi vaakasuunnassa.
static Action InstanceInitialized
Tapahtuu kun Game.Instance on alustettu.
static readonly Color Black
Musta.
string WrapText(string text, double softLineWidth, double hardLineWidth)
Rivittää tekstin.
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
double CharacterWidth
Merkin leveys.
string TruncateText(string str, double maxLineWidth)
Katkaisee merkkijonon loppupäästä niin että se sopii annettuun pikselileveyteen fontilla kirjoitettun...
static readonly Vector Zero
Nollavektori.
Mittari, joka mittaa double-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
double Height
Näytön korkeus y-suunnassa.
static ScreenView Screen
Näytön dimensiot, eli koko ja reunat.
static readonly Color Transparent
Läpinäkyvä väri.
Peliluokka reaaliaikaisille peleille.
Mittari, joka mittaa int-tyyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...
double Radians
Palauttaa tai asettaa kulman radiaaneina.
static readonly Font Default
OletusFontti.
VerticalAlignment
Asemointi pystysuunnassa.
Sarja kuvia, jotka vaihtuvat halutulla nopeudella. Yksi animaatio koostuu yhdestä tai useammasta kuva...
Luokka, joka sisältää metodeita kuvioiden ja tekstuurien piirtämiseen 2D-tasossa. ...
double Width
Näytön leveys x-suunnassa.
static void AssertInitialized(Action actionMethod)
Suorittaa aliohjelman kun peli on varmasti alustettu.
Mittari, joka mittaa erityyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge...