78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
using Godot;
|
|
using System;
|
|
using Movementtests.interfaces;
|
|
|
|
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png")]
|
|
public partial class PlayerUi : Control
|
|
{
|
|
private TextureRect[] _dashIcons = new TextureRect[3];
|
|
private TextureRect _enemyTarget;
|
|
private Healthbar _healthbar;
|
|
|
|
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<TextureRect>("%Dash1");
|
|
_dashIcons[1] = GetNode<TextureRect>("%Dash2");
|
|
_dashIcons[2] = GetNode<TextureRect>("%Dash3");
|
|
|
|
_enemyTarget = GetNode<TextureRect>("%EnemyTarget");
|
|
_healthbar = GetNode<Healthbar>("%Healthbar");
|
|
}
|
|
|
|
public void Initialize(float initialHealth)
|
|
{
|
|
_healthbar.Initialize(initialHealth);
|
|
}
|
|
|
|
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++;
|
|
}
|
|
}
|
|
|
|
public void OnHealthChanged(IHealthable healthable, HealthChangedRecord healthChanged)
|
|
{
|
|
_healthbar.CurrentHealth = healthChanged.CurrentHealth;
|
|
}
|
|
}
|