This commit is contained in:
2026-07-09 21:33:33 +02:00
commit 84a2a365f3
2364 changed files with 950134 additions and 0 deletions
@@ -0,0 +1,71 @@
using Sirenix.Utilities;
using UnityEngine;
using UnityEngine.UIElements;
using VOID.ScriptableObjects;
namespace VOID.UserInterface.Game.Tooltip
{
public class StatusTooltipUI : ITooltip
{
// VisualElement - Container
private readonly VisualElement _templateElement;
// VisualElements - Sections
private readonly VisualElement _titleSection;
private readonly VisualElement _descriptionSection;
// VisualElements - Data
private readonly VisualElement _statusIcon;
private readonly Label _statusName;
private readonly Label _statusDescription;
private readonly Label _statusTimeRemaining;
public StatusTooltipUI(VisualElement templateElement)
{
// Tooltip for this type
_templateElement = templateElement.Q(null, "tooltip");
// Sections
_titleSection = templateElement.Q("title-section");
_descriptionSection = templateElement.Q("description-section");
// Elements
_statusIcon = templateElement.Q("status-icon");
_statusName = templateElement.Q<Label>("status-name");
_statusDescription = templateElement.Q<Label>("status-description");
_statusTimeRemaining = templateElement.Q<Label>("status-time-remaining");
}
public void Show(BasicStatus status)
{
_statusIcon.style.backgroundImage = status.displayIcon;
_templateElement.style.display = DisplayStyle.Flex;
FillBasicInfo(status);
}
public void Hide()
{
_templateElement.style.display = DisplayStyle.None;
}
public Vector2 GetSize()
{
return new Vector2(_templateElement.worldBound.width, _templateElement.worldBound.height);
}
private void FillBasicInfo(BasicStatus status)
{
_statusName.text = status.displayName;
_statusDescription.text = status.description;
_descriptionSection.style.display = _statusDescription.text.IsNullOrWhitespace() ? DisplayStyle.None : DisplayStyle.Flex;
// TODO: temporary status description for tooltip
_statusDescription.text += "<br><br>TODO: TEMPORARY:";
_statusDescription.text += "<br>effects: ";
status.effects.ForEach(effect => _statusDescription.text += "<br> " + effect.GetSimpleDescription());
_statusTimeRemaining.text = $"Remaining {status.durationLeftInTurns} turns (~{status.durationLeft:0} seconds)";
}
}
}