using SoulHarvest.Common; using SoulHarvest.Items; using SoulHarvest.Tiles; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System; using System.Collections.Generic; using Terraria; using Terraria.Audio; using Terraria.GameContent; using Terraria.GameContent.UI.Elements; using Terraria.ID; using Terraria.Localization; using Terraria.ModLoader; using Terraria.UI; namespace SoulHarvest.UI; internal static class AltarDrawHelpers { public static void DrawItemIcon(SpriteBatch spriteBatch, Item item, Vector2 center, float maximumSize) { Main.instance.LoadItem(item.type); Texture2D texture = TextureAssets.Item[item.type].Value; Rectangle frame = Main.itemAnimations[item.type]?.GetFrame(texture) ?? texture.Frame(); float scale = Math.Min(1f, maximumSize / Math.Max(frame.Width, frame.Height)); spriteBatch.Draw(texture, center, frame, Color.White, 0f, frame.Size() * 0.5f, scale, SpriteEffects.None, 0f); } public static void DrawItemSlot(SpriteBatch spriteBatch, Texture2D pixel, Vector2 center, float size, Color background, Color border) { int slotSize = Math.Max(1, (int)MathF.Round(size)); Rectangle bounds = new( (int)MathF.Round(center.X - slotSize * 0.5f), (int)MathF.Round(center.Y - slotSize * 0.5f), slotSize, slotSize); spriteBatch.Draw(pixel, bounds, background * 0.94f); DrawBorder(spriteBatch, pixel, bounds, border, Math.Max(1, (int)MathF.Round(size / 30f))); } public static string FitText(string text, float maximumWidth, float scale) { if (maximumWidth <= 0f || scale <= 0f) return string.Empty; if (FontAssets.MouseText.Value.MeasureString(text).X * scale <= maximumWidth) return text; const string ellipsis = "…"; while (text.Length > 1 && FontAssets.MouseText.Value.MeasureString(text + ellipsis).X * scale > maximumWidth) { text = text[..^1]; } return text + ellipsis; } public static void DrawBorder(SpriteBatch batch, Texture2D pixel, Rectangle bounds, Color color, int thickness) { thickness = Math.Clamp(thickness, 1, Math.Max(1, Math.Min(bounds.Width, bounds.Height) / 2)); batch.Draw(pixel, new Rectangle(bounds.X, bounds.Y, bounds.Width, thickness), color); batch.Draw(pixel, new Rectangle(bounds.X, bounds.Bottom - thickness, bounds.Width, thickness), color); batch.Draw(pixel, new Rectangle(bounds.X, bounds.Y, thickness, bounds.Height), color); batch.Draw(pixel, new Rectangle(bounds.Right - thickness, bounds.Y, thickness, bounds.Height), color); } }