Files
parasitic-god/Scenes/Main/MiracleButton.cs

67 lines
1.6 KiB
C#

using Godot;
using ParasiticGod.Scripts.Core;
using ParasiticGod.Scripts.Singletons;
namespace ParasiticGod.Scenes.Main;
public partial class MiracleButton : Button
{
private MiracleDefinition _miracle;
[Export] private AudioStreamPlayer _sfx;
public override void _Ready()
{
if (_miracle == null)
{
GD.PrintErr($"MiracleButton '{Name}' has no MiracleDefinition assigned.");
SetProcess(false);
return;
}
Text = BuildText();
TooltipText = BuildTooltipText();
if (_sfx == null)
{
_sfx = GetNodeOrNull<AudioStreamPlayer>("SFX");
}
Pressed += OnPressed;
}
public override void _ExitTree()
{
Pressed -= OnPressed;
}
private void OnPressed()
{
_sfx?.Play();
GameBus.Instance.PerformMiracle(_miracle);
}
public void SetMiracle(MiracleDefinition miracle)
{
_miracle = miracle;
Text = BuildText();
TooltipText = BuildTooltipText();
}
public MiracleDefinition GetMiracle() { return _miracle; }
private string BuildText()
{
return $"{_miracle.Name}\nCost: {_miracle.FaithCost} Faith";
}
private string BuildTooltipText()
{
var tooltip = $"Cost: {_miracle.FaithCost} Faith\nRequires: {_miracle.FollowersRequired} Followers\nEffects:\n";
foreach (var effect in _miracle.Effects)
{
if (effect.ToString() == string.Empty) continue;
tooltip += $"- {effect}\n";
}
return tooltip.TrimEnd();
}
}