Files
MovementTests/scenes/player_controller/PlayerUi.cs
2026-04-28 11:22:24 +02:00

72 lines
2.1 KiB
C#

using Godot;
using System;
using Chickensoft.AutoInject;
using Chickensoft.Introspection;
using Gamesmiths.Forge.Attributes;
using Gamesmiths.Forge.Core;
using Gamesmiths.Forge.Cues;
using Gamesmiths.Forge.Godot.Core;
using Gamesmiths.Forge.Tags;
using Movementtests.interfaces;
using Movementtests.tools;
[GlobalClass, Icon("res://assets/ui/IconGodotNode/control/icon_text_panel.png"), Meta(typeof(IAutoOn), typeof(IAutoConnect))]
public partial class PlayerUi : Control
{
public override void _Notification(int what) => this.Notify(what);
#region Utils
public enum TargetState
{
NoTarget,
TargetWouldNotKill,
TargetWouldKill
}
public record TargetProperties(TargetState State, Vector2 Position);
#endregion
#region Nodes
[Node] public required TextureRect EnemyTarget { get; set; }
[Node] public required ResourceBar Healthbar { get; set; }
[Node] public required ResourceBar Manabar { get; set; }
#endregion
#region Exports
[Export]
public Color WouldKillColor { get; set; } = new Color("009c8f");
[Export]
public Color WouldNotKillColor { get; set; } = new Color("fc001c");
#endregion
public void Initialize(EntityAttribute health, EntityAttribute mana)
{
var tagsManager = ForgeManagers.Instance.TagsManager;
Healthbar.Initialize(health, Tag.RequestTag(tagsManager, "cues.resources.health"));
Manabar.Initialize(mana, Tag.RequestTag(tagsManager, "cues.resources.mana"));
}
public void SetEnemyTargetProperties(TargetProperties targetProperties)
{
var (state, position) = targetProperties;
var visible = state != TargetState.NoTarget;
var modulation = state switch
{
TargetState.TargetWouldNotKill => WouldNotKillColor,
TargetState.TargetWouldKill => WouldKillColor,
_ => WouldNotKillColor
};
EnemyTarget.SetVisible(visible);
EnemyTarget.SetPosition(position - EnemyTarget.Size / 2);
EnemyTarget.SetModulate(modulation);
}
}