using Godot; namespace Chessistics.Scripts.UI; /// /// Displays a one-line narrative blurb at the top of the screen when a mission starts. /// Auto-fades out after a few seconds. /// public partial class FlavorBanner : PanelContainer { private Label _label = null!; private Tween? _activeTween; private static readonly Color BannerBg = new(0.12f, 0.10f, 0.08f, 0.92f); private static readonly Color BorderColor = new("#B8942A"); private static readonly Color TextColor = new("#E8D4A0"); public override void _Ready() { // Style the panel var style = new StyleBoxFlat { BgColor = BannerBg, BorderColor = BorderColor, BorderWidthBottom = 2, ContentMarginLeft = 24, ContentMarginRight = 24, ContentMarginTop = 10, ContentMarginBottom = 10, CornerRadiusBottomLeft = 6, CornerRadiusBottomRight = 6 }; AddThemeStyleboxOverride("panel", style); _label = new Label { HorizontalAlignment = HorizontalAlignment.Center, AutowrapMode = TextServer.AutowrapMode.WordSmart }; _label.AddThemeFontSizeOverride("font_size", 13); _label.AddThemeColorOverride("font_color", TextColor); AddChild(_label); MouseFilter = MouseFilterEnum.Ignore; Visible = false; } public void ShowFlavor(string text) { if (string.IsNullOrWhiteSpace(text)) { Visible = false; return; } _activeTween?.Kill(); _label.Text = text; Visible = true; Modulate = new Color(1, 1, 1, 0); _activeTween = CreateTween(); // Fade in _activeTween.TweenProperty(this, "modulate:a", 1f, 0.4f) .SetEase(Tween.EaseType.Out); // Hold _activeTween.TweenInterval(5.0f); // Fade out _activeTween.TweenProperty(this, "modulate:a", 0f, 1.0f) .SetEase(Tween.EaseType.In); _activeTween.TweenCallback(Callable.From(() => Visible = false)); } }