Mercurial > hg > ristipolku
annotate game/Piece.java @ 104:eb2e72dd8cae
Change how piece rotation works.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Thu, 03 Mar 2011 18:46:41 +0200 |
parents | d5f51370617b |
children | 41c6cca69d60 |
rev | line source |
---|---|
1 | 1 /* |
2 * Ristipolku | |
3 * (C) Copyright 2011 Matti 'ccr' Hämäläinen <ccr@tnsp.org> | |
4 */ | |
5 package game; | |
6 | |
7 import java.awt.*; | |
7 | 8 import java.awt.geom.*; |
1 | 9 import java.util.*; |
6 | 10 import java.math.*; |
1 | 11 |
12 | |
13 public class Piece | |
14 { | |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
15 public enum RotateDir { LEFT, RIGHT } |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
16 |
3 | 17 static final int numConnections = 8; |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
18 static final float maxTime = 50.0f; |
9 | 19 |
3 | 20 int currRotation; |
21 int[] connections; | |
40 | 22 boolean[] states; |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
23 PieceType type, prevType; |
1 | 24 |
3 | 25 boolean rotationChanged, rotationActive, |
9 | 26 typeChanged, typeActive, |
40 | 27 stateChanged, stateActive; |
6 | 28 |
91 | 29 float currAngle, newAngle, |
30 rotationTime, rotationSpeed, | |
31 typeTime, throbTime; | |
32 | |
7 | 33 Interpolate lerpRotation; |
1 | 34 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
35 |
3 | 36 public Piece(PieceType ptype) |
37 { | |
38 // Initialize | |
39 connections = new int[numConnections]; | |
40 | 40 states = new boolean[numConnections]; |
3 | 41 type = ptype; |
1 | 42 |
3 | 43 rotationChanged = false; |
6 | 44 rotationActive = false; |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
45 currRotation = 4 * 5000; |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
46 currAngle = getAngle(currRotation); |
6 | 47 |
3 | 48 typeChanged = false; |
49 typeActive = false; | |
1 | 50 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
51 throbTime = 0; |
1 | 52 |
53 | |
3 | 54 // Initialize connections between endpoints of the paths inside the piece |
55 for (int i = 0; i < numConnections; i++) | |
56 connections[i] = -1; | |
1 | 57 |
26
3d4cc47df31a
Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
58 |
6 | 59 // Randomize connections in the piece |
3 | 60 Random rnd = new Random(); |
61 for (int i = 0; i < numConnections; i++) | |
62 { | |
63 while (connections[i] < 0) | |
64 { | |
65 int tmp = rnd.nextInt(numConnections); | |
26
3d4cc47df31a
Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
66 if (tmp != i && connections[tmp] < 0) |
3 | 67 { |
68 connections[i] = tmp; | |
69 connections[tmp] = i; | |
70 } | |
71 } | |
72 } | |
73 } | |
74 | |
75 public Piece() | |
76 { | |
77 this(PieceType.NONE); | |
78 } | |
1 | 79 |
3 | 80 public void setType(PieceType ptype) |
81 { | |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
82 typeChanged = (prevType != ptype); |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
83 prevType = type; |
3 | 84 type = ptype; |
85 } | |
1 | 86 |
40 | 87 public void clearStates() |
88 { | |
89 for (int i = 0; i < numConnections; i++) | |
90 states[i] = false; | |
91 stateChanged = true; | |
92 } | |
93 | |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
94 public int getRotation() |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
95 { |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
96 return currRotation % 4; |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
97 } |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
98 |
40 | 99 public int getRotatedPoint(int in) |
3 | 100 { |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
101 int point = (in - (getRotation() * 2)) % 8; |
42
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
102 if (point < 0) point = 8 + point; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
103 return point; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
104 } |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
105 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
106 public int getAntiRotatedPoint(int in) |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
107 { |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
108 int point = (in + (getRotation() * 2)) % 8; |
40 | 109 if (point < 0) point = 8 + point; |
110 return point; | |
111 } | |
42
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
112 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
113 public int getMatchingPoint(int point) |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
114 { |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
115 switch (point) |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
116 { |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
117 case 0: return 5; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
118 case 1: return 4; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
119 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
120 case 2: return 7; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
121 case 3: return 6; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
122 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
123 case 4: return 1; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
124 case 5: return 0; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
125 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
126 case 6: return 3; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
127 case 7: return 2; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
128 } |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
129 return -1; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
130 } |
37 | 131 |
40 | 132 public void setConnectionState(int point, boolean state) |
133 { | |
134 states[point] = state; | |
135 states[connections[point]] = state; | |
136 stateChanged = true; | |
137 } | |
138 | |
139 public int getConnection(int point) | |
140 { | |
141 return connections[point]; | |
3 | 142 } |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
143 |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
144 private float getAngle(float rotation) |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
145 { |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
146 return (float) ((rotation * Math.PI) / 2.0f); |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
147 } |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
148 |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
149 public void rotate(RotateDir dir) |
3 | 150 { |
6 | 151 // Only normal |
152 if (type != PieceType.LOCKED && type != PieceType.ACTIVE) | |
3 | 153 return; |
1 | 154 |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
155 currRotation = (currRotation + (dir == RotateDir.RIGHT ? 1 : -1)); |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
156 newAngle = getAngle(currRotation); |
26
3d4cc47df31a
Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
157 lerpRotation = new Interpolate(newAngle, currAngle, maxTime); |
3 | 158 rotationChanged = true; |
5 | 159 } |
1 | 160 |
7 | 161 public Point2D getPointCoords(float x, float y, float dim, int index) |
5 | 162 { |
7 | 163 float ox = 0, oy = 0; |
164 float step = dim / 10; | |
1 | 165 |
5 | 166 switch (index) { |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
167 // Normal line starting and ending points |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
168 case 0: ox = 3.0f; oy = 0.4f; break; |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
169 case 1: ox = 7.0f; oy = 0.4f; break; |
39 | 170 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
171 case 2: ox = 9.6f; oy = 3.0f; break; |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
172 case 3: ox = 9.6f; oy = 7.0f; break; |
39 | 173 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
174 case 4: ox = 7.0f; oy = 9.6f; break; |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
175 case 5: ox = 3.0f; oy = 9.6f; break; |
39 | 176 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
177 case 6: ox = 0.4f; oy = 7.0f; break; |
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
178 case 7: ox = 0.4f; oy = 3.0f; break; |
1 | 179 |
39 | 180 |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
181 // Matching control points for each point above (+8) |
39 | 182 case 8: ox = 3.0f; oy = 2.5f; break; |
183 case 9: ox = 7.0f; oy = 2.5f; break; | |
184 | |
185 case 10: ox = 7.5f; oy = 3.0f; break; | |
186 case 11: ox = 7.5f; oy = 7.0f; break; | |
187 | |
188 case 12: ox = 7.0f; oy = 7.5f; break; | |
189 case 13: ox = 3.0f; oy = 7.5f; break; | |
190 | |
191 case 14: ox = 2.5f; oy = 7.0f; break; | |
192 case 15: ox = 2.5f; oy = 3.0f; break; | |
5 | 193 } |
1 | 194 |
7 | 195 return new Point2D.Float(x + ox * step, y + oy * step); |
5 | 196 } |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
197 |
27 | 198 public PieceType getType() |
199 { | |
200 return type; | |
201 } | |
9 | 202 |
7 | 203 public void animate(float time) |
5 | 204 { |
205 if (rotationChanged) | |
206 { | |
207 rotationTime = time; | |
208 rotationActive = true; | |
7 | 209 rotationChanged = false; |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
210 rotationSpeed = 1.0f; |
54 | 211 } |
212 | |
213 if (typeChanged && type == PieceType.LOCKED) | |
214 { | |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
215 rotationSpeed = 1.5f; |
5 | 216 } |
1 | 217 |
5 | 218 if (rotationActive) |
219 { | |
54 | 220 float t = (time - rotationTime) * rotationSpeed; |
11 | 221 |
9 | 222 if (t < maxTime) |
7 | 223 currAngle = lerpRotation.getValue(t); |
224 else | |
225 { | |
226 currAngle = newAngle; | |
227 rotationActive = false; | |
228 } | |
5 | 229 } |
54 | 230 |
6 | 231 if (typeChanged) |
232 { | |
233 typeTime = time; | |
234 typeActive = true; | |
7 | 235 typeChanged = false; |
6 | 236 } |
237 | |
238 if (typeActive) | |
239 { | |
240 } | |
241 | |
40 | 242 if (stateChanged) |
9 | 243 { |
244 } | |
245 | |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
246 throbTime = (time % 100) / 100.0f; |
5 | 247 } |
1 | 248 |
7 | 249 public void paint(Graphics2D g, float x, float y, float dim) |
5 | 250 { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
251 AffineTransform save = g.getTransform(); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
252 |
45 | 253 // Transform drawing by current angle |
11 | 254 g.rotate(currAngle, x + dim / 2.0f, y + dim / 2.0f); |
1 | 255 |
45 | 256 // Color piece by type |
5 | 257 switch (type) { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
258 case LOCKED: g.setPaint(new Color(0.3f, 0.8f, 0.3f, 0.35f)); break; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
259 case ACTIVE: g.setPaint(new Color(0.9f, 0.3f, 0.3f, 0.35f)); break; |
92
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
260 case START: g.setPaint(new Color(1.0f, 0.6f, 0.0f, 0.95f)); break; |
5 | 261 } |
6 | 262 |
7 | 263 g.fill(new RoundRectangle2D.Float(x, y, dim, dim, dim / 10, dim / 10)); |
1 | 264 |
92
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
265 // Start pieces (center piece) have a different kind of border |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
266 // and no connections drawn inside |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
267 if (type == PieceType.START) |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
268 { |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
269 // Draw piece border |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
270 g.setPaint(Color.black); |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
271 g.setStroke(new BasicStroke(2.0f)); |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
272 g.draw(new RoundRectangle2D.Float(x, y, dim, dim, dim / 10, dim / 10)); |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
273 } |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
274 else |
5 | 275 { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
276 // Active piece has a throbbing "ghost" border |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
277 if (type == PieceType.ACTIVE) |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
278 { |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
279 float offs1 = throbTime * 10.0f, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
280 offs2 = throbTime * 20.0f; |
27 | 281 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
282 g.setPaint(new Color(0.0f, 0.0f, 0.0f, (float) (1.0f - throbTime) )); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
283 g.setStroke(new BasicStroke(2.0f + throbTime * 2.0f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
284 g.draw(new RoundRectangle2D.Float( |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
285 x - offs1, y - offs1, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
286 dim + offs2, dim + offs2, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
287 dim / 10, dim / 10)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
288 } |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
289 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
290 // Draw piece border |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
291 g.setPaint(new Color(0.0f, 0.0f, 0.0f, 0.6f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
292 g.setStroke(new BasicStroke(5.0f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
293 g.draw(new RoundRectangle2D.Float(x, y, dim, dim, dim / 10, dim / 10)); |
1 | 294 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
295 // Draw the connections |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
296 g.setStroke(new BasicStroke(5.5f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
297 CubicCurve2D curve = new CubicCurve2D.Float(); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
298 boolean[] drawn = new boolean[numConnections]; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
299 for (int i = 0; i < numConnections; i++) |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
300 if (!drawn[i]) |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
301 { |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
302 Point2D start, cp1, cp2, end; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
303 boolean isActive = states[i] || states[connections[i]]; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
304 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
305 g.setPaint(isActive ? Color.white : Color.black); |
9 | 306 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
307 start = getPointCoords(x, y, dim, i); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
308 end = getPointCoords(x, y, dim, connections[i]); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
309 cp1 = getPointCoords(x, y, dim, i + 8); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
310 cp2 = getPointCoords(x, y, dim, connections[i] + 8); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
311 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
312 curve.setCurve(start, cp1, cp2, end); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
313 g.draw(curve); |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
314 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
315 // Mark connection drawn, so we don't overdraw |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
316 drawn[i] = true; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
317 drawn[connections[i]] = true; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
318 } |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
319 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
320 } // !PieceType.START |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
321 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
322 g.setTransform(save); |
5 | 323 } |
1 | 324 } |