LADXHD/InGame/Interface/InterfaceLabel.cs
2023-12-14 17:21:22 -05:00

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