mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
102 lines
3.1 KiB
C#
102 lines
3.1 KiB
C#
|
using Microsoft.Xna.Framework;
|
|||
|
using Microsoft.Xna.Framework.Graphics;
|
|||
|
using ProjectZ.InGame.Things;
|
|||
|
|
|||
|
namespace ProjectZ.InGame.Interface
|
|||
|
{
|
|||
|
public class InterfaceLabel : InterfaceElement
|
|||
|
{
|
|||
|
public SpriteFont Font;
|
|||
|
|
|||
|
public Gravities TextAlignment
|
|||
|
{
|
|||
|
get { return _textAlignment; }
|
|||
|
set
|
|||
|
{
|
|||
|
_textAlignment = value;
|
|||
|
if (Text != null)
|
|||
|
SetText(Text);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public Color TextColor = Color.White;
|
|||
|
|
|||
|
public string Text { get; set; }
|
|||
|
public bool Translate = true;
|
|||
|
|
|||
|
private Vector2 _drawOffset;
|
|||
|
private Vector2 _textSize;
|
|||
|
|
|||
|
private Gravities _textAlignment = Gravities.Center;
|
|||
|
|
|||
|
private readonly string _textKey;
|
|||
|
|
|||
|
public InterfaceLabel(SpriteFont font, string key, Point size, Point margin)
|
|||
|
{
|
|||
|
Font = font;
|
|||
|
Size = size;
|
|||
|
Margin = margin;
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(key))
|
|||
|
return;
|
|||
|
|
|||
|
_textKey = key;
|
|||
|
UpdateLanguageText();
|
|||
|
}
|
|||
|
|
|||
|
public InterfaceLabel(string key, Point size, Point margin) : this(Resources.GameFont, key, size, margin)
|
|||
|
{ }
|
|||
|
|
|||
|
public InterfaceLabel(string key) : this(key, Point.Zero, Point.Zero)
|
|||
|
{
|
|||
|
Size = new Point((int)_textSize.X, (int)_textSize.Y);
|
|||
|
}
|
|||
|
|
|||
|
public void SetText(string strText)
|
|||
|
{
|
|||
|
Text = strText;
|
|||
|
|
|||
|
_textSize = Font.MeasureString(Text);
|
|||
|
|
|||
|
if (Size != Point.Zero)
|
|||
|
{
|
|||
|
_drawOffset = new Vector2(Size.X / 2 - _textSize.X / 2, Size.Y / 2 - _textSize.Y / 2);
|
|||
|
|
|||
|
// left/right
|
|||
|
if ((TextAlignment & Gravities.Left) != 0)
|
|||
|
_drawOffset.X = 0;
|
|||
|
else if ((TextAlignment & Gravities.Right) != 0)
|
|||
|
_drawOffset.X = Size.X - _textSize.X;
|
|||
|
|
|||
|
// top/bottom
|
|||
|
if ((TextAlignment & Gravities.Top) != 0)
|
|||
|
_drawOffset.Y = 0;
|
|||
|
else if ((TextAlignment & Gravities.Bottom) != 0)
|
|||
|
_drawOffset.Y = Size.Y - _textSize.Y;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void UpdateLanguageText()
|
|||
|
{
|
|||
|
SetText(Game1.LanguageManager.GetString(_textKey, "error"));
|
|||
|
}
|
|||
|
|
|||
|
public override void Draw(SpriteBatch spriteBatch, Vector2 drawPosition, float scale, float transparency)
|
|||
|
{
|
|||
|
base.Draw(spriteBatch, drawPosition, scale, transparency);
|
|||
|
|
|||
|
if (Translate && _textKey != null && Game1.LanguageManager.GetString(_textKey, "error") != Text)
|
|||
|
UpdateLanguageText();
|
|||
|
|
|||
|
if (Text == null)
|
|||
|
return;
|
|||
|
|
|||
|
// draw the text
|
|||
|
spriteBatch.DrawString(Font, Text,
|
|||
|
new Vector2(
|
|||
|
(int)(drawPosition.X + _drawOffset.X * scale),
|
|||
|
(int)(drawPosition.Y + (_drawOffset.Y + 1) * scale)),
|
|||
|
TextColor * transparency, 0, Vector2.Zero, new Vector2(scale), SpriteEffects.None, 0);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|