using SoulHarvest.Common; using SoulHarvest.Items; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using ReLogic.Content; using System; using System.Collections.Generic; using System.Text; using Terraria; using Terraria.Audio; using Terraria.GameContent; using Terraria.GameContent.UI.Elements; using Terraria.GameInput; using Terraria.ID; using Terraria.Localization; using Terraria.ModLoader; using Terraria.UI; namespace SoulHarvest.UI; internal sealed class ReaperTreeButton : UIElement { private readonly Action action; private readonly Color normalColor; private readonly Color hoverColor; private readonly Color borderColor; private string text = string.Empty; private float layoutScale = 1f; private float baseTextScale = 0.65f; private bool enabled = true; public bool Enabled { get => enabled; set { enabled = value; IgnoresMouseInteraction = !value; } } public ReaperTreeButton(Action action, Color normalColor, Color hoverColor, Color borderColor) { this.action = action; this.normalColor = normalColor; this.hoverColor = hoverColor; this.borderColor = borderColor; SetPadding(0f); } public void ApplyLayoutScale(float scale, float textScale) { layoutScale = scale; baseTextScale = textScale; } public void SetText(string value) => text = value; protected override void DrawSelf(SpriteBatch spriteBatch) { Rectangle bounds = GetDimensions().ToRectangle(); Texture2D pixel = TextureAssets.MagicPixel.Value; Color background = !enabled ? new Color(29, 27, 29) : IsMouseHovering ? hoverColor : normalColor; Color border = !enabled ? new Color(66, 60, 59) : IsMouseHovering ? borderColor : borderColor * 0.68f; spriteBatch.Draw(pixel, bounds, background * 0.98f); ReaperTreeDraw.DrawBorder(spriteBatch, pixel, bounds, border, Math.Max(1, (int)(2f * layoutScale))); ReaperTreeDraw.DrawDiamond(spriteBatch, pixel, new Vector2(bounds.X + 11f * layoutScale, bounds.Center.Y), 4f * layoutScale, border); ReaperTreeDraw.DrawDiamond(spriteBatch, pixel, new Vector2(bounds.Right - 11f * layoutScale, bounds.Center.Y), 4f * layoutScale, border); float textScale = baseTextScale * layoutScale; string fitted = AltarDrawHelpers.FitText(text, bounds.Width - 32f * layoutScale, textScale); Vector2 size = FontAssets.MouseText.Value.MeasureString(fitted) * textScale; Utils.DrawBorderString(spriteBatch, fitted, new Vector2(bounds.Center.X - size.X * 0.5f, bounds.Center.Y - size.Y * 0.5f), enabled ? Color.White : new Color(116, 108, 104), textScale); } public override void LeftClick(UIMouseEvent evt) { base.LeftClick(evt); if (enabled) action(); } }