using System; using TMPro; using UnityEngine; using UnityEngine.UI; public enum DiceColor { Black, White, } public class Die : MonoBehaviour { public DiceColor color; private int _result = 0; [SerializeField] private Button dieButton; // assign in the editor private Color originalColor; private bool _isClickable = false; private bool _selected = false; public event Action DieSelected; public event Action DieUnselected; private void Start() { GameManager.Instance.StateChanged += HandleStateChange; dieButton.onClick.AddListener(DiePressed); originalColor = gameObject.GetComponent().color; } public void SetResult(int result) { _result = result; gameObject.GetComponentInChildren().text = _result.ToString(); } public int GetResult() { return _result; } public void ResetDie() { _selected = false; gameObject.GetComponent().color = originalColor; gameObject.GetComponent().enabled = false; } public void DieBeingUsed(bool isPairComplete) { if (isPairComplete) { // Signify that both dice have been selected DieSelectedAndPairComplete(); } else { // Signify that the die is selected but the pair is not complete DieSelectedButPairNotComplete(); } } private void DiePressed() { if (!_isClickable) return; if (_selected) { DieUnselected?.Invoke(this); } else { DieSelected?.Invoke(this); } } private void DieSelectedButPairNotComplete() { _selected = true; gameObject.GetComponent().enabled = true; } private void DieSelectedAndPairComplete() { _selected = true; gameObject.GetComponent().enabled = false; gameObject.GetComponent().color = ColorHelper.AddColorTint(gameObject.GetComponent().color, ColorHelper.OkayGreen, 0.5f); } private void HandleStateChange(GameState state) { switch (state) { case GameState.PickDiceOne: case GameState.PickDiceTwo: case GameState.PickRoomOne: case GameState.PickRoomTwo: _isClickable = true; break; case GameState.RollDice: _isClickable = false; break; default: _isClickable = false; break; } } }