using System; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System.Linq; using UI; using static TagsAndLayers; using Random = Unity.Mathematics.Random; public class DiceRoller: MonoBehaviour { private const int NUMBER_OF_WHITE_DICE = 4; private const int NUMBER_OF_BLACK_DICE = 1; private List _rolledWhiteDice = new List(); private List _rolledBlackDice = new List(); private System.Random _randomGen = new System.Random(); public GameObject dice; public static event EventHandler diceRolled; public event Action Enabled; public event Action Disabled; public void Enable() { Enabled?.Invoke(); } public void Disable() { Disabled.Invoke(); } public void RollDice() { _rolledWhiteDice.Clear(); _rolledBlackDice.Clear(); for (int i = 0; i < NUMBER_OF_WHITE_DICE; i++) { _rolledWhiteDice.Add(_randomGen.Next(1,7)); } for (int i = 0; i < NUMBER_OF_BLACK_DICE; i++) { _rolledBlackDice.Add(_randomGen.Next(1,7)); } diceRolled?.Invoke(this, EventArgs.Empty); UpdateGUI(); } public void ResetDice() { foreach (Transform dieTransform in dice.transform) { dieTransform.GetComponent().ResetDie(); } } private void UpdateGUI() { // Get dice object from the game objects with the right tag. Die[] whiteDice = Helper.GetTaggedChildren(dice, WHITE_DIE_TAG).Select(die => die.GetComponent()) .ToArray(); Die[] blackDice = Helper.GetTaggedChildren(dice, BLACK_DIE_TAG).Select(die => die.GetComponent()) .ToArray(); // Set the result of the dice object with the randomly generated number for (int i = 0; i < NUMBER_OF_WHITE_DICE; i++) { whiteDice[i].SetResult(_rolledWhiteDice[i]); } for (int i = 0; i < NUMBER_OF_BLACK_DICE; i++) { blackDice[i].SetResult(_rolledBlackDice[i]); } } }