Mercurial > hg > ristipolku
annotate game/Piece.java @ 149:35374be74fdc
Add some bling to piece rotation.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 28 May 2012 16:46:54 +0300 |
parents | 9eb791e2fa17 |
children | d6d92845d6a2 |
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 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
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, |
138
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
27 stateChanged, stateActive, |
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
28 active; |
6 | 29 |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
30 float currAngle, rotationTime, rotationSpeed, |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
31 typeTime, typeValue, throbTime, currScale; |
91 | 32 |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
33 Interpolate lerpRotation, |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
34 lerpScale, |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
35 lerpType; |
1 | 36 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
37 |
3 | 38 public Piece(PieceType ptype) |
39 { | |
40 // Initialize | |
41 connections = new int[numConnections]; | |
40 | 42 states = new boolean[numConnections]; |
3 | 43 type = ptype; |
1 | 44 |
3 | 45 rotationChanged = false; |
6 | 46 rotationActive = false; |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
47 currRotation = 4 * 5000; |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
48 currAngle = getAngle(currRotation); |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
49 currScale = 1; |
6 | 50 |
3 | 51 typeChanged = false; |
52 typeActive = false; | |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
53 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
54 throbTime = 0; |
1 | 55 |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
56 lerpType = new Interpolate(1.0f, 0.0f, maxTime); |
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
57 lerpScale = new Interpolate(0.0f, (float) Math.PI, maxTime); |
1 | 58 |
3 | 59 // Initialize connections between endpoints of the paths inside the piece |
60 for (int i = 0; i < numConnections; i++) | |
61 connections[i] = -1; | |
1 | 62 |
26
3d4cc47df31a
Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
63 |
6 | 64 // Randomize connections in the piece |
3 | 65 Random rnd = new Random(); |
66 for (int i = 0; i < numConnections; i++) | |
67 { | |
68 while (connections[i] < 0) | |
69 { | |
70 int tmp = rnd.nextInt(numConnections); | |
26
3d4cc47df31a
Cleanups, fix piece rendering and rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
21
diff
changeset
|
71 if (tmp != i && connections[tmp] < 0) |
3 | 72 { |
73 connections[i] = tmp; | |
74 connections[tmp] = i; | |
75 } | |
76 } | |
77 } | |
78 } | |
79 | |
80 public Piece() | |
81 { | |
82 this(PieceType.NONE); | |
83 } | |
1 | 84 |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
85 |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
86 public void changed() |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
87 { |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
88 typeChanged = true; |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
89 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
90 |
3 | 91 public void setType(PieceType ptype) |
92 { | |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
93 // typeChanged = (prevType != ptype) && (ptype == PieceType.LOCKED); |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
94 prevType = type; |
3 | 95 type = ptype; |
96 } | |
1 | 97 |
40 | 98 public void clearStates() |
99 { | |
100 for (int i = 0; i < numConnections; i++) | |
101 states[i] = false; | |
102 stateChanged = true; | |
103 } | |
104 | |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
105 public int getRotation() |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
106 { |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
107 return currRotation % 4; |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
108 } |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
109 |
40 | 110 public int getRotatedPoint(int in) |
3 | 111 { |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
112 int point = (in - (getRotation() * 2)) % 8; |
42
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
113 if (point < 0) point = 8 + point; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
114 return point; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
115 } |
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 public int getAntiRotatedPoint(int in) |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
118 { |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
119 int point = (in + (getRotation() * 2)) % 8; |
40 | 120 if (point < 0) point = 8 + point; |
121 return point; | |
122 } | |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
123 |
42
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
124 public int getMatchingPoint(int point) |
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 switch (point) |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
127 { |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
128 case 0: return 5; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
129 case 1: return 4; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
130 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
131 case 2: return 7; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
132 case 3: return 6; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
133 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
134 case 4: return 1; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
135 case 5: return 0; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
136 |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
137 case 6: return 3; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
138 case 7: return 2; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
139 } |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
140 return -1; |
951a4d669af0
Initially working path solving algorithm.
Matti Hamalainen <ccr@tnsp.org>
parents:
40
diff
changeset
|
141 } |
37 | 142 |
40 | 143 public void setConnectionState(int point, boolean state) |
144 { | |
145 states[point] = state; | |
146 states[connections[point]] = state; | |
147 stateChanged = true; | |
148 } | |
149 | |
150 public int getConnection(int point) | |
151 { | |
152 return connections[point]; | |
3 | 153 } |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
154 |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
155 private float getAngle(float rotation) |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
156 { |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
157 return (float) ((rotation * Math.PI) / 2.0f); |
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
158 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
159 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
160 public void rotate(RotateDir dir) |
3 | 161 { |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
162 // Only normal |
6 | 163 if (type != PieceType.LOCKED && type != PieceType.ACTIVE) |
3 | 164 return; |
1 | 165 |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
166 currRotation = (currRotation + (dir == RotateDir.RIGHT ? 1 : -1)); |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
167 lerpRotation = new Interpolate(getAngle(currRotation), currAngle, maxTime); |
3 | 168 rotationChanged = true; |
5 | 169 } |
1 | 170 |
7 | 171 public Point2D getPointCoords(float x, float y, float dim, int index) |
5 | 172 { |
7 | 173 float ox = 0, oy = 0; |
174 float step = dim / 10; | |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
175 |
5 | 176 switch (index) { |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
177 // Normal line starting and ending points |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
178 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
|
179 case 1: ox = 7.0f; oy = 0.4f; break; |
39 | 180 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
181 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
|
182 case 3: ox = 9.6f; oy = 7.0f; break; |
39 | 183 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
184 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
|
185 case 5: ox = 3.0f; oy = 9.6f; break; |
39 | 186 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
187 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
|
188 case 7: ox = 0.4f; oy = 3.0f; break; |
1 | 189 |
39 | 190 |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
191 // Matching control points for each point above (+8) |
39 | 192 case 8: ox = 3.0f; oy = 2.5f; break; |
193 case 9: ox = 7.0f; oy = 2.5f; break; | |
194 | |
195 case 10: ox = 7.5f; oy = 3.0f; break; | |
196 case 11: ox = 7.5f; oy = 7.0f; break; | |
197 | |
198 case 12: ox = 7.0f; oy = 7.5f; break; | |
199 case 13: ox = 3.0f; oy = 7.5f; break; | |
200 | |
201 case 14: ox = 2.5f; oy = 7.0f; break; | |
202 case 15: ox = 2.5f; oy = 3.0f; break; | |
5 | 203 } |
1 | 204 |
7 | 205 return new Point2D.Float(x + ox * step, y + oy * step); |
5 | 206 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
207 |
27 | 208 public PieceType getType() |
209 { | |
210 return type; | |
211 } | |
9 | 212 |
7 | 213 public void animate(float time) |
5 | 214 { |
138
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
215 active = false; |
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
216 |
5 | 217 if (rotationChanged) |
218 { | |
219 rotationTime = time; | |
220 rotationActive = true; | |
7 | 221 rotationChanged = false; |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
222 rotationSpeed = 1.0f; |
54 | 223 } |
224 | |
225 if (typeChanged && type == PieceType.LOCKED) | |
226 { | |
104
eb2e72dd8cae
Change how piece rotation works.
Matti Hamalainen <ccr@tnsp.org>
parents:
92
diff
changeset
|
227 rotationSpeed = 1.5f; |
5 | 228 } |
1 | 229 |
5 | 230 if (rotationActive) |
231 { | |
54 | 232 float t = (time - rotationTime) * rotationSpeed; |
11 | 233 |
9 | 234 if (t < maxTime) |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
235 { |
7 | 236 currAngle = lerpRotation.getValue(t); |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
237 currScale = (float) (1.0 + Math.sin(lerpScale.getValue(t)) * 0.25); |
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
238 } |
7 | 239 else |
240 { | |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
241 currAngle = lerpRotation.start; |
7 | 242 rotationActive = false; |
243 } | |
138
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
244 |
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
245 active = true; |
5 | 246 } |
54 | 247 |
6 | 248 if (typeChanged) |
249 { | |
250 typeTime = time; | |
251 typeActive = true; | |
7 | 252 typeChanged = false; |
6 | 253 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
254 |
6 | 255 if (typeActive) |
256 { | |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
257 float t = (time - typeTime) * 2.0f; |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
258 |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
259 if (t < maxTime) |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
260 typeValue = lerpType.getValue(t); |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
261 else |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
262 { |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
263 typeValue = lerpType.start; |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
264 typeActive = false; |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
265 } |
138
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
266 |
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
267 |
9eb791e2fa17
Optimize board updating logic, so that the old placed tiles need not to be
Matti Hamalainen <ccr@tnsp.org>
parents:
134
diff
changeset
|
268 active = true; |
6 | 269 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
270 |
40 | 271 if (stateChanged) |
9 | 272 { |
273 } | |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
274 |
32
e480579cc460
More work on debugging the path resolving.
Matti Hamalainen <ccr@tnsp.org>
parents:
30
diff
changeset
|
275 throbTime = (time % 100) / 100.0f; |
5 | 276 } |
1 | 277 |
7 | 278 public void paint(Graphics2D g, float x, float y, float dim) |
5 | 279 { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
280 AffineTransform save = g.getTransform(); |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
281 Composite csave = g.getComposite(); |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
282 |
149
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
283 // Scale dimensions |
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
284 dim = dim * currScale; |
35374be74fdc
Add some bling to piece rotation.
Matti Hamalainen <ccr@tnsp.org>
parents:
138
diff
changeset
|
285 |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
286 // Change compositing alpha for the whole piece drawing |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
287 // when the piece is being "introduced". |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
288 if (typeActive) |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
289 { |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
290 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, typeValue)); |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
291 } |
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
292 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
293 |
45 | 294 // Transform drawing by current angle |
11 | 295 g.rotate(currAngle, x + dim / 2.0f, y + dim / 2.0f); |
1 | 296 |
45 | 297 // Color piece by type |
5 | 298 switch (type) { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
299 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
|
300 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
|
301 case START: g.setPaint(new Color(1.0f, 0.6f, 0.0f, 0.95f)); break; |
5 | 302 } |
6 | 303 |
7 | 304 g.fill(new RoundRectangle2D.Float(x, y, dim, dim, dim / 10, dim / 10)); |
1 | 305 |
92
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
306 // Start pieces (center piece) have a different kind of border |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
307 // and no connections drawn inside |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
308 if (type == PieceType.START) |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
309 { |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
310 // Draw piece border |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
311 g.setPaint(Color.black); |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
312 g.setStroke(new BasicStroke(2.0f)); |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
313 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
|
314 } |
d5f51370617b
Change start piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
91
diff
changeset
|
315 else |
5 | 316 { |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
317 // Active piece has a throbbing "ghost" border |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
318 if (type == PieceType.ACTIVE) |
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 float offs1 = throbTime * 10.0f, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
321 offs2 = throbTime * 20.0f; |
27 | 322 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
323 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
|
324 g.setStroke(new BasicStroke(2.0f + throbTime * 2.0f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
325 g.draw(new RoundRectangle2D.Float( |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
326 x - offs1, y - offs1, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
327 dim + offs2, dim + offs2, |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
328 dim / 10, dim / 10)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
329 } |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
330 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
331 // Draw piece border |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
332 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
|
333 g.setStroke(new BasicStroke(5.0f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
334 g.draw(new RoundRectangle2D.Float(x, y, dim, dim, dim / 10, dim / 10)); |
1 | 335 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
336 // Draw the connections |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
337 g.setStroke(new BasicStroke(5.5f)); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
338 CubicCurve2D curve = new CubicCurve2D.Float(); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
339 boolean[] drawn = new boolean[numConnections]; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
340 for (int i = 0; i < numConnections; i++) |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
341 if (!drawn[i]) |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
342 { |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
343 Point2D start, cp1, cp2, end; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
344 boolean isActive = states[i] || states[connections[i]]; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
345 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
346 g.setPaint(isActive ? Color.white : Color.black); |
9 | 347 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
348 start = getPointCoords(x, y, dim, i); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
349 end = getPointCoords(x, y, dim, connections[i]); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
350 cp1 = getPointCoords(x, y, dim, i + 8); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
351 cp2 = getPointCoords(x, y, dim, connections[i] + 8); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
352 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
353 curve.setCurve(start, cp1, cp2, end); |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
354 g.draw(curve); |
34
6f6c551cc14c
Fix piece connections rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
32
diff
changeset
|
355 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
356 // Mark connection drawn, so we don't overdraw |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
357 drawn[i] = true; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
358 drawn[connections[i]] = true; |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
359 } |
134
4c0dec72e2f0
Whitespace cosmetic cleanup.
Matti Hamalainen <ccr@tnsp.org>
parents:
106
diff
changeset
|
360 |
58
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
361 } // !PieceType.START |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
362 |
cde170f2f980
Clean up the piece rendering.
Matti Hamalainen <ccr@tnsp.org>
parents:
54
diff
changeset
|
363 g.setTransform(save); |
106
41c6cca69d60
Make new pieces appear gradually, and same effect for swapping.
Matti Hamalainen <ccr@tnsp.org>
parents:
104
diff
changeset
|
364 g.setComposite(csave); |
5 | 365 } |
1 | 366 } |