using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Mootfrost.Monogame.Label.Properties;
namespace Mootfrost.Monogame.Label
{
public class Label
{
public Vector2 Position { get; set; }
public Vector2 EndPosition { get; set; }
public SpriteFont SpriteFont { get; set; }
public Color Color { get; set; }
public string Text { get; set; }
public float Scale { get; set; } = 1;
public float Rotation { get; set; } = 0;
public HorizontalAlignment HorizontalAlignment { get; set; } = HorizontalAlignment.Left;
public VerticalAlignment VerticalAlignment { get; set; } = VerticalAlignment.Top;
public Label()
{
Position = new Vector2(0);
EndPosition = new Vector2(200);
Text = "Label";
Color = Color.White;
}
///
///
///
///
///
///
/// Right side of label. Needed for alignments. Can be screen size.
///
public Label(SpriteFont sprteFont, string text, Vector2 position, Vector2 endPosition, Color color)
{
SpriteFont = sprteFont;
Text = text;
Position = position;
EndPosition = endPosition;
Color = color;
}
///
///
///
///
///
///
/// Right side of label. Needed for alignments. Can be screen size.
/// Needed for scaling font. You can use multiple spritefonts instead.
///
public Label(SpriteFont sprteFont, string text, Vector2 position, Vector2 endPosition, float scale, Color color)
{
SpriteFont = sprteFont;
Text = text;
Position = position;
EndPosition = endPosition;
Scale = scale;
Color = color;
}
///
///
///
///
///
///
/// Right side of label. Needed for alignments. Can be screen size.
/// Needed for scaling font. You can use multiple spritefonts instead.
/// Label rotation in radians.
///
public Label(SpriteFont sprteFont, string text, Vector2 position, Vector2 endPosition, float scale, float rotation, Color color)
{
SpriteFont = sprteFont;
Text = text;
Position = position;
EndPosition = endPosition;
Scale = scale;
Rotation = rotation;
Color = color;
}
private float SetHorizontalAlignment()
{
float x = Position.X;
switch (HorizontalAlignment)
{
case HorizontalAlignment.Left:
x = Position.X;
break;
case HorizontalAlignment.Center:
x = Position.X + EndPosition.X / 2 - SpriteFont.MeasureString(Text).X / 2;
break;
case HorizontalAlignment.Right:
x = EndPosition.X - SpriteFont.MeasureString(Text).X;
break;
}
return x;
}
private float SetVericalAlignment()
{
float y = Position.Y;
switch (VerticalAlignment)
{
case VerticalAlignment.Top:
y = Position.Y;
break;
case VerticalAlignment.Center:
y = Position.Y + EndPosition.Y / 2 - SpriteFont.MeasureString(Text).Y / 2;
break;
case VerticalAlignment.Bottom:
y = EndPosition.Y - SpriteFont.MeasureString(Text).Y;
break;
}
return y;
}
public void Draw(SpriteBatch spriteBatch)
{
Vector2 position = new Vector2(SetHorizontalAlignment(),
SetVericalAlignment());
spriteBatch.DrawString(SpriteFont, Text, position,
Color, Rotation, new Vector2(SpriteFont.MeasureString(Text).X / 2,
SpriteFont.MeasureString(Text).Y / 2),
Scale, SpriteEffects.None, 0);
}
}
}