Files
Ipseity-Demo/Assets/Unheimlich_POC/Scripts/UI/DetectiveBoard/ClueNodeUI.cs
T
2026-02-10 03:00:41 +01:00

94 lines
2.9 KiB
C#

using UnityEngine;
using UnityEngine.UI;
using TMPro;
using Unheimlich.Data.DetectiveBoard;
namespace Unheimlich.UI.DetectiveBoard
{
/// <summary>
/// Visual representation of a clue node on the detective board.
/// Displays as a post-it/card with title, description, and icon.
/// Supports visual states: unlocked, eliminated, highlighted.
/// </summary>
public class ClueNodeUI : MonoBehaviour
{
[Header("References")]
[SerializeField] private Image _nodeImage;
[SerializeField] private TextMeshProUGUI _titleText;
[SerializeField] private Image _iconImage;
[SerializeField] private GameObject _eliminatedOverlay;
private ClueData _clueData;
private bool _isEliminated;
private Color _originalColor;
public ClueData ClueData => _clueData;
public bool IsEliminated => _isEliminated;
/// <summary>
/// Initializes the node with clue data.
/// </summary>
public void Initialize(ClueData clueData)
{
_clueData = clueData;
if (_titleText != null)
_titleText.text = clueData.Title;
if (_iconImage != null && clueData.Icon != null)
{
_iconImage.sprite = clueData.Icon;
_iconImage.enabled = true;
}
else if (_iconImage != null)
{
_iconImage.enabled = false;
}
if (_nodeImage != null)
{
_originalColor = clueData.NodeColor;
_nodeImage.color = _originalColor;
}
if (_eliminatedOverlay != null)
_eliminatedOverlay.SetActive(false);
}
/// <summary>
/// Marks this node as eliminated (incorrect hypothesis).
/// </summary>
public void SetEliminated(bool eliminated)
{
_isEliminated = eliminated;
if (_eliminatedOverlay != null)
_eliminatedOverlay.SetActive(eliminated);
if (_nodeImage != null)
{
_nodeImage.color = eliminated ? Color.gray : _originalColor;
}
}
/// <summary>
/// Highlights the node when hovered.
/// </summary>
public void SetHighlighted(bool highlighted, Color highlightColor)
{
if (_nodeImage != null && !_isEliminated)
{
_nodeImage.color = highlighted ? highlightColor : _originalColor;
}
}
/// <summary>
/// Updates the position of this node on the board (world space or canvas).
/// </summary>
public void SetPosition(Vector3 position)
{
transform.position = position;
}
}
}