Chessistics/Scripts/UI/FlavorBanner.cs

74 lines
2.1 KiB
C#
Raw Normal View History

using Godot;
namespace Chessistics.Scripts.UI;
/// <summary>
/// Displays a one-line narrative blurb at the top of the screen when a mission starts.
/// Auto-fades out after a few seconds.
/// </summary>
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));
}
}