using UnityEngine; using UnityEngine.UI; using TMPro; using Unheimlich.Data.DetectiveBoard; namespace Unheimlich.UI.DetectiveBoard { public class PostItNode : MonoBehaviour { [Header("UI References")] [SerializeField] private RectTransform _rectTransform; [SerializeField] private Image _background; [SerializeField] private TextMeshProUGUI _titleText; [SerializeField] private TextMeshProUGUI _descriptionText; [SerializeField] private Image _iconImage; [SerializeField] private GameObject _strikethroughLine; [SerializeField] private Image _selectionOutline; [Header("Connection Points")] [SerializeField] private RectTransform _connectionPoint; private ClueData _clueData; private PostItNodeData _nodeData; private bool _isEliminated; private bool _isSelected; private Color _originalColor; public string NodeID => _clueData?.ClueID; public RectTransform RectTransform => _rectTransform; public RectTransform ConnectionPoint => _connectionPoint; public ClueData ClueData => _clueData; public PostItNodeData NodeData => _nodeData; public bool IsEliminated => _isEliminated; public bool IsSelected => _isSelected; private void Awake() { if (_rectTransform == null) _rectTransform = GetComponent(); if (_strikethroughLine != null) _strikethroughLine.SetActive(false); if (_selectionOutline != null) _selectionOutline.enabled = false; } public void Initialize(ClueData clueData, PostItNodeData nodeData) { _clueData = clueData; _nodeData = nodeData; if (_titleText != null) _titleText.text = clueData.Title; if (_descriptionText != null) _descriptionText.text = clueData.Description; if (_iconImage != null && clueData.Icon != null) { _iconImage.sprite = clueData.Icon; _iconImage.enabled = true; } else if (_iconImage != null) { _iconImage.enabled = false; } if (_background != null) { _originalColor = clueData.NodeColor; _background.color = _originalColor; } if (_connectionPoint == null) { _connectionPoint = _rectTransform; } SetPosition(nodeData.Position); SetEliminated(nodeData.IsEliminated); } public void SetPosition(Vector2 position) { if (_rectTransform != null) { _rectTransform.anchoredPosition = position; if (_nodeData != null) _nodeData.Position = position; } } public void SetEliminated(bool eliminated) { _isEliminated = eliminated; if (_strikethroughLine != null) _strikethroughLine.SetActive(eliminated); if (_background != null) { _background.color = eliminated ? new Color(0.5f, 0.5f, 0.5f, 0.8f) : _originalColor; } if (_nodeData != null) _nodeData.IsEliminated = eliminated; } public void SetSelected(bool selected) { _isSelected = selected; if (_selectionOutline != null) { _selectionOutline.enabled = selected; } } public void SetHovered(bool hovered) { if (_selectionOutline != null) { _selectionOutline.enabled = hovered || _isSelected; } } } }