using System; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System.Linq; 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(); [SerializeField] private Button rollDiceButton; public GameObject dice; public event EventHandler diceRolled; private void Start() { rollDiceButton.onClick.AddListener(RollDice); } public void Enable() { rollDiceButton.interactable = true; } public void Disable() { rollDiceButton.interactable = false; } private void RollDice() { _rolledWhiteDice.Clear(); _rolledBlackDice.Clear(); for (int i = 0; i < NUMBER_OF_WHITE_DICE; i++) { _rolledWhiteDice.Add(_randomGen.Next(1,6)); } for (int i = 0; i < NUMBER_OF_BLACK_DICE; i++) { _rolledBlackDice.Add(_randomGen.Next(1,6)); } 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]); } } }