using System; using Abilities; using TMPro; using Unity.VisualScripting; using UnityEngine; using UnityEngine.UI; public enum DiceColor { Black, White, } public class Die : MonoBehaviour { public DiceColor color; private int _result = 0; private bool _isClickable = false; private bool _selected = false; private bool _blackDieAbilityUsed = false; public event Action DieSelected; public event Action DieUnselected; public event Action DieRollResult; public event Action DieReset; public event Action DieSelectedButPairNotCompleteEvent; public event Action DieSelectedAndPairCompleteEvent; private void OnEnable() { GameManager.StateChanged += HandleStateChange; StartingBlackDieAbility.AbilitySelected += HandleOnBlackDieAbilitySelected; } private void OnDisable() { GameManager.StateChanged -= HandleStateChange; StartingBlackDieAbility.AbilitySelected -= HandleOnBlackDieAbilitySelected; } public void SetResult(int result) { _result = result; DieRollResult?.Invoke(_result); } public int GetResult() { return _result; } public void ResetDie() { _selected = false; _blackDieAbilityUsed = false; DieReset?.Invoke(); } 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(); } } public void DiePressed() { if (!_isClickable || (color == DiceColor.Black && !_blackDieAbilityUsed)) return; if (_selected) { DieUnselected?.Invoke(this); } else { DieSelected?.Invoke(this); } } private void DieSelectedButPairNotComplete() { _selected = true; DieSelectedButPairNotCompleteEvent?.Invoke(); } private void DieSelectedAndPairComplete() { _selected = true; DieSelectedAndPairCompleteEvent?.Invoke(); } 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; } } private void HandleOnBlackDieAbilitySelected() { _blackDieAbilityUsed = true; } }