Revision ef018c1b
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objects/TwistyCube.java | ||
---|---|---|
44 | 44 |
|
45 | 45 |
private ScrambleState[] mStates; |
46 | 46 |
private Static4D[] mQuats; |
47 |
private float[][] mCuts; |
|
48 |
private boolean[][] mLayerRotatable; |
|
47 | 49 |
private int[] mBasicAngle; |
48 | 50 |
private ObjectSticker[] mStickers; |
49 | 51 |
private Movement mMovement; |
... | ... | |
275 | 277 |
|
276 | 278 |
float[][] getCuts(int numLayers) |
277 | 279 |
{ |
278 |
float[][] cuts = new float[3][numLayers-1];
|
|
280 |
if( numLayers<2 ) return null;
|
|
279 | 281 |
|
280 |
for(int i=0; i<numLayers-1; i++)
|
|
282 |
if( mCuts==null )
|
|
281 | 283 |
{ |
282 |
float cut = (2-numLayers)*0.5f + i; |
|
283 |
cuts[0][i] = cut; |
|
284 |
cuts[1][i] = cut; |
|
285 |
cuts[2][i] = cut; |
|
284 |
mCuts = new float[3][numLayers-1]; |
|
285 |
|
|
286 |
for(int i=0; i<numLayers-1; i++) |
|
287 |
{ |
|
288 |
float cut = (2-numLayers)*0.5f + i; |
|
289 |
mCuts[0][i] = cut; |
|
290 |
mCuts[1][i] = cut; |
|
291 |
mCuts[2][i] = cut; |
|
292 |
} |
|
286 | 293 |
} |
287 | 294 |
|
288 |
return cuts; |
|
295 |
return mCuts; |
|
296 |
} |
|
297 |
|
|
298 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
299 |
|
|
300 |
private void getLayerRotatable(int numLayers) |
|
301 |
{ |
|
302 |
if( mLayerRotatable==null ) |
|
303 |
{ |
|
304 |
int numAxis = ROT_AXIS.length; |
|
305 |
boolean[] tmp = new boolean[numLayers]; |
|
306 |
for(int i=0; i<numLayers; i++) tmp[i] = true; |
|
307 |
mLayerRotatable = new boolean[numAxis][]; |
|
308 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
309 |
} |
|
289 | 310 |
} |
290 | 311 |
|
291 | 312 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
328 | 349 |
|
329 | 350 |
public Movement getMovement() |
330 | 351 |
{ |
331 |
if( mMovement==null ) mMovement = new MovementCube(); |
|
352 |
if( mMovement==null ) |
|
353 |
{ |
|
354 |
int numLayers = getNumLayers(); |
|
355 |
if( mCuts==null ) getCuts(numLayers); |
|
356 |
getLayerRotatable(numLayers); |
|
357 |
|
|
358 |
mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers); |
|
359 |
} |
|
332 | 360 |
return mMovement; |
333 | 361 |
} |
334 | 362 |
|
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.