-
Notifications
You must be signed in to change notification settings - Fork 0
/
LC_Node.pde
236 lines (210 loc) · 4.68 KB
/
LC_Node.pde
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
//=======================================\\
// LOGICOLOUR : A COLOURFUL PUZZLE GAME \\
// ------------------------------------- \\
// AUTHOR: KYLE DERBY MACINNIS \\
// DATE: MARCH 12, 2015 \\
// ------------------------------------- \\
// LAST UPDATED: MARCH 21, 2015 \\
// ------------------------------------- \\
// \\
// LC_Node.pde \\
// \\
// ------------------------------------- \\
//=======================================\\
// Node Class Declaration
class Node
{
// Node Position Vector
PVector nPos;
// Parent Grid
Grid pGrid;
// Node Siblings
Node[] nSiblings;
// Node Colour
color nColour;
// Distance to End
int distanceToEnd = -1;
// Distance Flags
boolean ignoreDistance = false;
boolean distanceSet = false;
// Type Flags
boolean isConnector = false;
boolean isWall = false;
// Wire Flags (Optional?)
boolean isHWire = false;
boolean isVWire = false;
// Solution Checker Flag
boolean isChecked = false;
boolean isOutput = false;
// Regular Contructor
public Node(PVector pos, Grid grid)
{
// Set Position of Node
this.nPos = pos;
// Associate Node to Grid
this.pGrid = grid;
// Create Empty Sibling List
this.nSiblings = new Node[0];
// Set Basic Colour
this.nColour = color(00, 44, 88);
}
// Add Sibling to Node
public void addSibling(Node sib)
{
this.nSiblings = (Node[])append(nSiblings, sib);
}
// Display Function for Node
public void Display()
{
// If Wall or Empty
if ( !this.isConnector )
// Select Node Colour
fill(this.nColour);
else
// Empty Node Colour
fill(00, 44, 88);
// White Stroke Line
stroke(255);
// Center Rectangles
rectMode(CENTER);
// Draw Node onto Screen
rect(this.nPos.x, this.nPos.y, gSize, gSize);
// If Connector Draw Circle
if ( this.isConnector )
{
// Connector Colour
fill(this.nColour);
// Center Connector
ellipseMode(CENTER);
// Black Stroke
stroke(255);
strokeWeight(2);
// Draw Circle
ellipse(this.nPos.x, this.nPos.y, gSize*3/4, gSize*3/4);
strokeWeight(1);
}
}
// Set Distance Vallue
public void setDistance(int i)
{
this.distanceToEnd = i;
this.distanceSet = true;
}
// Clear Distance Value
public void resetDistance()
{
this.distanceSet = false;
}
// Reset Distance Value to -1
public void clearDistanceValue()
{
this.distanceToEnd = -1;
}
// Reset Color for Node
public void resetColour()
{
this.nColour = color(00, 44, 88);
}
// Set Colour for Node
public void setColour(color clr)
{
this.nColour = clr;
}
// Set Wall Value for Node
public void setWall(boolean w)
{
this.isWall = w;
// If wall, Set appropriate Flags
if (w) {
this.ignoreDistance = true;
this.distanceToEnd = -1;
this.setColour(color(150));
this.isConnector = false;
}
// Otherwise Clear Wall flags
else {
this.ignoreDistance = false;
this.resetColour();
}
}
// Set Connector Value for Node
public void setConnector(boolean c)
{
this.isConnector = c;
// If Connector, Set Appropriate Flags
if (c) {
this.ignoreDistance = true;
this.distanceToEnd = -1;
this.isWall = false;
} else {
this.ignoreDistance = false;
this.resetColour();
}
}
// For Maintaining Overlap Issues
public void setWire(boolean hWire, boolean vWire)
{
// Set Wire Values
isHWire = hWire;
isVWire = vWire;
}
// Check for V Wire Placement
public boolean getVWire()
{
return isVWire;
}
// Check for H Wire placement
public boolean getHWire()
{
return isHWire;
}
// Set Ignore Flag
public void setIgnore(boolean b)
{
this.ignoreDistance = b;
}
// Return Distance Flag
public boolean isDistanceSet()
{
return this.distanceSet;
}
// Return Ignore Distance Flag
public boolean ignoreDistanceSet()
{
return this.ignoreDistance;
}
public void setOutput(boolean c)
{
this.isOutput = c;
}
// Check I/O Status
public boolean isOutput()
{
return this.isOutput;
}
// Return if Connector
public boolean isConnector()
{
return this.isConnector;
}
// Return if Wall
public boolean isWall()
{
return this.isWall;
}
// Return Distance Value
public int getDistance()
{
return this.distanceToEnd;
}
// Return Position of Node
public PVector getPosition()
{
return this.nPos;
}
// Return Node Colour
public color getColour()
{
return this.nColour;
}
}