Revision ef018c1b
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objects/TwistyBandagedAbstract.java | ||
---|---|---|
59 | 59 |
private Static4D[] mInitQuats; |
60 | 60 |
private int[][] mAxisMap; |
61 | 61 |
private int[][] mFaceMap; |
62 |
private float[][] mCuts; |
|
63 |
private boolean[][] mLayerRotatable; |
|
62 | 64 |
private Movement mMovement; |
63 | 65 |
ScrambleState[] mStates; |
64 | 66 |
float[][] POSITIONS; |
... | ... | |
313 | 315 |
|
314 | 316 |
float[][] getCuts(int numLayers) |
315 | 317 |
{ |
316 |
float[][] cuts = new float[3][numLayers-1];
|
|
318 |
if( numLayers<2 ) return null;
|
|
317 | 319 |
|
318 |
for(int i=0; i<numLayers-1; i++)
|
|
320 |
if( mCuts==null )
|
|
319 | 321 |
{ |
320 |
float cut = (2-numLayers)*0.5f + i; |
|
321 |
cuts[0][i] = cut; |
|
322 |
cuts[1][i] = cut; |
|
323 |
cuts[2][i] = cut; |
|
322 |
mCuts = new float[3][numLayers-1]; |
|
323 |
|
|
324 |
for(int i=0; i<numLayers-1; i++) |
|
325 |
{ |
|
326 |
float cut = (2-numLayers)*0.5f + i; |
|
327 |
mCuts[0][i] = cut; |
|
328 |
mCuts[1][i] = cut; |
|
329 |
mCuts[2][i] = cut; |
|
330 |
} |
|
324 | 331 |
} |
325 | 332 |
|
326 |
return cuts; |
|
333 |
return mCuts; |
|
334 |
} |
|
335 |
|
|
336 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
337 |
|
|
338 |
private void getLayerRotatable(int numLayers) |
|
339 |
{ |
|
340 |
if( mLayerRotatable==null ) |
|
341 |
{ |
|
342 |
int numAxis = ROT_AXIS.length; |
|
343 |
boolean[] tmp = new boolean[numLayers]; |
|
344 |
for(int i=0; i<numLayers; i++) tmp[i] = true; |
|
345 |
mLayerRotatable = new boolean[numAxis][]; |
|
346 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
347 |
} |
|
327 | 348 |
} |
328 | 349 |
|
329 | 350 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
431 | 452 |
|
432 | 453 |
public Movement getMovement() |
433 | 454 |
{ |
434 |
if( mMovement==null ) mMovement = new MovementCube(); |
|
455 |
if( mMovement==null ) |
|
456 |
{ |
|
457 |
int numLayers = getNumLayers(); |
|
458 |
if( mCuts==null ) getCuts(numLayers); |
|
459 |
getLayerRotatable(numLayers); |
|
460 |
|
|
461 |
mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers); |
|
462 |
} |
|
435 | 463 |
return mMovement; |
436 | 464 |
} |
437 | 465 |
|
Also available in: Unified diff
Abstract the next function, computeRowFromOffset(), out of the individual Movement classes.
Still two issues:
1) mysterious 1.5 multiplier in Movement12
2) in Movement8, moving the offset works only if the rotAxis are face-turning, i.e. they connect the centers of the opposing faces of the octahedron.