Revision 9ba7f3f6
Added by Leszek Koltunski over 1 year ago
src/main/java/org/distorted/objectlib/objects/TwistyPyraminx.java | ||
---|---|---|
25 | 25 |
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron; |
26 | 26 |
import org.distorted.objectlib.main.ObjectType; |
27 | 27 |
import org.distorted.objectlib.helpers.ObjectShape; |
28 |
import org.distorted.objectlib.scrambling.ScrambleState; |
|
29 | 28 |
import org.distorted.objectlib.shape.ShapeTetrahedron; |
30 | 29 |
|
31 | 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
40 | 39 |
new Static3D(-SQ6/3, SQ3/3, 0), |
41 | 40 |
}; |
42 | 41 |
|
43 |
private ScrambleState[] mStates;
|
|
42 |
private int[][] mEdges;
|
|
44 | 43 |
private int[][] mBasicAngle; |
45 | 44 |
private float[][] mCuts; |
46 | 45 |
|
... | ... | |
53 | 52 |
|
54 | 53 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
55 | 54 |
|
56 |
public ScrambleState[] getScrambleStates()
|
|
55 |
public int[][] getScrambleEdges()
|
|
57 | 56 |
{ |
58 |
if( mStates==null )
|
|
57 |
if( mEdges==null )
|
|
59 | 58 |
{ |
60 |
int[] numLayers = getNumLayers(); |
|
61 |
initializeScrambleStates(numLayers[0]); |
|
59 |
int numLayers = getNumLayers()[0]; |
|
60 |
mEdges = new int[numLayers][]; |
|
61 |
for(int i=0; i<numLayers-1; i++) mEdges[i] = generateEdge(numLayers-1-i,numLayers); |
|
62 |
mEdges[numLayers-1] = generateEdge(numLayers-2,numLayers); |
|
62 | 63 |
} |
63 | 64 |
|
64 |
return mStates;
|
|
65 |
return mEdges;
|
|
65 | 66 |
} |
66 | 67 |
|
67 | 68 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
68 | 69 |
|
69 |
private int[][] generateState(int start, int end)
|
|
70 |
private int[] generateEdge(int end, int numLayers)
|
|
70 | 71 |
{ |
71 |
int len = end-start+1; |
|
72 |
int[] tmp = new int[6*len]; |
|
72 |
int[] ret = new int[8*end]; |
|
73 | 73 |
|
74 |
for(int i=0; i<len; i++)
|
|
74 |
for(int i=0; i<end; i++)
|
|
75 | 75 |
{ |
76 |
tmp[6*i ] = start; |
|
77 |
tmp[6*i+1] = -1; |
|
78 |
tmp[6*i+2] = start; |
|
79 |
tmp[6*i+3] = start; |
|
80 |
tmp[6*i+4] = 1; |
|
81 |
tmp[6*i+5] = start; |
|
82 |
|
|
83 |
start++; |
|
76 |
int s = ((i/2)%numLayers); |
|
77 |
|
|
78 |
ret[ 2*i ] = i; |
|
79 |
ret[ 2*i+1] = s; |
|
80 |
ret[ end+2*i ] = i; |
|
81 |
ret[ end+2*i+1] = s; |
|
82 |
ret[2*end+2*i ] = i; |
|
83 |
ret[2*end+2*i+1] = s; |
|
84 |
ret[3*end+2*i ] = i; |
|
85 |
ret[3*end+2*i+1] = s; |
|
84 | 86 |
} |
85 | 87 |
|
86 |
return new int[][] {tmp,tmp,tmp,tmp}; |
|
87 |
} |
|
88 |
|
|
89 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
90 |
|
|
91 |
private void initializeScrambleStates(int numLayers) |
|
92 |
{ |
|
93 |
mStates = new ScrambleState[numLayers]; |
|
94 |
|
|
95 |
for(int i=0; i<numLayers-1; i++) |
|
96 |
{ |
|
97 |
mStates[i] = new ScrambleState( generateState(0,numLayers-1-i) ); |
|
98 |
} |
|
99 |
|
|
100 |
mStates[numLayers-1] = new ScrambleState( generateState(1,numLayers-2) ); |
|
88 |
return ret; |
|
101 | 89 |
} |
102 | 90 |
|
103 | 91 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Move scrambling to a new model where there are spearete scrambling 'algorithms' and 'edges' of the scrambling graph.
Now each edge can contain a whole algorithm, i.e. a sequence of moves leading from state to state, which permits construction of scrambling for more complicated bandaged objects such as the AI cube.
Unchecked as of yet, probably still a lot of bugs.