-
Notifications
You must be signed in to change notification settings - Fork 0
/
DieSelector.cs
161 lines (139 loc) · 5.04 KB
/
DieSelector.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DieSelector: MonoBehaviour
{
// We dont want to have to select the color of the dice in several places in unity, therefore the logic to retrieve this info is implemented:
public Material ogMaterial;
// This class takes care of the highlighting, therefore its okay to hard code the highlight material here:
public Material highlightedMaterial;
public Material failMaterial;
private void PrintName(RollingDie die) {
print(die.gameObject.name);
}
public void OnClick(RollingDie die, ArrayList thrownDice, int duplicates) {
if (die.selectable) {
if (die.selected) {
DeselectDie(die, thrownDice);
}
else {
SelectDie(die, duplicates, thrownDice);
}
}
}
public void Highlight(RollingDie die) {
die.gameObject.GetComponent<Renderer>().material = highlightedMaterial;
}
private void DeHighlight(RollingDie die) {
die.gameObject.GetComponent<Renderer>().material = ogMaterial;
}
public void SelectDie(RollingDie die, int duplicates, ArrayList thrownDice) {
// Select the clicked die:
Highlight(die);
die.selected = true;
// See if it is a triple and not a 1 or 5:
if(die.value != 1 && die.value != 5 && duplicates >= 3) {
SelectTriple(die, thrownDice);
}
// See if it is a straight and not a 1 or 5:
if(die.value != 1 && die.value != 5 && die.straight)
{
SelectStraight(thrownDice);
}
}
/*public void SelectDie(RollingDie die) {
// Select the clicked die:
if (die.selectable)
{
Highlight(die);
die.selected = true;
}
}//*/
private void DeselectDie(RollingDie die, ArrayList thrownDice) {
DeHighlight(die);
die.selected = false;
// See if it is a triple and not a one or a five:
if(die.value != 1 && die.value!= 5 && die.triple) {
DeselectTriple(die.value, thrownDice);
}
// See if it is a straight: (Even if it is a one or a five we must
//deselect the entire straight, since the other values cannot be
//selected without all being selected)
if (die.straight)
{
DeselectStraight(thrownDice);
}
}
private void SelectTriple(RollingDie clickedDie, ArrayList thrownDice) {
// mark the clicked die as a part if the triple:
clickedDie.triple = true;
// There is one die selected already:
int selected = 1;
foreach(RollingDie die in thrownDice) {
// Select the die if we have less than 3 selected, it is not the already selected one, and the die is of the same value:
if(selected < 3 && die != clickedDie && die.value == clickedDie.value) {
// This is not done using the SelectDie(RollingDie die) function since that would cause an inf loop.
Highlight(die);
die.selected = true;
die.triple = true;
selected++;
}
}
}
private void DeselectTriple(int value, ArrayList thrownDice) {
foreach(RollingDie die in thrownDice) {
if (die.triple && die.value == value) {
DeHighlight(die);
die.selected = false;
die.triple = false;
}
}
}
private void SelectStraight(ArrayList thrownDice)
{
foreach(RollingDie die in thrownDice)
{
die.selected = true;
Highlight(die);
}
}
private void DeselectStraight(ArrayList thrownDice)
{
foreach (RollingDie die in thrownDice)
{
if(die.value != 1 && die.value != 5)
{
DeHighlight(die);
die.selected = false;
}
}
}
public void MarkFail(ArrayList thrownDice) {
foreach(RollingDie die in thrownDice) {
die.gameObject.GetComponent<Renderer>().material = failMaterial;
}
}
public void UnmarkFail(ArrayList thrownDice) {
foreach (RollingDie die in thrownDice) {
die.gameObject.GetComponent<Renderer>().material = ogMaterial;
}
}
public bool AllSelected(ArrayList thrownDice) {
foreach (RollingDie die in thrownDice) {
// we only need to find one selectable and see if it is not selected to determine false:
if (die.selectable && !die.selected) {
return false;
}
}
return true;
}
public int NumberOfSelected(ArrayList thrownDice) {
int selected = 0;
foreach (RollingDie die in thrownDice) {
if (die.selected) {
selected++;
}
}
return selected;
}
}