using UnityEngine; using UnityEngine.UI; using TMPro; using Unheimlich.Features.DetectiveBoard.Data; namespace Unheimlich.Features.DetectiveBoard.UI { 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 Image _selectionOutline; [Header("Effects")] [SerializeField] private PostItScribbleEffect _scribbleEffect; [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 => _rectTransform; 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 (_scribbleEffect == null) _scribbleEffect = GetComponent(); 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; } 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 SetRotation(float rotation) { if (_rectTransform != null) { _rectTransform.localRotation = Quaternion.Euler(0, 0, rotation); if (_nodeData != null) _nodeData.Rotation = rotation; } } public float GetRotation() { return _rectTransform != null ? _rectTransform.localEulerAngles.z : 0f; } public void SetEliminated(bool eliminated) { _isEliminated = eliminated; if (_scribbleEffect != null) { _scribbleEffect.SetEliminated(eliminated); } if (_nodeData != null) _nodeData.IsEliminated = eliminated; } public void SetSelected(bool selected) { _isSelected = selected; } public void SetHovered(bool hovered) { if (_selectionOutline != null) { _selectionOutline.enabled = hovered; } } } }