Revision af0de0af
Added by Leszek Koltunski over 3 years ago
src/main/java/org/distorted/objects/TwistyKilominx.java | ||
---|---|---|
34 | 34 |
|
35 | 35 |
public class TwistyKilominx extends TwistyMinx |
36 | 36 |
{ |
37 |
private static final int[] mCenterFaceMap = new int[] |
|
37 |
private int[] mCenterFaceMap; |
|
38 |
|
|
39 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
40 |
|
|
41 |
TwistyKilominx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
42 |
DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
43 |
{ |
|
44 |
super(size, size, quat, texture, mesh, effects, moves, ObjectList.KILO, res, scrWidth); |
|
45 |
} |
|
46 |
|
|
47 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
48 |
|
|
49 |
void initializeCenterFaceMap() |
|
50 |
{ |
|
51 |
mCenterFaceMap = new int[] |
|
38 | 52 |
{ |
39 | 53 |
0,0,0,0,1, |
40 | 54 |
1,0,1,1,0, |
... | ... | |
49 | 63 |
2,1,0,1,2, |
50 | 64 |
2,2,2,2,2 |
51 | 65 |
}; |
52 |
|
|
53 |
private static final float CENTER_CORR = 0.87f; |
|
54 |
|
|
55 |
private static final float[][] STICKERS = new float[][] |
|
56 |
{ |
|
57 |
{ -0.36616942f, -0.36327124f, 0.5f, -0.36327124f, 0.23233888f, 0.4605048f, -0.36616942f, 0.26603764f }, |
|
58 |
{ -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f }, |
|
59 |
{ -0.3249197f, -0.39442718f, 0.3249197f, -0.39442718f, 0.3249197f, 0.5f, -0.3249197f, 0.2888544f } |
|
60 |
}; |
|
61 |
|
|
62 |
static |
|
63 |
{ |
|
64 |
final float C = 1.14f; // make the 'center' sticker artificially larger, so that we paint |
|
65 |
// over the area in the center of the face. |
|
66 |
|
|
67 |
STICKERS[0][0] *= C; |
|
68 |
STICKERS[0][1] *= C; |
|
69 |
STICKERS[0][2] *= C; |
|
70 |
STICKERS[0][3] *= C; |
|
71 |
STICKERS[0][4] *= C; |
|
72 |
STICKERS[0][5] *= C; |
|
73 |
STICKERS[0][6] *= C; |
|
74 |
STICKERS[0][7] *= C; |
|
75 |
|
|
76 |
STICKERS[0][2] *= CENTER_CORR; |
|
77 |
STICKERS[0][3] *= CENTER_CORR; |
|
78 |
} |
|
79 |
|
|
80 |
private static final ObjectSticker[] mStickers; |
|
81 |
static |
|
82 |
{ |
|
83 |
mStickers = new ObjectSticker[STICKERS.length]; |
|
84 |
|
|
85 |
float R = 0.10f; |
|
86 |
final float[][] radii = { {R,R,R,R},{R,R,R,R},{R,R,R,R} }; |
|
87 |
final float[] strokes = { 0.20f, 0.11f, 0.10f }; |
|
88 |
|
|
89 |
for(int s=0; s<STICKERS.length; s++) |
|
90 |
{ |
|
91 |
mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]); |
|
92 |
} |
|
93 |
} |
|
94 |
|
|
95 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
96 |
|
|
97 |
TwistyKilominx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
98 |
DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
99 |
{ |
|
100 |
super(size, size, quat, texture, mesh, effects, moves, ObjectList.KILO, res, scrWidth); |
|
101 | 66 |
} |
102 | 67 |
|
103 | 68 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
169 | 134 |
|
170 | 135 |
private void computeBasicCornerVectors(int corner) |
171 | 136 |
{ |
172 |
Static4D quat = QUATS[QUAT_CORNER_INDICES[corner]]; |
|
137 |
if( mQuatCornerIndices==null ) initializeQuatIndices(); |
|
138 |
if( mQuats==null ) initializeQuats(); |
|
139 |
if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV(); |
|
140 |
|
|
141 |
Static4D quat = mQuats[mQuatCornerIndices[corner]]; |
|
173 | 142 |
|
174 | 143 |
mCurrCornerV[0] = QuatHelper.rotateVectorByQuat(mBasicCornerV[0],quat); |
175 | 144 |
mCurrCornerV[1] = QuatHelper.rotateVectorByQuat(mBasicCornerV[1],quat); |
... | ... | |
180 | 149 |
|
181 | 150 |
private float[] computeCorner(int numCubitsPerCorner, int numLayers, int corner, int part) |
182 | 151 |
{ |
152 |
if( mCorners==null ) initializeCorners(); |
|
153 |
if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV(); |
|
154 |
|
|
183 | 155 |
float D = numLayers/3.0f; |
184 |
float[] corn = CORNERS[corner];
|
|
156 |
float[] corn = mCorners[corner];
|
|
185 | 157 |
|
186 | 158 |
if( part==0 ) |
187 | 159 |
{ |
... | ... | |
212 | 184 |
|
213 | 185 |
private float[] computeCenter(int numLayers, int center, int part) |
214 | 186 |
{ |
187 |
if( mCenterCoords==null ) initializeCenterCoords(); |
|
188 |
if( mCorners ==null ) initializeCorners(); |
|
189 |
if( mCenterMap ==null ) initializeCenterMap(); |
|
190 |
|
|
215 | 191 |
int corner = mCenterMap[center][part]; |
216 | 192 |
float[] cent = mCenterCoords[center]; |
217 |
float[] corn = CORNERS[corner];
|
|
193 |
float[] corn = mCorners[corner];
|
|
218 | 194 |
float D = numLayers/3.0f; |
219 | 195 |
float F = 1.0f - (2.0f*numLayers-6.0f)/(numLayers-1)*COS54*COS54; |
220 | 196 |
|
... | ... | |
238 | 214 |
|
239 | 215 |
private float[] computeEdge(int numLayers, int edge, int part) |
240 | 216 |
{ |
217 |
if( mCenterCoords==null ) initializeCenterCoords(); |
|
218 |
if( mCorners==null ) initializeCorners(); |
|
219 |
if( mEdgeMap==null ) initializeEdgeMap(); |
|
220 |
|
|
241 | 221 |
float D = numLayers/3.0f; |
242 |
float[] c1 = CORNERS[ mEdgeMap[edge][0] ];
|
|
243 |
float[] c2 = CORNERS[ mEdgeMap[edge][1] ];
|
|
222 |
float[] c1 = mCorners[ mEdgeMap[edge][0] ];
|
|
223 |
float[] c2 = mCorners[ mEdgeMap[edge][1] ];
|
|
244 | 224 |
|
245 | 225 |
int leftRight = 2*(part%2) -1; |
246 | 226 |
part /= 2; |
... | ... | |
284 | 264 |
|
285 | 265 |
float[][] getCubitPositions(int numLayers) |
286 | 266 |
{ |
287 |
if( numLayers<5 ) return CORNERS; |
|
267 |
if( mCorners==null ) initializeCorners(); |
|
268 |
if( numLayers<5 ) return mCorners; |
|
288 | 269 |
|
289 | 270 |
int numCubitsPerCorner = numCubitsPerCorner(numLayers); |
290 | 271 |
int numCubitsPerEdge = numCubitsPerEdge(numLayers); |
... | ... | |
327 | 308 |
|
328 | 309 |
private int getQuat(int cubit, int numCubitsPerCorner, int numCubitsPerEdge) |
329 | 310 |
{ |
311 |
if( mQuatCornerIndices==null || mQuatEdgeIndices==null ) initializeQuatIndices(); |
|
312 |
if( mCenterMap==null ) initializeCenterMap(); |
|
313 |
|
|
330 | 314 |
if( cubit < NUM_CORNERS*numCubitsPerCorner ) |
331 | 315 |
{ |
332 | 316 |
int corner = cubit/numCubitsPerCorner; |
333 |
return QUAT_CORNER_INDICES[corner];
|
|
317 |
return mQuatCornerIndices[corner];
|
|
334 | 318 |
} |
335 | 319 |
|
336 | 320 |
if( cubit < NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge ) |
337 | 321 |
{ |
338 | 322 |
int edge = (cubit-NUM_CORNERS*numCubitsPerCorner)/numCubitsPerEdge; |
339 |
return QUAT_EDGE_INDICES[edge];
|
|
323 |
return mQuatEdgeIndices[edge];
|
|
340 | 324 |
} |
341 | 325 |
|
342 | 326 |
if( numCubitsPerCorner==0 ) |
343 | 327 |
{ |
344 |
return QUAT_CORNER_INDICES[cubit];
|
|
328 |
return mQuatCornerIndices[cubit];
|
|
345 | 329 |
} |
346 | 330 |
else |
347 | 331 |
{ |
... | ... | |
351 | 335 |
int index= cubit%numCubitsPerCenter; |
352 | 336 |
int corner=mCenterMap[face][index]; |
353 | 337 |
|
354 |
return QUAT_CORNER_INDICES[corner];
|
|
338 |
return mQuatCornerIndices[corner];
|
|
355 | 339 |
} |
356 | 340 |
} |
357 | 341 |
|
... | ... | |
537 | 521 |
|
538 | 522 |
Static4D getQuat(int cubit, int numLayers) |
539 | 523 |
{ |
524 |
if( mQuats==null ) initializeQuats(); |
|
540 | 525 |
int numCubitsPerCorner = numCubitsPerCorner(numLayers); |
541 | 526 |
int numCubitsPerEdge = numCubitsPerEdge(numLayers); |
542 | 527 |
|
543 |
return QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
|
|
528 |
return mQuats[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
|
|
544 | 529 |
} |
545 | 530 |
|
546 | 531 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
581 | 566 |
|
582 | 567 |
int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner) |
583 | 568 |
{ |
569 |
if( mCornerFaceMap==null ) initializeCornerFaceMap(); |
|
584 | 570 |
if( cubitface<0 || cubitface>2 ) return NUM_TEXTURES; |
585 | 571 |
|
586 | 572 |
int part = cubit % numCubitsPerCorner; |
... | ... | |
627 | 613 |
|
628 | 614 |
int part = edge % numCubitsPerEdge; |
629 | 615 |
int variant = edge / numCubitsPerEdge; |
616 |
if( mEdgeMap==null ) initializeEdgeMap(); |
|
630 | 617 |
|
631 | 618 |
part /=2; |
632 | 619 |
|
... | ... | |
637 | 624 |
|
638 | 625 |
int getCenterColor(int center, int cubitface, int numLayers) |
639 | 626 |
{ |
640 |
if( numLayers==3 ) |
|
627 |
if( mCenterFaceMap==null ) initializeCenterFaceMap(); |
|
628 |
if( mCornerFaceMap==null ) initializeCornerFaceMap(); |
|
629 |
|
|
630 |
if( numLayers==3 ) |
|
641 | 631 |
{ |
642 | 632 |
return cubitface>=0 && cubitface<3 ? mCornerFaceMap[center][cubitface] : NUM_TEXTURES; |
643 | 633 |
} |
... | ... | |
679 | 669 |
|
680 | 670 |
ObjectSticker retSticker(int face) |
681 | 671 |
{ |
672 |
if( mStickers==null ) |
|
673 |
{ |
|
674 |
float[][] STICKERS = new float[][] |
|
675 |
{ |
|
676 |
{ -0.36616942f, -0.36327124f, 0.5f, -0.36327124f, 0.23233888f, 0.4605048f, -0.36616942f, 0.26603764f }, |
|
677 |
{ -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f }, |
|
678 |
{ -0.3249197f, -0.39442718f, 0.3249197f, -0.39442718f, 0.3249197f, 0.5f, -0.3249197f, 0.2888544f } |
|
679 |
}; |
|
680 |
|
|
681 |
float CENTER_CORR = 0.87f; |
|
682 |
float C = 1.14f; // make the 'center' sticker artificially larger, so that we paint over the area in the center of the face. |
|
683 |
|
|
684 |
STICKERS[0][0] *= C; |
|
685 |
STICKERS[0][1] *= C; |
|
686 |
STICKERS[0][2] *= C; |
|
687 |
STICKERS[0][3] *= C; |
|
688 |
STICKERS[0][4] *= C; |
|
689 |
STICKERS[0][5] *= C; |
|
690 |
STICKERS[0][6] *= C; |
|
691 |
STICKERS[0][7] *= C; |
|
692 |
|
|
693 |
STICKERS[0][2] *= CENTER_CORR; |
|
694 |
STICKERS[0][3] *= CENTER_CORR; |
|
695 |
|
|
696 |
mStickers = new ObjectSticker[STICKERS.length]; |
|
697 |
|
|
698 |
float R = 0.10f; |
|
699 |
final float[][] radii = { {R,R,R,R},{R,R,R,R},{R,R,R,R} }; |
|
700 |
final float[] strokes = { 0.20f, 0.11f, 0.10f }; |
|
701 |
|
|
702 |
for(int s=0; s<STICKERS.length; s++) |
|
703 |
{ |
|
704 |
mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]); |
|
705 |
} |
|
706 |
} |
|
707 |
|
|
682 | 708 |
return mStickers[getStickerIndex(face)]; |
683 | 709 |
} |
684 | 710 |
|
src/main/java/org/distorted/objects/TwistyMegaminx.java | ||
---|---|---|
35 | 35 |
public class TwistyMegaminx extends TwistyMinx |
36 | 36 |
{ |
37 | 37 |
static final float MEGA_D = 0.04f; |
38 |
private int[] mQuatCenterIndices; |
|
38 | 39 |
|
39 |
private static final int[] QUAT_CENTER_INDICES = |
|
40 |
{ |
|
41 |
16, 18, 22, 1, 20, 13, 14, 15, 0, 12, 2, 3 |
|
42 |
}; |
|
40 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
43 | 41 |
|
44 |
private static final float[][] STICKERS = new float[][] |
|
45 |
{ |
|
46 |
{ -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f }, |
|
47 |
{ -0.5f, -0.0914315f, 0.5f, -0.4163512f, 0.5f, 0.4163512f, -0.5f, 0.0914315f }, |
|
48 |
{ -0.49233657f, -0.18006028f, 0.49233657f, -0.5f, 0.49233657f, 0.5f, -0.49233657f, 0.18006028f }, |
|
49 |
{ -0.3002273f, -0.30490047f, 0.3002273f, -0.5f, 0.3002273f, 0.5f, -0.3002273f, 0.30490047f }, |
|
50 |
{ -0.29389262f, 0.4045085f, -0.47552824f, -0.1545085f, 0.0f, -0.5f, 0.47552824f, -0.1545085f, 0.29389262f, 0.4045085f } |
|
51 |
}; |
|
52 |
|
|
53 |
private static final ObjectSticker[] mStickers; |
|
54 |
static |
|
42 |
TwistyMegaminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
43 |
DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
55 | 44 |
{ |
56 |
mStickers = new ObjectSticker[STICKERS.length]; |
|
57 |
|
|
58 |
final float R0 = 0.08f; |
|
59 |
final float R1 = 0.12f; |
|
60 |
final float R2 = 0.12f; |
|
61 |
final float R3 = 0.08f; |
|
62 |
final float R4 = 0.10f; |
|
63 |
final float[][] radii = { {R0,R0,R0,R0},{R1,R1,R1,R1},{R2,R2,R2,R2},{R3,R3,R3,R3},{R4,R4,R4,R4,R4} }; |
|
64 |
final float[] strokes = { 0.10f,0.12f,0.12f,0.08f,0.07f }; |
|
65 |
|
|
66 |
for(int s=0; s<STICKERS.length; s++) |
|
67 |
{ |
|
68 |
mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]); |
|
69 |
} |
|
45 |
super(size, size, quat, texture, mesh, effects, moves, ObjectList.MEGA, res, scrWidth); |
|
70 | 46 |
} |
71 | 47 |
|
72 | 48 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
73 | 49 |
|
74 |
TwistyMegaminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
75 |
DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
50 |
private void initializeCenterIndices() |
|
76 | 51 |
{ |
77 |
super(size, size, quat, texture, mesh, effects, moves, ObjectList.MEGA, res, scrWidth);
|
|
52 |
mQuatCenterIndices = new int[] { 16, 18, 22, 1, 20, 13, 14, 15, 0, 12, 2, 3 };
|
|
78 | 53 |
} |
79 | 54 |
|
80 | 55 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
144 | 119 |
|
145 | 120 |
private float[] computeCenter(int center, int numLayers) |
146 | 121 |
{ |
122 |
if( mCenterCoords==null ) initializeCenterCoords(); |
|
147 | 123 |
float[] coords = mCenterCoords[center]; |
148 | 124 |
float A = numLayers/3.0f; |
149 | 125 |
|
... | ... | |
156 | 132 |
|
157 | 133 |
private void computeBasicCornerVectors(int corner) |
158 | 134 |
{ |
159 |
Static4D quat = QUATS[QUAT_CORNER_INDICES[corner]]; |
|
135 |
if( mQuatCornerIndices==null ) initializeQuatIndices(); |
|
136 |
if( mQuats==null ) initializeQuats(); |
|
137 |
if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV(); |
|
138 |
|
|
139 |
Static4D quat = mQuats[mQuatCornerIndices[corner]]; |
|
160 | 140 |
|
161 | 141 |
mCurrCornerV[0] = QuatHelper.rotateVectorByQuat(mBasicCornerV[0],quat); |
162 | 142 |
mCurrCornerV[1] = QuatHelper.rotateVectorByQuat(mBasicCornerV[1],quat); |
... | ... | |
167 | 147 |
|
168 | 148 |
private float[] computeCorner(int numCubitsPerCorner, int numLayers, int corner, int part) |
169 | 149 |
{ |
150 |
if( mCorners==null ) initializeCorners(); |
|
151 |
if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV(); |
|
152 |
|
|
170 | 153 |
float D = numLayers/3.0f; |
171 |
float[] corn = CORNERS[corner];
|
|
154 |
float[] corn = mCorners[corner];
|
|
172 | 155 |
|
173 | 156 |
if( part==0 ) |
174 | 157 |
{ |
... | ... | |
207 | 190 |
|
208 | 191 |
private float[] computeEdge(int numLayers, int edge, int part) |
209 | 192 |
{ |
210 |
float D = numLayers/3.0f; |
|
193 |
if( mCenterCoords==null ) initializeCenterCoords(); |
|
194 |
if( mCorners==null ) initializeCorners(); |
|
195 |
if( mEdgeMap==null ) initializeEdgeMap(); |
|
211 | 196 |
|
212 |
float[] c1 = CORNERS[ mEdgeMap[edge][0] ]; |
|
213 |
float[] c2 = CORNERS[ mEdgeMap[edge][1] ]; |
|
197 |
float D = numLayers/3.0f; |
|
198 |
float[] c1 = mCorners[ mEdgeMap[edge][0] ]; |
|
199 |
float[] c2 = mCorners[ mEdgeMap[edge][1] ]; |
|
214 | 200 |
float x = D * (c1[0]+c2[0]) / 2; |
215 | 201 |
float y = D * (c1[1]+c2[1]) / 2; |
216 | 202 |
float z = D * (c1[2]+c2[2]) / 2; |
... | ... | |
277 | 263 |
|
278 | 264 |
private int getQuat(int cubit, int numCubitsPerCorner, int numCubitsPerEdge) |
279 | 265 |
{ |
266 |
if( mQuatCornerIndices==null || mQuatEdgeIndices==null ) initializeQuatIndices(); |
|
267 |
if( mQuatCenterIndices==null ) initializeCenterIndices(); |
|
268 |
|
|
280 | 269 |
if( cubit < NUM_CORNERS*numCubitsPerCorner ) |
281 | 270 |
{ |
282 | 271 |
int corner = cubit/numCubitsPerCorner; |
283 |
return QUAT_CORNER_INDICES[corner];
|
|
272 |
return mQuatCornerIndices[corner];
|
|
284 | 273 |
} |
285 | 274 |
|
286 | 275 |
if( cubit < NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge ) |
287 | 276 |
{ |
288 | 277 |
int edge = (cubit-NUM_CORNERS*numCubitsPerCorner)/numCubitsPerEdge; |
289 |
return QUAT_EDGE_INDICES[edge];
|
|
278 |
return mQuatEdgeIndices[edge];
|
|
290 | 279 |
} |
291 | 280 |
|
292 | 281 |
int center = cubit - NUM_CORNERS*numCubitsPerCorner - NUM_EDGES*numCubitsPerEdge; |
293 |
return QUAT_CENTER_INDICES[center];
|
|
282 |
return mQuatCenterIndices[center];
|
|
294 | 283 |
} |
295 | 284 |
|
296 | 285 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
443 | 432 |
} |
444 | 433 |
} |
445 | 434 |
|
446 |
|
|
447 | 435 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
448 | 436 |
|
449 | 437 |
Static4D getQuat(int cubit, int numLayers) |
450 | 438 |
{ |
439 |
if( mQuats==null ) initializeQuats(); |
|
451 | 440 |
int numCubitsPerCorner = numCubitsPerCorner(numLayers); |
452 | 441 |
int numCubitsPerEdge = numCubitsPerEdge(numLayers); |
453 | 442 |
|
454 |
return QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
|
|
443 |
return mQuats[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
|
|
455 | 444 |
} |
456 | 445 |
|
457 | 446 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
491 | 480 |
|
492 | 481 |
int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner) |
493 | 482 |
{ |
483 |
if( mCornerFaceMap==null ) initializeCornerFaceMap(); |
|
494 | 484 |
if( cubitface<0 || cubitface>2 ) return NUM_TEXTURES; |
495 | 485 |
|
496 | 486 |
int part = cubit % numCubitsPerCorner; |
... | ... | |
537 | 527 |
|
538 | 528 |
int part = edge % numCubitsPerEdge; |
539 | 529 |
int variant = edge / numCubitsPerEdge; |
530 |
if( mEdgeMap==null ) initializeEdgeMap(); |
|
540 | 531 |
|
541 | 532 |
return (part==0 || cubitface==((part+1)%2)) ? mEdgeMap[variant][cubitface+2] + ((part+3)/2)*NUM_FACES : NUM_TEXTURES; |
542 | 533 |
} |
... | ... | |
582 | 573 |
|
583 | 574 |
ObjectSticker retSticker(int face) |
584 | 575 |
{ |
576 |
if( mStickers==null ) |
|
577 |
{ |
|
578 |
float[][] STICKERS = new float[][] |
|
579 |
{ |
|
580 |
{ -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f }, |
|
581 |
{ -0.5f, -0.0914315f, 0.5f, -0.4163512f, 0.5f, 0.4163512f, -0.5f, 0.0914315f }, |
|
582 |
{ -0.49233657f, -0.18006028f, 0.49233657f, -0.5f, 0.49233657f, 0.5f, -0.49233657f, 0.18006028f }, |
|
583 |
{ -0.3002273f, -0.30490047f, 0.3002273f, -0.5f, 0.3002273f, 0.5f, -0.3002273f, 0.30490047f }, |
|
584 |
{ -0.29389262f, 0.4045085f, -0.47552824f, -0.1545085f, 0.0f, -0.5f, 0.47552824f, -0.1545085f, 0.29389262f, 0.4045085f } |
|
585 |
}; |
|
586 |
|
|
587 |
mStickers = new ObjectSticker[STICKERS.length]; |
|
588 |
|
|
589 |
final float R0 = 0.08f; |
|
590 |
final float R1 = 0.12f; |
|
591 |
final float R2 = 0.12f; |
|
592 |
final float R3 = 0.08f; |
|
593 |
final float R4 = 0.10f; |
|
594 |
final float[][] radii = { {R0,R0,R0,R0},{R1,R1,R1,R1},{R2,R2,R2,R2},{R3,R3,R3,R3},{R4,R4,R4,R4,R4} }; |
|
595 |
final float[] strokes = { 0.10f,0.12f,0.12f,0.08f,0.07f }; |
|
596 |
|
|
597 |
for(int s=0; s<STICKERS.length; s++) |
|
598 |
{ |
|
599 |
mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]); |
|
600 |
} |
|
601 |
} |
|
602 |
|
|
585 | 603 |
return mStickers[getStickerIndex(face)]; |
586 | 604 |
} |
587 | 605 |
|
src/main/java/org/distorted/objects/TwistyMinx.java | ||
---|---|---|
21 | 21 |
|
22 | 22 |
import android.content.res.Resources; |
23 | 23 |
|
24 |
import org.distorted.helpers.ObjectSticker; |
|
24 | 25 |
import org.distorted.helpers.ScrambleState; |
25 | 26 |
import org.distorted.library.main.DistortedEffects; |
26 | 27 |
import org.distorted.library.main.DistortedTexture; |
... | ... | |
60 | 61 |
new Static3D( SIN54/LEN, 0 , -C2/LEN ) |
61 | 62 |
}; |
62 | 63 |
|
63 |
private static final int[] BASIC_ANGLE = new int[] { 5,5,5,5,5,5 }; |
|
64 |
|
|
65 | 64 |
static final int MINX_LGREEN = 0xff53aa00; |
66 | 65 |
static final int MINX_PINK = 0xfffd7ab7; |
67 | 66 |
static final int MINX_SANDY = 0xffefd48b; |
... | ... | |
82 | 81 |
MINX_DBLUE , MINX_DYELLOW, MINX_WHITE , MINX_GREY |
83 | 82 |
}; |
84 | 83 |
|
85 |
private static final int[] mFaceMap = new int[] {8,10,3,7,1,11,9,2,4,0,5,6}; |
|
84 |
private int mCurrState; |
|
85 |
private int mIndexExcluded; |
|
86 |
private ScrambleState[] mStates; |
|
87 |
private int[][] mScrambleTable; |
|
88 |
private int[] mNumOccurences; |
|
89 |
private int[] mBasicAngle; |
|
90 |
private int[] mFaceMap; |
|
91 |
Static4D[] mQuats; |
|
92 |
float[][] mCenterCoords; |
|
93 |
float[][] mCorners; |
|
94 |
int[][] mCornerFaceMap; |
|
95 |
int[] mQuatEdgeIndices; |
|
96 |
int[] mQuatCornerIndices; |
|
97 |
int[][] mEdgeMap; |
|
98 |
int[][] mCenterMap; |
|
99 |
Static4D[] mBasicCornerV, mCurrCornerV; |
|
100 |
ObjectSticker[] mStickers; |
|
86 | 101 |
|
87 |
// All 60 legal rotation quats of a Minx |
|
88 |
static final Static4D[] QUATS = new Static4D[] |
|
89 |
{ |
|
90 |
new Static4D( 0.0f, 0.0f, 0.0f, 1.0f ), //0 |
|
91 |
new Static4D( 1.0f, 0.0f, 0.0f, 0.0f ), |
|
92 |
new Static4D( 0.0f, 1.0f, 0.0f, 0.0f ), |
|
93 |
new Static4D( 0.0f, 0.0f, 1.0f, 0.0f ), |
|
94 |
|
|
95 |
new Static4D( 0.5f, 0.5f, 0.5f, 0.5f ), //4 |
|
96 |
new Static4D( 0.5f, 0.5f, -0.5f, 0.5f ), |
|
97 |
new Static4D( 0.5f, -0.5f, 0.5f, 0.5f ), |
|
98 |
new Static4D( 0.5f, -0.5f, -0.5f, 0.5f ), |
|
99 |
new Static4D( -0.5f, 0.5f, 0.5f, 0.5f ), |
|
100 |
new Static4D( -0.5f, 0.5f, -0.5f, 0.5f ), |
|
101 |
new Static4D( -0.5f, -0.5f, 0.5f, 0.5f ), |
|
102 |
new Static4D( -0.5f, -0.5f, -0.5f, 0.5f ), |
|
103 |
|
|
104 |
new Static4D( 0.5f, SIN54, SIN18, 0.0f ), // 12 |
|
105 |
new Static4D( 0.5f, SIN54,-SIN18, 0.0f ), |
|
106 |
new Static4D( 0.5f,-SIN54, SIN18, 0.0f ), |
|
107 |
new Static4D( 0.5f,-SIN54,-SIN18, 0.0f ), |
|
108 |
new Static4D( SIN18, 0.5f, SIN54, 0.0f ), |
|
109 |
new Static4D( SIN18, 0.5f,-SIN54, 0.0f ), |
|
110 |
new Static4D(-SIN18, 0.5f, SIN54, 0.0f ), |
|
111 |
new Static4D(-SIN18, 0.5f,-SIN54, 0.0f ), |
|
112 |
new Static4D( SIN54, SIN18, 0.5f, 0.0f ), |
|
113 |
new Static4D( SIN54,-SIN18, 0.5f, 0.0f ), |
|
114 |
new Static4D(-SIN54, SIN18, 0.5f, 0.0f ), |
|
115 |
new Static4D(-SIN54,-SIN18, 0.5f, 0.0f ), |
|
116 |
|
|
117 |
new Static4D( 0.0f, SIN18, SIN54, 0.5f ), //24 |
|
118 |
new Static4D( 0.0f, SIN18,-SIN54, 0.5f ), |
|
119 |
new Static4D( 0.0f,-SIN18, SIN54, 0.5f ), |
|
120 |
new Static4D( 0.0f,-SIN18,-SIN54, 0.5f ), |
|
121 |
new Static4D( SIN18, SIN54, 0.0f, 0.5f ), |
|
122 |
new Static4D( SIN18,-SIN54, 0.0f, 0.5f ), |
|
123 |
new Static4D(-SIN18, SIN54, 0.0f, 0.5f ), |
|
124 |
new Static4D(-SIN18,-SIN54, 0.0f, 0.5f ), |
|
125 |
new Static4D( SIN54, 0.0f, SIN18, 0.5f ), |
|
126 |
new Static4D( SIN54, 0.0f,-SIN18, 0.5f ), |
|
127 |
new Static4D(-SIN54, 0.0f, SIN18, 0.5f ), |
|
128 |
new Static4D(-SIN54, 0.0f,-SIN18, 0.5f ), |
|
129 |
|
|
130 |
new Static4D( 0.0f, SIN54, 0.5f, SIN18 ), //36 |
|
131 |
new Static4D( 0.0f, SIN54, -0.5f, SIN18 ), |
|
132 |
new Static4D( 0.0f,-SIN54, 0.5f, SIN18 ), |
|
133 |
new Static4D( 0.0f,-SIN54, -0.5f, SIN18 ), |
|
134 |
new Static4D( 0.5f, 0.0f, SIN54, SIN18 ), |
|
135 |
new Static4D( 0.5f, 0.0f,-SIN54, SIN18 ), |
|
136 |
new Static4D( -0.5f, 0.0f, SIN54, SIN18 ), |
|
137 |
new Static4D( -0.5f, 0.0f,-SIN54, SIN18 ), |
|
138 |
new Static4D( SIN54, 0.5f, 0.0f, SIN18 ), |
|
139 |
new Static4D( SIN54, -0.5f, 0.0f, SIN18 ), |
|
140 |
new Static4D(-SIN54, 0.5f, 0.0f, SIN18 ), |
|
141 |
new Static4D(-SIN54, -0.5f, 0.0f, SIN18 ), |
|
142 |
|
|
143 |
new Static4D( 0.0f, 0.5f, SIN18, SIN54 ), //48 |
|
144 |
new Static4D( 0.0f, 0.5f,-SIN18, SIN54 ), |
|
145 |
new Static4D( 0.0f, -0.5f, SIN18, SIN54 ), |
|
146 |
new Static4D( 0.0f, -0.5f,-SIN18, SIN54 ), |
|
147 |
new Static4D( 0.5f, SIN18, 0.0f, SIN54 ), |
|
148 |
new Static4D( 0.5f,-SIN18, 0.0f, SIN54 ), |
|
149 |
new Static4D( -0.5f, SIN18, 0.0f, SIN54 ), |
|
150 |
new Static4D( -0.5f,-SIN18, 0.0f, SIN54 ), |
|
151 |
new Static4D( SIN18, 0.0f, 0.5f, SIN54 ), |
|
152 |
new Static4D( SIN18, 0.0f, -0.5f, SIN54 ), |
|
153 |
new Static4D(-SIN18, 0.0f, 0.5f, SIN54 ), |
|
154 |
new Static4D(-SIN18, 0.0f, -0.5f, SIN54 ), |
|
155 |
}; |
|
102 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
156 | 103 |
|
157 |
// Coordinates of all 20 corners of a Minx |
|
158 |
static final float[][] CORNERS = new float[][] |
|
159 |
{ |
|
160 |
{ 0.0f, 0.5f, C2}, |
|
161 |
{ 0.0f, 0.5f, -C2}, |
|
162 |
{ 0.0f, -0.5f, C2}, |
|
163 |
{ 0.0f, -0.5f, -C2}, |
|
164 |
{ C2, 0.0f, 0.5f}, |
|
165 |
{ C2, 0.0f, -0.5f}, |
|
166 |
{ -C2, 0.0f, 0.5f}, |
|
167 |
{ -C2, 0.0f, -0.5f}, |
|
168 |
{ 0.5f, C2, 0.0f}, |
|
169 |
{ 0.5f, -C2, 0.0f}, |
|
170 |
{ -0.5f, C2, 0.0f}, |
|
171 |
{ -0.5f, -C2, 0.0f}, |
|
172 |
{ SIN54, SIN54, SIN54}, |
|
173 |
{ SIN54, SIN54,-SIN54}, |
|
174 |
{ SIN54,-SIN54, SIN54}, |
|
175 |
{ SIN54,-SIN54,-SIN54}, |
|
176 |
{-SIN54, SIN54, SIN54}, |
|
177 |
{-SIN54, SIN54,-SIN54}, |
|
178 |
{-SIN54,-SIN54, SIN54}, |
|
179 |
{-SIN54,-SIN54,-SIN54}, |
|
180 |
}; |
|
104 |
TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
105 |
DistortedEffects effects, int[][] moves, ObjectList obj, Resources res, int scrWidth) |
|
106 |
{ |
|
107 |
super(numLayers, realSize, quat, texture, mesh, effects, moves, obj, res, scrWidth); |
|
181 | 108 |
|
182 |
static final int[][] mCornerFaceMap = |
|
183 |
{ |
|
184 |
{ 0, 1, 8 }, |
|
185 |
{ 6, 5,10 }, |
|
186 |
{ 1, 0,11 }, |
|
187 |
{ 5, 6, 3 }, |
|
188 |
{ 0, 9, 4 }, |
|
189 |
{ 5, 4, 9 }, |
|
190 |
{ 7, 1, 2 }, |
|
191 |
{ 2, 6, 7 }, |
|
192 |
{ 10, 9, 8 }, |
|
193 |
{ 4, 3,11 }, |
|
194 |
{ 7,10, 8 }, |
|
195 |
{ 3, 2,11 }, |
|
196 |
{ 0, 8, 9 }, |
|
197 |
{ 9,10, 5 }, |
|
198 |
{ 0, 4,11 }, |
|
199 |
{ 4, 5, 3 }, |
|
200 |
{ 1, 7, 8 }, |
|
201 |
{ 7, 6,10 }, |
|
202 |
{ 2, 1,11 }, |
|
203 |
{ 6, 2, 3 }, |
|
204 |
}; |
|
109 |
initializeScrambleStates(numLayers); |
|
110 |
} |
|
205 | 111 |
|
206 |
static final int[] QUAT_EDGE_INDICES = |
|
207 |
{ |
|
208 |
56, 40, 43, 59, 0, 19, 9, 54, 58, 49, |
|
209 |
48, 24, 52, 4, 16, 32, 20, 11, 21, 35 , |
|
210 |
37, 30, 8, 28, 36, 44, 1, 46, 12, 47 |
|
211 |
}; |
|
212 | 112 |
|
113 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
213 | 114 |
|
214 |
static final int[] QUAT_CORNER_INDICES = |
|
215 |
{ |
|
216 |
0, 2, 3, 1, 40, 31, 41, 30, 39, 35, |
|
217 |
36, 34, 56, 32, 43, 21, 48, 28, 42, 23 |
|
218 |
}; |
|
115 |
void initializeCornerV() |
|
116 |
{ |
|
117 |
mBasicCornerV = new Static4D[3]; |
|
118 |
mCurrCornerV = new Static4D[3]; |
|
119 |
|
|
120 |
mBasicCornerV[0] = new Static4D( (SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f ); |
|
121 |
mBasicCornerV[1] = new Static4D(-(SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f ); |
|
122 |
mBasicCornerV[2] = new Static4D( 0, -0.500f, 0.0f, 0.0f ); |
|
123 |
} |
|
124 |
|
|
125 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
126 |
// the five vertices that form a given face. Order: the same as colors of the faces in TwistyMinx. |
|
127 |
|
|
128 |
void initializeCenterMap() |
|
129 |
{ |
|
130 |
mCenterMap = new int[][] |
|
131 |
{ |
|
132 |
{ 0, 12, 4, 14, 2}, |
|
133 |
{ 0, 2, 18, 6, 16}, |
|
134 |
{ 6, 18, 11, 19, 7}, |
|
135 |
{ 3, 15, 9, 11, 19}, |
|
136 |
{ 4, 5, 15, 9, 14}, |
|
137 |
{ 1, 13, 5, 15, 3}, |
|
138 |
{ 1, 3, 19, 7, 17}, |
|
139 |
{10, 16, 6, 7, 17}, |
|
140 |
{ 0, 12, 8, 10, 16}, |
|
141 |
{ 8, 13, 5, 4, 12}, |
|
142 |
{ 1, 13, 8, 10, 17}, |
|
143 |
{ 2, 14, 9, 11, 18}, |
|
144 |
}; |
|
145 |
} |
|
219 | 146 |
|
220 |
// the quadruple ( corner1, corner2, face1, face2 ) defining an edge. |
|
221 |
// In fact the 2 corners already define it, the faces only provide easy |
|
222 |
// way to get to know the colors. Order: arbitrary. Face1 arbitrarily on |
|
223 |
// the 'left' or right of vector corner1 --> corner2, according to Quat. |
|
224 |
static final int[][] mEdgeMap = |
|
147 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
148 |
// the quadruple ( corner1, corner2, face1, face2 ) defining an edge. |
|
149 |
// In fact the 2 corners already define it, the faces only provide easy |
|
150 |
// way to get to know the colors. Order: arbitrary. Face1 arbitrarily on |
|
151 |
// the 'left' or right of vector corner1 --> corner2, according to Quat. |
|
152 |
|
|
153 |
void initializeEdgeMap() |
|
154 |
{ |
|
155 |
mEdgeMap = new int[][] |
|
225 | 156 |
{ |
226 | 157 |
{ 0, 12, 0, 8}, //0 |
227 | 158 |
{ 12, 4, 0, 9}, |
... | ... | |
254 | 185 |
{ 1, 13, 10, 5}, |
255 | 186 |
{ 3, 15, 5, 3}, |
256 | 187 |
}; |
188 |
} |
|
257 | 189 |
|
258 |
// the five vertices that form a given face. Order: the same as colors |
|
259 |
// of the faces in TwistyMinx. |
|
260 |
static final int[][] mCenterMap = |
|
261 |
{ |
|
262 |
{ 0, 12, 4, 14, 2}, |
|
263 |
{ 0, 2, 18, 6, 16}, |
|
264 |
{ 6, 18, 11, 19, 7}, |
|
265 |
{ 3, 15, 9, 11, 19}, |
|
266 |
{ 4, 5, 15, 9, 14}, |
|
267 |
{ 1, 13, 5, 15, 3}, |
|
268 |
{ 1, 3, 19, 7, 17}, |
|
269 |
{10, 16, 6, 7, 17}, |
|
270 |
{ 0, 12, 8, 10, 16}, |
|
271 |
{ 8, 13, 5, 4, 12}, |
|
272 |
{ 1, 13, 8, 10, 17}, |
|
273 |
{ 2, 14, 9, 11, 18}, |
|
274 |
}; |
|
275 |
|
|
276 |
static final float[][] mCenterCoords = new float[NUM_CENTERS][3]; |
|
190 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
277 | 191 |
|
278 |
static
|
|
192 |
void initializeQuatIndices()
|
|
279 | 193 |
{ |
280 |
for(int center=0; center<NUM_CENTERS; center++)
|
|
194 |
mQuatEdgeIndices = new int[]
|
|
281 | 195 |
{ |
282 |
int[] map = mCenterMap[center]; |
|
196 |
56, 40, 43, 59, 0, 19, 9, 54, 58, 49, |
|
197 |
48, 24, 52, 4, 16, 32, 20, 11, 21, 35, |
|
198 |
37, 30, 8, 28, 36, 44, 1, 46, 12, 47 |
|
199 |
}; |
|
200 |
mQuatCornerIndices = new int[] |
|
201 |
{ |
|
202 |
0, 2, 3, 1, 40, 31, 41, 30, 39, 35, |
|
203 |
36, 34, 56, 32, 43, 21, 48, 28, 42, 23 |
|
204 |
}; |
|
205 |
} |
|
283 | 206 |
|
284 |
float x = CORNERS[map[0]][0] + |
|
285 |
CORNERS[map[1]][0] + |
|
286 |
CORNERS[map[2]][0] + |
|
287 |
CORNERS[map[3]][0] + |
|
288 |
CORNERS[map[4]][0] ; |
|
207 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
289 | 208 |
|
290 |
float y = CORNERS[map[0]][1] + |
|
291 |
CORNERS[map[1]][1] + |
|
292 |
CORNERS[map[2]][1] + |
|
293 |
CORNERS[map[3]][1] + |
|
294 |
CORNERS[map[4]][1] ; |
|
209 |
void initializeCornerFaceMap() |
|
210 |
{ |
|
211 |
mCornerFaceMap = new int[][] |
|
212 |
{ |
|
213 |
{ 0, 1, 8 }, |
|
214 |
{ 6, 5,10 }, |
|
215 |
{ 1, 0,11 }, |
|
216 |
{ 5, 6, 3 }, |
|
217 |
{ 0, 9, 4 }, |
|
218 |
{ 5, 4, 9 }, |
|
219 |
{ 7, 1, 2 }, |
|
220 |
{ 2, 6, 7 }, |
|
221 |
{ 10, 9, 8 }, |
|
222 |
{ 4, 3,11 }, |
|
223 |
{ 7,10, 8 }, |
|
224 |
{ 3, 2,11 }, |
|
225 |
{ 0, 8, 9 }, |
|
226 |
{ 9,10, 5 }, |
|
227 |
{ 0, 4,11 }, |
|
228 |
{ 4, 5, 3 }, |
|
229 |
{ 1, 7, 8 }, |
|
230 |
{ 7, 6,10 }, |
|
231 |
{ 2, 1,11 }, |
|
232 |
{ 6, 2, 3 }, |
|
233 |
}; |
|
234 |
} |
|
295 | 235 |
|
296 |
float z = CORNERS[map[0]][2] + |
|
297 |
CORNERS[map[1]][2] + |
|
298 |
CORNERS[map[2]][2] + |
|
299 |
CORNERS[map[3]][2] + |
|
300 |
CORNERS[map[4]][2] ; |
|
236 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
301 | 237 |
|
302 |
mCenterCoords[center][0] = x/5; |
|
303 |
mCenterCoords[center][1] = y/5; |
|
304 |
mCenterCoords[center][2] = z/5; |
|
305 |
} |
|
238 |
void initializeQuats() |
|
239 |
{ |
|
240 |
mQuats = new Static4D[] |
|
241 |
{ |
|
242 |
new Static4D( 0.0f, 0.0f, 0.0f, 1.0f ), //0 |
|
243 |
new Static4D( 1.0f, 0.0f, 0.0f, 0.0f ), |
|
244 |
new Static4D( 0.0f, 1.0f, 0.0f, 0.0f ), |
|
245 |
new Static4D( 0.0f, 0.0f, 1.0f, 0.0f ), |
|
246 |
|
|
247 |
new Static4D( 0.5f, 0.5f, 0.5f, 0.5f ), //4 |
|
248 |
new Static4D( 0.5f, 0.5f, -0.5f, 0.5f ), |
|
249 |
new Static4D( 0.5f, -0.5f, 0.5f, 0.5f ), |
|
250 |
new Static4D( 0.5f, -0.5f, -0.5f, 0.5f ), |
|
251 |
new Static4D( -0.5f, 0.5f, 0.5f, 0.5f ), |
|
252 |
new Static4D( -0.5f, 0.5f, -0.5f, 0.5f ), |
|
253 |
new Static4D( -0.5f, -0.5f, 0.5f, 0.5f ), |
|
254 |
new Static4D( -0.5f, -0.5f, -0.5f, 0.5f ), |
|
255 |
|
|
256 |
new Static4D( 0.5f, SIN54, SIN18, 0.0f ), // 12 |
|
257 |
new Static4D( 0.5f, SIN54,-SIN18, 0.0f ), |
|
258 |
new Static4D( 0.5f,-SIN54, SIN18, 0.0f ), |
|
259 |
new Static4D( 0.5f,-SIN54,-SIN18, 0.0f ), |
|
260 |
new Static4D( SIN18, 0.5f, SIN54, 0.0f ), |
|
261 |
new Static4D( SIN18, 0.5f,-SIN54, 0.0f ), |
|
262 |
new Static4D(-SIN18, 0.5f, SIN54, 0.0f ), |
|
263 |
new Static4D(-SIN18, 0.5f,-SIN54, 0.0f ), |
|
264 |
new Static4D( SIN54, SIN18, 0.5f, 0.0f ), |
|
265 |
new Static4D( SIN54,-SIN18, 0.5f, 0.0f ), |
|
266 |
new Static4D(-SIN54, SIN18, 0.5f, 0.0f ), |
|
267 |
new Static4D(-SIN54,-SIN18, 0.5f, 0.0f ), |
|
268 |
|
|
269 |
new Static4D( 0.0f, SIN18, SIN54, 0.5f ), //24 |
|
270 |
new Static4D( 0.0f, SIN18,-SIN54, 0.5f ), |
|
271 |
new Static4D( 0.0f,-SIN18, SIN54, 0.5f ), |
|
272 |
new Static4D( 0.0f,-SIN18,-SIN54, 0.5f ), |
|
273 |
new Static4D( SIN18, SIN54, 0.0f, 0.5f ), |
|
274 |
new Static4D( SIN18,-SIN54, 0.0f, 0.5f ), |
|
275 |
new Static4D(-SIN18, SIN54, 0.0f, 0.5f ), |
|
276 |
new Static4D(-SIN18,-SIN54, 0.0f, 0.5f ), |
|
277 |
new Static4D( SIN54, 0.0f, SIN18, 0.5f ), |
|
278 |
new Static4D( SIN54, 0.0f,-SIN18, 0.5f ), |
|
279 |
new Static4D(-SIN54, 0.0f, SIN18, 0.5f ), |
|
280 |
new Static4D(-SIN54, 0.0f,-SIN18, 0.5f ), |
|
281 |
|
|
282 |
new Static4D( 0.0f, SIN54, 0.5f, SIN18 ), //36 |
|
283 |
new Static4D( 0.0f, SIN54, -0.5f, SIN18 ), |
|
284 |
new Static4D( 0.0f,-SIN54, 0.5f, SIN18 ), |
|
285 |
new Static4D( 0.0f,-SIN54, -0.5f, SIN18 ), |
|
286 |
new Static4D( 0.5f, 0.0f, SIN54, SIN18 ), |
|
287 |
new Static4D( 0.5f, 0.0f,-SIN54, SIN18 ), |
|
288 |
new Static4D( -0.5f, 0.0f, SIN54, SIN18 ), |
|
289 |
new Static4D( -0.5f, 0.0f,-SIN54, SIN18 ), |
|
290 |
new Static4D( SIN54, 0.5f, 0.0f, SIN18 ), |
|
291 |
new Static4D( SIN54, -0.5f, 0.0f, SIN18 ), |
|
292 |
new Static4D(-SIN54, 0.5f, 0.0f, SIN18 ), |
|
293 |
new Static4D(-SIN54, -0.5f, 0.0f, SIN18 ), |
|
294 |
|
|
295 |
new Static4D( 0.0f, 0.5f, SIN18, SIN54 ), //48 |
|
296 |
new Static4D( 0.0f, 0.5f,-SIN18, SIN54 ), |
|
297 |
new Static4D( 0.0f, -0.5f, SIN18, SIN54 ), |
|
298 |
new Static4D( 0.0f, -0.5f,-SIN18, SIN54 ), |
|
299 |
new Static4D( 0.5f, SIN18, 0.0f, SIN54 ), |
|
300 |
new Static4D( 0.5f,-SIN18, 0.0f, SIN54 ), |
|
301 |
new Static4D( -0.5f, SIN18, 0.0f, SIN54 ), |
|
302 |
new Static4D( -0.5f,-SIN18, 0.0f, SIN54 ), |
|
303 |
new Static4D( SIN18, 0.0f, 0.5f, SIN54 ), |
|
304 |
new Static4D( SIN18, 0.0f, -0.5f, SIN54 ), |
|
305 |
new Static4D(-SIN18, 0.0f, 0.5f, SIN54 ), |
|
306 |
new Static4D(-SIN18, 0.0f, -0.5f, SIN54 ), |
|
307 |
}; |
|
306 | 308 |
} |
307 | 309 |
|
308 |
static final Static4D[] mBasicCornerV, mCurrCornerV; |
|
310 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
311 |
// Coordinates of all 20 corners of a Minx |
|
309 | 312 |
|
310 |
static
|
|
313 |
void initializeCorners()
|
|
311 | 314 |
{ |
312 |
mBasicCornerV = new Static4D[3]; |
|
313 |
mCurrCornerV = new Static4D[3]; |
|
314 |
|
|
315 |
mBasicCornerV[0] = new Static4D( (SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f ); |
|
316 |
mBasicCornerV[1] = new Static4D(-(SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f ); |
|
317 |
mBasicCornerV[2] = new Static4D( 0, -0.500f, 0.0f, 0.0f ); |
|
315 |
mCorners = new float[][] |
|
316 |
{ |
|
317 |
{ 0.0f, 0.5f, C2}, |
|
318 |
{ 0.0f, 0.5f, -C2}, |
|
319 |
{ 0.0f, -0.5f, C2}, |
|
320 |
{ 0.0f, -0.5f, -C2}, |
|
321 |
{ C2, 0.0f, 0.5f}, |
|
322 |
{ C2, 0.0f, -0.5f}, |
|
323 |
{ -C2, 0.0f, 0.5f}, |
|
324 |
{ -C2, 0.0f, -0.5f}, |
|
325 |
{ 0.5f, C2, 0.0f}, |
|
326 |
{ 0.5f, -C2, 0.0f}, |
|
327 |
{ -0.5f, C2, 0.0f}, |
|
328 |
{ -0.5f, -C2, 0.0f}, |
|
329 |
{ SIN54, SIN54, SIN54}, |
|
330 |
{ SIN54, SIN54,-SIN54}, |
|
331 |
{ SIN54,-SIN54, SIN54}, |
|
332 |
{ SIN54,-SIN54,-SIN54}, |
|
333 |
{-SIN54, SIN54, SIN54}, |
|
334 |
{-SIN54, SIN54,-SIN54}, |
|
335 |
{-SIN54,-SIN54, SIN54}, |
|
336 |
{-SIN54,-SIN54,-SIN54}, |
|
337 |
}; |
|
318 | 338 |
} |
319 | 339 |
|
320 |
private int mCurrState; |
|
321 |
private int mIndexExcluded; |
|
322 |
private ScrambleState[] mStates; |
|
323 |
private int[][] mScrambleTable; |
|
324 |
private int[] mNumOccurences; |
|
325 |
|
|
326 | 340 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
327 | 341 |
|
328 |
TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture, MeshSquare mesh, |
|
329 |
DistortedEffects effects, int[][] moves, ObjectList obj, Resources res, int scrWidth) |
|
342 |
void initializeCenterCoords() |
|
330 | 343 |
{ |
331 |
super(numLayers, realSize, quat, texture, mesh, effects, moves, obj, res, scrWidth); |
|
344 |
if( mCorners==null ) initializeCorners(); |
|
345 |
if( mCenterMap==null ) initializeCenterMap(); |
|
332 | 346 |
|
333 |
initializeScrambleStates(numLayers); |
|
347 |
mCenterCoords = new float[NUM_CENTERS][3]; |
|
348 |
|
|
349 |
for(int center=0; center<NUM_CENTERS; center++) |
|
350 |
{ |
|
351 |
int[] map = mCenterMap[center]; |
|
352 |
|
|
353 |
float x = mCorners[map[0]][0] + |
|
354 |
mCorners[map[1]][0] + |
|
355 |
mCorners[map[2]][0] + |
|
356 |
mCorners[map[3]][0] + |
|
357 |
mCorners[map[4]][0] ; |
|
358 |
|
|
359 |
float y = mCorners[map[0]][1] + |
|
360 |
mCorners[map[1]][1] + |
|
361 |
mCorners[map[2]][1] + |
|
362 |
mCorners[map[3]][1] + |
|
363 |
mCorners[map[4]][1] ; |
|
364 |
|
|
365 |
float z = mCorners[map[0]][2] + |
|
366 |
mCorners[map[1]][2] + |
|
367 |
mCorners[map[2]][2] + |
|
368 |
mCorners[map[3]][2] + |
|
369 |
mCorners[map[4]][2] ; |
|
370 |
|
|
371 |
mCenterCoords[center][0] = x/5; |
|
372 |
mCenterCoords[center][1] = y/5; |
|
373 |
mCenterCoords[center][2] = z/5; |
|
374 |
} |
|
334 | 375 |
} |
335 | 376 |
|
336 | 377 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
463 | 504 |
|
464 | 505 |
int[] getSolvedQuats(int cubit, int numLayers) |
465 | 506 |
{ |
507 |
if( mQuats==null ) initializeQuats(); |
|
508 |
if( mFaceMap==null ) mFaceMap = new int[] {8,10,3,7,1,11,9,2,4,0,5,6}; |
|
466 | 509 |
int status = retCubitSolvedStatus(cubit,numLayers); |
467 |
return status<0 ? null : buildSolvedQuats(MovementMinx.FACE_AXIS[mFaceMap[status]],QUATS);
|
|
510 |
return status<0 ? null : buildSolvedQuats(MovementMinx.FACE_AXIS[mFaceMap[status]],mQuats);
|
|
468 | 511 |
} |
469 | 512 |
|
470 | 513 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
471 | 514 |
|
472 | 515 |
Static4D[] getQuats() |
473 | 516 |
{ |
474 |
return QUATS; |
|
517 |
if( mQuats==null ) initializeQuats(); |
|
518 |
return mQuats; |
|
475 | 519 |
} |
476 | 520 |
|
477 | 521 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
569 | 613 |
|
570 | 614 |
public int[] getBasicAngle() |
571 | 615 |
{ |
572 |
return BASIC_ANGLE; |
|
616 |
if( mBasicAngle ==null ) mBasicAngle = new int[] { 5,5,5,5,5,5 }; |
|
617 |
return mBasicAngle; |
|
573 | 618 |
} |
574 | 619 |
} |
src/main/java/org/distorted/objects/TwistyObject.java | ||
---|---|---|
271 | 271 |
int sizeIndex = ObjectList.getSizeIndex(list.ordinal(),mNumLayers); |
272 | 272 |
int resourceID= list.getResourceIDs()[sizeIndex]; |
273 | 273 |
|
274 |
if( resourceID!=0 ) |
|
274 |
if( false ) // resourceID!=0 )
|
|
275 | 275 |
{ |
276 | 276 |
InputStream is = res.openRawResource(resourceID); |
277 | 277 |
DataInputStream dos = new DataInputStream(is); |
Also available in: Unified diff
Remove statics from the Minx classes.