using Godot; using System; public partial class PlayerUi : Control { private TextureRect[] _dashIcons = new TextureRect[3]; private TextureRect _enemyTarget; public enum TargetState { NoTarget, TargetTooFar, TargetInRange, TargetDashThrough } public record TargetProperties(TargetState State, Vector2 Position); [Export] public Color DashThroughColor { get; set; } = new Color("009c8f"); [Export] public Color DashBlockedColor { get; set; } = new Color("fc001c"); [Export] public Color DashOutOfRangeColor { get; set; } = new Color("ffffff"); public override void _Ready() { _dashIcons[0] = GetNode("%Dash1"); _dashIcons[1] = GetNode("%Dash2"); _dashIcons[2] = GetNode("%Dash3"); _enemyTarget = GetNode("%EnemyTarget"); } public void SetEnemyTargetProperties(TargetProperties targetProperties) { var (state, position) = targetProperties; var visible = state != TargetState.NoTarget; var modulation = state switch { TargetState.TargetTooFar => DashOutOfRangeColor, TargetState.TargetInRange => DashBlockedColor, TargetState.TargetDashThrough => DashThroughColor, _ => DashOutOfRangeColor }; _enemyTarget.SetVisible(visible); _enemyTarget.SetPosition(position - _enemyTarget.Size / 2); _enemyTarget.SetModulate(modulation); } public void SetNumberOfDashesLeft(int numberOfDashes) { int index = 1; foreach (var dashIcon in _dashIcons) { dashIcon.SetVisible(index <= numberOfDashes); index++; } } }