78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
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<int> _rolledWhiteDice = new List<int>();
|
|
private List<int> _rolledBlackDice = new List<int>();
|
|
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<Die>().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<Die>())
|
|
.ToArray();
|
|
Die[] blackDice = Helper.GetTaggedChildren(dice, BLACK_DIE_TAG).Select(die => die.GetComponent<Die>())
|
|
.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]);
|
|
}
|
|
}
|
|
|
|
}
|