Revision ef018c1b
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objects/TwistyMirror.java | ||
---|---|---|
49 | 49 |
|
50 | 50 |
private ScrambleState[] mStates; |
51 | 51 |
private Static4D[] mQuats; |
52 |
private float[][] mCuts; |
|
53 |
private boolean[][] mLayerRotatable; |
|
52 | 54 |
private int[] mBasicAngle; |
53 | 55 |
private ObjectSticker[] mStickers; |
54 | 56 |
private float[][] mPositions; |
... | ... | |
591 | 593 |
|
592 | 594 |
float[][] getCuts(int numLayers) |
593 | 595 |
{ |
594 |
float[][] cuts = new float[3][numLayers-1]; |
|
595 |
|
|
596 |
for(int i=0; i<numLayers-1; i++) |
|
596 |
if( mCuts==null ) |
|
597 | 597 |
{ |
598 |
float cut = (2-numLayers)*0.5f + i; |
|
599 |
cuts[0][i] = cut; |
|
600 |
cuts[1][i] = cut; |
|
601 |
cuts[2][i] = cut; |
|
598 |
mCuts = new float[3][numLayers-1]; |
|
599 |
|
|
600 |
for(int i=0; i<numLayers-1; i++) |
|
601 |
{ |
|
602 |
float cut = (2-numLayers)*0.5f + i; |
|
603 |
mCuts[0][i] = cut; |
|
604 |
mCuts[1][i] = cut; |
|
605 |
mCuts[2][i] = cut; |
|
606 |
} |
|
602 | 607 |
} |
603 | 608 |
|
604 |
return cuts; |
|
609 |
return mCuts; |
|
610 |
} |
|
611 |
|
|
612 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
613 |
|
|
614 |
private void getLayerRotatable(int numLayers) |
|
615 |
{ |
|
616 |
if( mLayerRotatable==null ) |
|
617 |
{ |
|
618 |
int numAxis = ROT_AXIS.length; |
|
619 |
boolean[] tmp = new boolean[numLayers]; |
|
620 |
for(int i=0; i<numLayers; i++) tmp[i] = true; |
|
621 |
mLayerRotatable = new boolean[numAxis][]; |
|
622 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
623 |
} |
|
605 | 624 |
} |
606 | 625 |
|
607 | 626 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
630 | 649 |
|
631 | 650 |
public Movement getMovement() |
632 | 651 |
{ |
633 |
if( mMovement==null ) mMovement = new MovementCube(); |
|
652 |
if( mMovement==null ) |
|
653 |
{ |
|
654 |
int numLayers = getNumLayers(); |
|
655 |
if( mCuts==null ) getCuts(numLayers); |
|
656 |
getLayerRotatable(numLayers); |
|
657 |
|
|
658 |
mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers); |
|
659 |
} |
|
634 | 660 |
return mMovement; |
635 | 661 |
} |
636 | 662 |
|
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.