114 lines
2.8 KiB
C#
114 lines
2.8 KiB
C#
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<Die> DieSelected;
|
|
public event Action<Die> DieUnselected;
|
|
public event Action<int> 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;
|
|
}
|
|
}
|