AceField/Scripts/UI/HUD.cs
2024-08-09 02:20:56 +08:00

42 lines
1.3 KiB
C#

using AceField.Scripts.Logic;
using Godot;
namespace AceField.Scripts.UI;
public partial class HUD : Control
{
[Export] public World World;
private void ApplySize()
{
var screenSize = GetViewportRect().Size;
Position = new Vector2(0, 0);
Size = screenSize;
GetNode<HBoxContainer>("TopBox").Size = new Vector2(screenSize.X - 16 * 2, 16);
}
public override void _Process(double delta)
{
var player = World.GetCurrentPlayer();
if (player == null) return;
var healthBar = GetNode<ProgressBar>("TopBox/HealthBox/Bar");
var healthLabel = GetNode<Label>("TopBox/HealthBox/Label");
healthBar.Value = player.Health / player.MaxHealth * 100;
healthLabel.Text = $"Health {player.Health}/{player.MaxHealth}";
var actionBar = GetNode<ProgressBar>("TopBox/ActionPointBox/Bar");
var actionLabel = GetNode<Label>("TopBox/ActionPointBox/Label");
actionBar.Value = player.ActionPoints / player.MaxActionPoints * 100;
actionLabel.Text = $"AP {player.ActionPoints}/{player.MaxActionPoints}";
var ammoBar = GetNode<ProgressBar>("TopBox/AmmoBox/Bar");
var ammoLabel = GetNode<Label>("TopBox/AmmoBox/Label");
ammoBar.Value = (float)player.AmmoAmount / player.MaxAmmoAmount * 100;
ammoLabel.Text = player.IsReloading
? $"Reloading... {player.TimeRemainingOfReload:F2}"
: $"Ammo {player.AmmoAmount}/{player.MaxAmmoAmount}";
}
}