PuzzleGame/PuzzleGameProject/Assets/Scripts/Die.cs
2025-02-27 15:52:40 +01:00

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;
}
}