using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MonogameLibrary.UI.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Xna.Framework.Content; namespace MonogameLibrary.UI.Base { public class DrawableTextedUiElement : DrawableUIElement { protected SpriteFont spriteFont; public string fontName; public string text = ""; public float scale = 0.5f; public Color fontColor = Color.Black; public TextAligment textAligment = TextAligment.Center; public DrawableTextedUiElement(UIManager manager, int layerIndex = 0, string textureName = "", string fontName = "") : base(manager, layerIndex, textureName) { this.fontName = fontName; } public override void LoadTexture(ContentManager content) { base.LoadTexture(content); if (fontName != "") { try { spriteFont = content.Load(fontName); } catch { } } } public virtual void DrawText(SpriteBatch spriteBatch) { if (text == "") return; if (spriteFont != null) { var measured = spriteFont.MeasureString(text) * scale; if (textAligment == TextAligment.Center) { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)((rectangle.Width - measured.X) / 2); spriteBatch.DrawString(spriteFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } else if (textAligment == TextAligment.Left) { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)(2 * scale + rectangle.Width / 20); spriteBatch.DrawString(spriteFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } else { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)(rectangle.Width - measured.X - 2 * scale); spriteBatch.DrawString(spriteFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } } else { var measured = Manager.BaseFont.MeasureString(text) * scale; measured.X -= measured.X % 10; //measured.Y *= -1; if (textAligment == TextAligment.Center) { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)((rectangle.Width - measured.X) / 2); spriteBatch.DrawString(Manager.BaseFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } else if (textAligment == TextAligment.Left) { //var rct = new Rectangle(rectangle.Location, rectangle.Size); //rct.Width = (int)measured.X; //rct.Height = (int)measured.Y; //rct.Y += (int)((rectangle.Height - measured.Y) / 2); //rct.X += (int)((rectangle.Width - measured.X) / 2); //_spriteBatch.Draw(texture, rct, new Color(255, 0, 0, 125)); //_spriteBatch.DrawString(MonoClassManagerUI.MainBaseFont, text, rct.Location.ToVector2(), fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)(2 * scale); spriteBatch.DrawString(Manager.BaseFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } else { Vector2 pos = rectangle.Location.ToVector2(); pos.Y += (int)((rectangle.Height - measured.Y) / 2); pos.X += (int)(rectangle.Width - measured.X - 2 * scale); spriteBatch.DrawString(Manager.BaseFont, text, pos, fontColor, 0, Vector2.Zero, scale, SpriteEffects.None, 0); } } } } }