Revision e01fa67a
Added by Leszek Koltunski over 4 years ago
| src/main/java/org/distorted/objects/TwistyIvy.java | ||
|---|---|---|
| 37 | 37 |
|
| 38 | 38 |
public class TwistyIvy extends TwistyObject |
| 39 | 39 |
{
|
| 40 |
public static final float IVY_D = 0.003f; |
|
| 41 |
private static final int IVY_N = 8; |
|
| 42 |
|
|
| 43 |
private static final int FACES_PER_CUBIT =6; |
|
| 44 |
|
|
| 45 | 40 |
// the four rotation axis of a RubikIvy. Must be normalized. |
| 46 | 41 |
static final Static3D[] ROT_AXIS = new Static3D[] |
| 47 | 42 |
{
|
| ... | ... | |
| 51 | 46 |
new Static3D(+SQ3/3,-SQ3/3,-SQ3/3) |
| 52 | 47 |
}; |
| 53 | 48 |
|
| 54 |
private static final int[] BASIC_ANGLE = new int[] { 3,3,3,3 };
|
|
| 55 |
|
|
| 56 | 49 |
private static final int[] FACE_COLORS = new int[] |
| 57 | 50 |
{
|
| 58 | 51 |
COLOR_YELLOW, COLOR_WHITE, |
| ... | ... | |
| 60 | 53 |
COLOR_RED , COLOR_ORANGE |
| 61 | 54 |
}; |
| 62 | 55 |
|
| 63 |
// All legal rotation quats of a RubikIvy |
|
| 64 |
private static final Static4D[] QUATS = new Static4D[] |
|
| 65 |
{
|
|
| 66 |
new Static4D( 0.0f, 0.0f, 0.0f, 1.0f ), |
|
| 67 |
new Static4D( 1.0f, 0.0f, 0.0f, 0.0f ), |
|
| 68 |
new Static4D( 0.0f, 1.0f, 0.0f, 0.0f ), |
|
| 69 |
new Static4D( 0.0f, 0.0f, 1.0f, 0.0f ), |
|
| 70 |
|
|
| 71 |
new Static4D( 0.5f, 0.5f, 0.5f, 0.5f ), |
|
| 72 |
new Static4D( 0.5f, 0.5f, 0.5f, -0.5f ), |
|
| 73 |
new Static4D( 0.5f, 0.5f, -0.5f, 0.5f ), |
|
| 74 |
new Static4D( 0.5f, 0.5f, -0.5f, -0.5f ), |
|
| 75 |
new Static4D( 0.5f, -0.5f, 0.5f, 0.5f ), |
|
| 76 |
new Static4D( 0.5f, -0.5f, 0.5f, -0.5f ), |
|
| 77 |
new Static4D( 0.5f, -0.5f, -0.5f, 0.5f ), |
|
| 78 |
new Static4D( 0.5f, -0.5f, -0.5f, -0.5f ) |
|
| 79 |
}; |
|
| 80 |
|
|
| 81 |
private static final int[][] mFaceMap = |
|
| 82 |
{
|
|
| 83 |
{ 4, 0, 2, 12,12,12 },
|
|
| 84 |
{ 5, 1, 2, 12,12,12 },
|
|
| 85 |
{ 4, 1, 3, 12,12,12 },
|
|
| 86 |
{ 5, 0, 3, 12,12,12 },
|
|
| 87 |
|
|
| 88 |
{ 6, 12,12,12,12,12 },
|
|
| 89 |
{ 7, 12,12,12,12,12 },
|
|
| 90 |
{ 8, 12,12,12,12,12 },
|
|
| 91 |
{ 9, 12,12,12,12,12 },
|
|
| 92 |
{ 10, 12,12,12,12,12 },
|
|
| 93 |
{ 11, 12,12,12,12,12 },
|
|
| 94 |
}; |
|
| 95 |
|
|
| 96 |
private static final ObjectSticker[] mStickers; |
|
| 97 |
|
|
| 98 |
private static final float[][] STICKERS = new float[][] |
|
| 99 |
{
|
|
| 100 |
{ 0.29258922f, -0.5f, 0.29258922f, 0.29258922f, -0.5f, 0.29258922f },
|
|
| 101 |
{ -0.5f, 0.5f, 0.5f, -0.5f }
|
|
| 102 |
}; |
|
| 103 |
private static final int NUM_STICKERS = STICKERS.length; |
|
| 104 |
|
|
| 105 |
static |
|
| 106 |
{
|
|
| 107 |
mStickers = new ObjectSticker[NUM_STICKERS]; |
|
| 108 |
|
|
| 109 |
float D = (float)(Math.PI/4); |
|
| 110 |
final float[][] angles = { { 0,0,D },{ D,D } };
|
|
| 111 |
final float[][] radii = { { 0,0.04f,0 },{ 0.06f,0.06f } };
|
|
| 112 |
final float[] strokes = { 0.03f, 0.08f };
|
|
| 113 |
|
|
| 114 |
for(int s=0; s<NUM_STICKERS; s++) |
|
| 115 |
{
|
|
| 116 |
mStickers[s] = new ObjectSticker(STICKERS[s], angles[s],radii[s],strokes[s]); |
|
| 117 |
} |
|
| 118 |
} |
|
| 56 |
private static final int NUM_STICKERS = 2; |
|
| 57 |
public static final float IVY_D = 0.003f; |
|
| 58 |
private static final int IVY_N = 8; |
|
| 59 |
private static final int FACES_PER_CUBIT =6; |
|
| 119 | 60 |
|
| 120 | 61 |
private int mCurrState; |
| 121 | 62 |
private int mIndexExcluded; |
| 122 | 63 |
private final ScrambleState[] mStates; |
| 123 | 64 |
private int[][] mScrambleTable; |
| 124 | 65 |
private int[] mNumOccurences; |
| 66 |
private int[] mBasicAngle; |
|
| 67 |
private Static4D[] mQuats; |
|
| 68 |
private int[][] mFaceMap; |
|
| 69 |
private ObjectSticker[] mStickers; |
|
| 125 | 70 |
|
| 126 | 71 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 127 | 72 |
|
| ... | ... | |
| 138 | 83 |
}; |
| 139 | 84 |
} |
| 140 | 85 |
|
| 86 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 87 |
|
|
| 88 |
private void initializeQuats() |
|
| 89 |
{
|
|
| 90 |
mQuats = new Static4D[] |
|
| 91 |
{
|
|
| 92 |
new Static4D( 0.0f, 0.0f, 0.0f, 1.0f ), |
|
| 93 |
new Static4D( 1.0f, 0.0f, 0.0f, 0.0f ), |
|
| 94 |
new Static4D( 0.0f, 1.0f, 0.0f, 0.0f ), |
|
| 95 |
new Static4D( 0.0f, 0.0f, 1.0f, 0.0f ), |
|
| 96 |
|
|
| 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 |
new Static4D( 0.5f, -0.5f, -0.5f, 0.5f ), |
|
| 104 |
new Static4D( 0.5f, -0.5f, -0.5f, -0.5f ) |
|
| 105 |
}; |
|
| 106 |
} |
|
| 107 |
|
|
| 141 | 108 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 142 | 109 |
|
| 143 | 110 |
int[] getSolvedQuats(int cubit, int numLayers) |
| 144 | 111 |
{
|
| 112 |
if( mQuats==null ) initializeQuats(); |
|
| 145 | 113 |
int status = retCubitSolvedStatus(cubit,numLayers); |
| 146 |
return status<0 ? null : buildSolvedQuats(MovementIvy.FACE_AXIS[status],QUATS);
|
|
| 114 |
return status<0 ? null : buildSolvedQuats(MovementIvy.FACE_AXIS[status],mQuats);
|
|
| 147 | 115 |
} |
| 148 | 116 |
|
| 149 | 117 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 157 | 125 |
|
| 158 | 126 |
Static4D[] getQuats() |
| 159 | 127 |
{
|
| 160 |
return QUATS; |
|
| 128 |
if( mQuats==null ) initializeQuats(); |
|
| 129 |
return mQuats; |
|
| 161 | 130 |
} |
| 162 | 131 |
|
| 163 | 132 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 387 | 356 |
|
| 388 | 357 |
Static4D getQuat(int cubit, int numLayers) |
| 389 | 358 |
{
|
| 359 |
if( mQuats==null ) initializeQuats(); |
|
| 360 |
|
|
| 390 | 361 |
switch(cubit) |
| 391 | 362 |
{
|
| 392 |
case 0: return QUATS[0];
|
|
| 393 |
case 1: return QUATS[2];
|
|
| 394 |
case 2: return QUATS[3];
|
|
| 395 |
case 3: return QUATS[1];
|
|
| 396 |
|
|
| 397 |
case 4: return QUATS[8];
|
|
| 398 |
case 5: return QUATS[11];
|
|
| 399 |
case 6: return QUATS[10];
|
|
| 400 |
case 7: return QUATS[9];
|
|
| 401 |
case 8: return QUATS[0];
|
|
| 402 |
case 9: return QUATS[2];
|
|
| 363 |
case 0: return mQuats[0];
|
|
| 364 |
case 1: return mQuats[2];
|
|
| 365 |
case 2: return mQuats[3];
|
|
| 366 |
case 3: return mQuats[1];
|
|
| 367 |
|
|
| 368 |
case 4: return mQuats[8];
|
|
| 369 |
case 5: return mQuats[11];
|
|
| 370 |
case 6: return mQuats[10];
|
|
| 371 |
case 7: return mQuats[9];
|
|
| 372 |
case 8: return mQuats[0];
|
|
| 373 |
case 9: return mQuats[2];
|
|
| 403 | 374 |
} |
| 404 | 375 |
|
| 405 |
return QUATS[0];
|
|
| 376 |
return mQuats[0];
|
|
| 406 | 377 |
} |
| 407 | 378 |
|
| 408 | 379 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 423 | 394 |
|
| 424 | 395 |
int getFaceColor(int cubit, int cubitface, int numLayers) |
| 425 | 396 |
{
|
| 397 |
if( mFaceMap==null ) |
|
| 398 |
{
|
|
| 399 |
mFaceMap = new int[][] |
|
| 400 |
{
|
|
| 401 |
{ 4, 0, 2, 12,12,12 },
|
|
| 402 |
{ 5, 1, 2, 12,12,12 },
|
|
| 403 |
{ 4, 1, 3, 12,12,12 },
|
|
| 404 |
{ 5, 0, 3, 12,12,12 },
|
|
| 405 |
|
|
| 406 |
{ 6, 12,12,12,12,12 },
|
|
| 407 |
{ 7, 12,12,12,12,12 },
|
|
| 408 |
{ 8, 12,12,12,12,12 },
|
|
| 409 |
{ 9, 12,12,12,12,12 },
|
|
| 410 |
{ 10, 12,12,12,12,12 },
|
|
| 411 |
{ 11, 12,12,12,12,12 },
|
|
| 412 |
}; |
|
| 413 |
} |
|
| 414 |
|
|
| 426 | 415 |
return mFaceMap[cubit][cubitface]; |
| 427 | 416 |
} |
| 428 | 417 |
|
| ... | ... | |
| 437 | 426 |
|
| 438 | 427 |
ObjectSticker retSticker(int face) |
| 439 | 428 |
{
|
| 429 |
if( mStickers==null ) |
|
| 430 |
{
|
|
| 431 |
float[][] STICKERS = new float[][] { { 0.29258922f, -0.5f, 0.29258922f, 0.29258922f, -0.5f, 0.29258922f }, { -0.5f, 0.5f, 0.5f, -0.5f } };
|
|
| 432 |
mStickers = new ObjectSticker[NUM_STICKERS]; |
|
| 433 |
float D = (float)(Math.PI/4); |
|
| 434 |
final float[][] angles = { { 0,0,D },{ D,D } };
|
|
| 435 |
final float[][] radii = { { 0,0.04f,0 },{ 0.06f,0.06f } };
|
|
| 436 |
final float[] strokes = { 0.03f, 0.08f };
|
|
| 437 |
for(int s=0; s<NUM_STICKERS; s++) mStickers[s] = new ObjectSticker(STICKERS[s], angles[s],radii[s],strokes[s]); |
|
| 438 |
} |
|
| 439 |
|
|
| 440 | 440 |
return mStickers[face/NUM_FACES]; |
| 441 | 441 |
} |
| 442 | 442 |
|
| ... | ... | |
| 507 | 507 |
|
| 508 | 508 |
public int[] getBasicAngle() |
| 509 | 509 |
{
|
| 510 |
return BASIC_ANGLE; |
|
| 510 |
if( mBasicAngle ==null ) mBasicAngle = new int[] { 3,3,3,3 };
|
|
| 511 |
return mBasicAngle; |
|
| 511 | 512 |
} |
| 512 | 513 |
|
| 513 | 514 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Remove statics from the Ivy class.