Revision 59c20632
Added by Leszek Koltunski over 2 years ago
src/main/java/org/distorted/objectlib/main/Movement.java | ||
---|---|---|
34 | 34 |
// each face is split into several parts by lines coming from its center to the vertices |
35 | 35 |
public static final int TYPE_SPLIT_CORNER = 2; |
36 | 36 |
|
37 |
public static final int MOVEMENT_HEXAHEDRON = 0; |
|
38 |
public static final int MOVEMENT_TETRAHEDRON = 1; |
|
39 |
public static final int MOVEMENT_OCTAHEDRON = 2; |
|
40 |
public static final int MOVEMENT_DODECAHEDRON = 3; |
|
41 |
public static final int MOVEMENT_SHAPECHANGE = 4; |
|
42 |
|
|
37 | 43 |
static final float SQ3 = (float)Math.sqrt(3); |
38 | 44 |
static final float SQ6 = (float)Math.sqrt(6); |
39 | 45 |
|
src/main/java/org/distorted/objectlib/main/ObjectType.java | ||
---|---|---|
122 | 122 |
return -1; |
123 | 123 |
} |
124 | 124 |
|
125 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
126 |
|
|
127 |
public static int getNumScramble(int ordinal) |
|
128 |
{ |
|
129 |
return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal].mNumScrambles : 0; |
|
130 |
} |
|
131 |
|
|
132 | 125 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
133 | 126 |
|
134 | 127 |
ObjectType(int[] numLayers, int scrambles, int sIcon, int mIcon, int bIcon, int hIcon) |
... | ... | |
141 | 134 |
mHugeIcon = hIcon; |
142 | 135 |
} |
143 | 136 |
|
137 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
138 |
|
|
139 |
public int getNumScramble() |
|
140 |
{ |
|
141 |
return mNumScrambles; |
|
142 |
} |
|
143 |
|
|
144 | 144 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
145 | 145 |
|
146 | 146 |
public int getIconID(int size) |
src/main/java/org/distorted/objectlib/main/TwistyObject.java | ||
---|---|---|
60 | 60 |
import java.io.InputStream; |
61 | 61 |
import java.util.Random; |
62 | 62 |
|
63 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_TETRAHEDRON; |
|
64 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_HEXAHEDRON; |
|
65 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_OCTAHEDRON; |
|
66 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_DODECAHEDRON; |
|
67 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_SHAPECHANGE; |
|
68 |
|
|
63 | 69 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
64 | 70 |
|
65 | 71 |
public abstract class TwistyObject extends DistortedNode |
... | ... | |
107 | 113 |
private final Static3D mNodeScale; |
108 | 114 |
private final Static4D mQuat; |
109 | 115 |
private final int[] mNumLayers; |
110 |
private final float mRealSize;
|
|
116 |
private final float mSize; |
|
111 | 117 |
private final DistortedEffects mEffects; |
112 | 118 |
private final VertexEffectRotate mRotateEffect; |
113 | 119 |
private final Dynamic1D mRotationAngle; |
... | ... | |
126 | 132 |
private int[] mTmpQuats; |
127 | 133 |
private int mNumTexRows, mNumTexCols; |
128 | 134 |
private int mRotRowBitmap; |
129 |
private int mRotAxis; |
|
135 |
private int mCurrentRotAxis;
|
|
130 | 136 |
private MeshBase mMesh; |
131 | 137 |
private final TwistyObjectScrambler mScrambler; |
138 |
private Movement mMovement; |
|
139 |
private boolean[][] mLayerRotatable; |
|
140 |
private int[][][] mEnabled; |
|
132 | 141 |
|
133 | 142 |
//////////////////// SOLVED1 //////////////////////// |
134 | 143 |
|
... | ... | |
138 | 147 |
|
139 | 148 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
140 | 149 |
|
141 |
TwistyObject(int[] numLayers, float realSize, Static4D quat, Static3D move, DistortedTexture nodeTexture,
|
|
150 |
TwistyObject(int[] numLayers, float size, Static4D quat, Static3D move, DistortedTexture nodeTexture,
|
|
142 | 151 |
MeshSquare nodeMesh, DistortedEffects nodeEffects, Resources res, int surfaceW, int surfaceH) |
143 | 152 |
{ |
144 | 153 |
super(nodeTexture,nodeEffects,nodeMesh); |
... | ... | |
149 | 158 |
resizeFBO(mNodeW,mNodeH); |
150 | 159 |
|
151 | 160 |
mNumLayers = numLayers; |
152 |
mRealSize = realSize;
|
|
161 |
mSize = size;
|
|
153 | 162 |
mOrigPos = getCubitPositions(mNumLayers); |
154 | 163 |
mAxis = getRotationAxis(); |
155 | 164 |
mInitScreenRatio = getScreenRatio(); |
... | ... | |
907 | 916 |
double nearestAngleInRadians = angle*Math.PI/180; |
908 | 917 |
float sinA =-(float)Math.sin(nearestAngleInRadians*0.5); |
909 | 918 |
float cosA = (float)Math.cos(nearestAngleInRadians*0.5); |
910 |
float axisX = mAxis[mRotAxis].get0(); |
|
911 |
float axisY = mAxis[mRotAxis].get1(); |
|
912 |
float axisZ = mAxis[mRotAxis].get2(); |
|
919 |
float axisX = mAxis[mCurrentRotAxis].get0();
|
|
920 |
float axisY = mAxis[mCurrentRotAxis].get1();
|
|
921 |
float axisZ = mAxis[mCurrentRotAxis].get2();
|
|
913 | 922 |
Static4D quat = new Static4D( axisX*sinA, axisY*sinA, axisZ*sinA, cosA); |
914 | 923 |
|
915 | 924 |
mRotationAngle.removeAll(); |
916 | 925 |
mRotationAngleStatic.set0(0); |
917 | 926 |
|
918 | 927 |
for(int i=0; i<NUM_CUBITS; i++) |
919 |
if( belongsToRotation(i,mRotAxis,mRotRowBitmap) )
|
|
928 |
if( belongsToRotation(i, mCurrentRotAxis,mRotRowBitmap) )
|
|
920 | 929 |
{ |
921 | 930 |
int index = CUBITS[i].removeRotationNow(quat); |
922 | 931 |
mMesh.setEffectAssociation(i, CUBITS[i].computeAssociation(),index); |
... | ... | |
954 | 963 |
{ |
955 | 964 |
if( wasRotateApplied() ) |
956 | 965 |
{ |
957 |
mRotAxis = axis;
|
|
966 |
mCurrentRotAxis = axis;
|
|
958 | 967 |
mRotRowBitmap= computeBitmapFromRow( rowBitmap,axis ); |
959 | 968 |
|
960 | 969 |
mRotationAngleStatic.set0(0.0f); |
... | ... | |
994 | 1003 |
return; |
995 | 1004 |
} |
996 | 1005 |
|
997 |
mRotAxis = axis;
|
|
1006 |
mCurrentRotAxis = axis;
|
|
998 | 1007 |
mRotRowBitmap= computeBitmapFromRow( (1<<row),axis ); |
999 | 1008 |
mRotationAngleStatic.set0(0.0f); |
1000 | 1009 |
mRotationAxis.set( mAxis[axis] ); |
... | ... | |
1144 | 1153 |
{ |
1145 | 1154 |
mObjectScreenRatio = sc; |
1146 | 1155 |
int nodeMinSize = Math.min(mNodeW,mNodeH); |
1147 |
float scale = mObjectScreenRatio*mInitScreenRatio*nodeMinSize/mRealSize;
|
|
1156 |
float scale = mObjectScreenRatio*mInitScreenRatio*nodeMinSize/mSize; |
|
1148 | 1157 |
mObjectScale.set(scale,scale,scale); |
1149 | 1158 |
} |
1150 | 1159 |
|
... | ... | |
1255 | 1264 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
1256 | 1265 |
|
1257 | 1266 |
public Static4D getRotationQuat() |
1258 |
{ |
|
1259 |
return mQuat; |
|
1260 |
} |
|
1267 |
{ |
|
1268 |
return mQuat; |
|
1269 |
} |
|
1270 |
|
|
1271 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
1272 |
|
|
1273 |
public float getSize() |
|
1274 |
{ |
|
1275 |
return mSize; |
|
1276 |
} |
|
1261 | 1277 |
|
1262 | 1278 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
1263 | 1279 |
|
... | ... | |
1326 | 1342 |
return intGetObjectType(mNumLayers); |
1327 | 1343 |
} |
1328 | 1344 |
|
1345 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
1346 |
|
|
1347 |
public Movement getMovement() |
|
1348 |
{ |
|
1349 |
if( mMovement==null ) |
|
1350 |
{ |
|
1351 |
int[] numLayers = getNumLayers(); |
|
1352 |
if( mCuts==null ) getCuts(numLayers); |
|
1353 |
if( mLayerRotatable==null ) mLayerRotatable = getLayerRotatable(numLayers); |
|
1354 |
if( mEnabled==null ) mEnabled = getEnabled(); |
|
1355 |
|
|
1356 |
int movementType = getMovementType(); |
|
1357 |
int movementSplit= getMovementSplit(); |
|
1358 |
|
|
1359 |
switch(movementType) |
|
1360 |
{ |
|
1361 |
case MOVEMENT_TETRAHEDRON : mMovement = new Movement4(mAxis,mCuts,mLayerRotatable,mSize,movementSplit,mEnabled); |
|
1362 |
break; |
|
1363 |
case MOVEMENT_HEXAHEDRON : mMovement = new Movement6(mAxis,mCuts,mLayerRotatable,mSize,movementSplit,mEnabled); |
|
1364 |
break; |
|
1365 |
case MOVEMENT_OCTAHEDRON : mMovement = new Movement8(mAxis,mCuts,mLayerRotatable,mSize,movementSplit,mEnabled); |
|
1366 |
break; |
|
1367 |
case MOVEMENT_DODECAHEDRON: mMovement = new Movement12(mAxis,mCuts,mLayerRotatable,mSize,movementSplit,mEnabled); |
|
1368 |
break; |
|
1369 |
case MOVEMENT_SHAPECHANGE : float[] dist3D = getDist3D(numLayers); |
|
1370 |
mMovement = new MovementC(mAxis,mCuts,mLayerRotatable,mSize,movementSplit,mEnabled,dist3D); |
|
1371 |
break; |
|
1372 |
} |
|
1373 |
} |
|
1374 |
return mMovement; |
|
1375 |
} |
|
1376 |
|
|
1329 | 1377 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
1330 | 1378 |
|
1331 | 1379 |
protected abstract int getFOV(); |
... | ... | |
1341 | 1389 |
protected abstract Static4D getQuat(int cubit, int[] numLayers); |
1342 | 1390 |
protected abstract ObjectShape getObjectShape(int cubit, int[] numLayers); |
1343 | 1391 |
protected abstract int[] getSolvedQuats(int cubit, int[] numLayers); |
1344 |
protected abstract int getSolvedFunctionIndex(); |
|
1345 | 1392 |
protected abstract ScrambleState[] getScrambleStates(); |
1346 | 1393 |
protected abstract int getNumStickerTypes(int[] numLayers); |
1347 | 1394 |
protected abstract ObjectSticker retSticker(int face); |
1348 | 1395 |
protected abstract int getFaceColor(int cubit, int cubitface, int[] numLayers); |
1349 | 1396 |
protected abstract int getResource(int[] numLayers); |
1350 | 1397 |
protected abstract ObjectType intGetObjectType(int[] numLayers); |
1351 |
protected abstract Movement getMovement(); |
|
1398 |
|
|
1399 |
// for JSON only |
|
1400 |
public abstract int getSolvedFunctionIndex(); |
|
1401 |
public abstract int getMovementType(); |
|
1402 |
public abstract int getMovementSplit(); |
|
1403 |
public abstract boolean[][] getLayerRotatable(int[] numLayers); |
|
1404 |
public abstract int[][][] getEnabled(); |
|
1405 |
public abstract float[] getDist3D(int[] numLayers); |
|
1352 | 1406 |
|
1353 | 1407 |
public abstract Static3D[] getRotationAxis(); |
1354 | 1408 |
public abstract int[] getBasicAngle(); |
1355 | 1409 |
public abstract int getNumFaces(); |
1356 | 1410 |
public abstract int getObjectName(int[] numLayers); |
1357 | 1411 |
public abstract int getInventor(int[] numLayers); |
1412 |
public abstract int getYearOfInvention(int[] numLayers); |
|
1358 | 1413 |
public abstract int getComplexity(int[] numLayers); |
1359 | 1414 |
} |
src/main/java/org/distorted/objectlib/objects/TwistyBandaged2Bar.java | ||
---|---|---|
135 | 135 |
return R.string.bandaged_2bar_inventor; |
136 | 136 |
} |
137 | 137 |
|
138 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
139 |
|
|
140 |
public int getYearOfInvention(int[] numLayers) |
|
141 |
{ |
|
142 |
return 2000; |
|
143 |
} |
|
144 |
|
|
138 | 145 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
139 | 146 |
|
140 | 147 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyBandaged3Plate.java | ||
---|---|---|
142 | 142 |
return R.string.bandaged_3plate_inventor; |
143 | 143 |
} |
144 | 144 |
|
145 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
146 |
|
|
147 |
public int getYearOfInvention(int[] numLayers) |
|
148 |
{ |
|
149 |
return 2000; |
|
150 |
} |
|
151 |
|
|
145 | 152 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
146 | 153 |
|
147 | 154 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_HEXAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_NOT_SPLIT; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
29 | 30 |
import org.distorted.library.type.Static3D; |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 |
import org.distorted.objectlib.main.Movement; |
|
33 | 33 |
import org.distorted.objectlib.main.Movement6; |
34 | 34 |
import org.distorted.objectlib.helpers.ObjectShape; |
35 | 35 |
import org.distorted.objectlib.helpers.ObjectSticker; |
... | ... | |
58 | 58 |
{2,2,2} |
59 | 59 |
}; |
60 | 60 |
|
61 |
private static final int[][][] ENABLED = new int[][][] |
|
62 |
{ |
|
63 |
{{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}}, |
|
64 |
}; |
|
65 |
|
|
66 | 61 |
private static final int NUM_STICKERS = 4; |
67 | 62 |
|
68 | 63 |
private int[] mBasicAngle; |
... | ... | |
72 | 67 |
private int[][] mAxisMap; |
73 | 68 |
private int[][] mFaceMap; |
74 | 69 |
private float[][] mCuts; |
75 |
private boolean[][] mLayerRotatable; |
|
76 |
private Movement mMovement; |
|
77 | 70 |
ScrambleState[] mStates; |
78 | 71 |
float[][] POSITIONS; |
79 | 72 |
int[] QUAT_INDICES; |
... | ... | |
355 | 348 |
|
356 | 349 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
357 | 350 |
|
358 |
private void getLayerRotatable(int[] numLayers)
|
|
351 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
359 | 352 |
{ |
360 |
if( mLayerRotatable==null ) |
|
361 |
{ |
|
362 |
int numAxis = ROT_AXIS.length; |
|
363 |
mLayerRotatable = new boolean[numAxis][]; |
|
353 |
int numAxis = ROT_AXIS.length; |
|
354 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
364 | 355 |
|
365 |
for(int i=0; i<numAxis; i++) |
|
366 |
{ |
|
367 |
mLayerRotatable[i] = new boolean[numLayers[i]]; |
|
368 |
for(int j=0; j<numLayers[i]; j++) mLayerRotatable[i][j] = true; |
|
369 |
} |
|
356 |
for(int i=0; i<numAxis; i++) |
|
357 |
{ |
|
358 |
layerRotatable[i] = new boolean[numLayers[i]]; |
|
359 |
for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true; |
|
370 | 360 |
} |
361 |
|
|
362 |
return layerRotatable; |
|
363 |
} |
|
364 |
|
|
365 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
366 |
|
|
367 |
public int getMovementType() |
|
368 |
{ |
|
369 |
return MOVEMENT_HEXAHEDRON; |
|
370 |
} |
|
371 |
|
|
372 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
373 |
|
|
374 |
public int getMovementSplit() |
|
375 |
{ |
|
376 |
return TYPE_NOT_SPLIT; |
|
371 | 377 |
} |
372 | 378 |
|
373 | 379 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
374 | 380 |
|
375 |
protected int getSolvedFunctionIndex() |
|
381 |
public int[][][] getEnabled() |
|
382 |
{ |
|
383 |
return new int[][][] |
|
384 |
{ |
|
385 |
{{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}}, |
|
386 |
}; |
|
387 |
} |
|
388 |
|
|
389 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
390 |
|
|
391 |
public float[] getDist3D(int[] numLayers) |
|
392 |
{ |
|
393 |
return null; |
|
394 |
} |
|
395 |
|
|
396 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
397 |
|
|
398 |
public int getSolvedFunctionIndex() |
|
376 | 399 |
{ |
377 | 400 |
return 0; |
378 | 401 |
} |
... | ... | |
471 | 494 |
return ROT_AXIS; |
472 | 495 |
} |
473 | 496 |
|
474 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
475 |
|
|
476 |
public Movement getMovement() |
|
477 |
{ |
|
478 |
if( mMovement==null ) |
|
479 |
{ |
|
480 |
int[] numLayers = getNumLayers(); |
|
481 |
if( mCuts==null ) getCuts(numLayers); |
|
482 |
getLayerRotatable(numLayers); |
|
483 |
mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_NOT_SPLIT,ENABLED); |
|
484 |
} |
|
485 |
return mMovement; |
|
486 |
} |
|
487 |
|
|
488 | 497 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
489 | 498 |
|
490 | 499 |
public int[] getBasicAngle() |
src/main/java/org/distorted/objectlib/objects/TwistyBandagedEvil.java | ||
---|---|---|
266 | 266 |
return R.string.bandaged_evil_inventor; |
267 | 267 |
} |
268 | 268 |
|
269 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
270 |
|
|
271 |
public int getYearOfInvention(int[] numLayers) |
|
272 |
{ |
|
273 |
return 2000; |
|
274 |
} |
|
275 |
|
|
269 | 276 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
270 | 277 |
|
271 | 278 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyBandagedFused.java | ||
---|---|---|
135 | 135 |
return R.string.bandaged_fused_inventor; |
136 | 136 |
} |
137 | 137 |
|
138 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
139 |
|
|
140 |
public int getYearOfInvention(int[] numLayers) |
|
141 |
{ |
|
142 |
return 2000; |
|
143 |
} |
|
144 |
|
|
138 | 145 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
139 | 146 |
|
140 | 147 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyCuboid.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_SHAPECHANGE; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_NOT_SPLIT; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 | 34 |
import org.distorted.objectlib.main.MovementC; |
35 | 35 |
import org.distorted.objectlib.main.ObjectControl; |
36 | 36 |
import org.distorted.objectlib.main.ObjectType; |
... | ... | |
50 | 50 |
new Static3D(0,0,1) |
51 | 51 |
}; |
52 | 52 |
|
53 |
private static final int[][][] ENABLED = new int[][][] |
|
54 |
{ |
|
55 |
{{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}}, |
|
56 |
}; |
|
57 |
|
|
58 | 53 |
private ScrambleState[] mStates; |
59 | 54 |
private Static4D[] mQuats; |
60 | 55 |
private float[][] mCuts; |
61 |
private boolean[][] mLayerRotatable; |
|
62 | 56 |
private int[] mBasicAngle; |
63 | 57 |
private ObjectSticker[] mStickers; |
64 |
private Movement mMovement; |
|
65 | 58 |
|
66 | 59 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
67 | 60 |
|
... | ... | |
564 | 557 |
|
565 | 558 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
566 | 559 |
|
567 |
private void getLayerRotatable(int[] numLayers)
|
|
560 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
568 | 561 |
{ |
569 |
if( mLayerRotatable==null ) |
|
570 |
{ |
|
571 |
int numAxis = ROT_AXIS.length; |
|
572 |
mLayerRotatable = new boolean[numAxis][]; |
|
562 |
int numAxis = ROT_AXIS.length; |
|
563 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
573 | 564 |
|
574 |
for(int i=0; i<numAxis; i++) |
|
575 |
{ |
|
576 |
mLayerRotatable[i] = new boolean[numLayers[i]]; |
|
577 |
for(int j=0; j<numLayers[i]; j++) mLayerRotatable[i][j] = true; |
|
578 |
} |
|
565 |
for(int i=0; i<numAxis; i++) |
|
566 |
{ |
|
567 |
layerRotatable[i] = new boolean[numLayers[i]]; |
|
568 |
for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true; |
|
579 | 569 |
} |
580 |
} |
|
581 |
|
|
582 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
583 | 570 |
|
584 |
protected int getSolvedFunctionIndex() |
|
585 |
{ |
|
586 |
return 0; |
|
571 |
return layerRotatable; |
|
587 | 572 |
} |
588 | 573 |
|
589 | 574 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
590 | 575 |
|
591 |
protected int getNumStickerTypes(int[] numLayers)
|
|
576 |
public int getMovementType()
|
|
592 | 577 |
{ |
593 |
return 1;
|
|
578 |
return MOVEMENT_SHAPECHANGE;
|
|
594 | 579 |
} |
595 | 580 |
|
596 | 581 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
597 | 582 |
|
598 |
protected int getNumCubitFaces()
|
|
583 |
public int getMovementSplit()
|
|
599 | 584 |
{ |
600 |
return 6;
|
|
585 |
return TYPE_NOT_SPLIT;
|
|
601 | 586 |
} |
602 | 587 |
|
603 | 588 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
604 |
// PUBLIC API |
|
605 | 589 |
|
606 |
public Static3D[] getRotationAxis()
|
|
590 |
public int[][][] getEnabled()
|
|
607 | 591 |
{ |
608 |
return ROT_AXIS; |
|
592 |
return new int[][][] |
|
593 |
{ |
|
594 |
{{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}}, |
|
595 |
}; |
|
609 | 596 |
} |
610 | 597 |
|
611 | 598 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
612 | 599 |
|
613 |
public Movement getMovement()
|
|
600 |
public float[] getDist3D(int[] numLayers)
|
|
614 | 601 |
{ |
615 |
if( mMovement==null ) |
|
616 |
{ |
|
617 |
int[] numLayers = getNumLayers(); |
|
618 |
if( mCuts==null ) getCuts(numLayers); |
|
619 |
getLayerRotatable(numLayers); |
|
620 |
float avg = (numLayers[0]+numLayers[1]+numLayers[2])/3.0f; |
|
602 |
float avg = (numLayers[0]+numLayers[1]+numLayers[2])/3.0f; |
|
621 | 603 |
|
622 |
float[] dist3D =
|
|
604 |
return new float[]
|
|
623 | 605 |
{ |
624 | 606 |
0.5f*numLayers[0]/avg, |
625 | 607 |
0.5f*numLayers[0]/avg, |
... | ... | |
628 | 610 |
0.5f*numLayers[2]/avg, |
629 | 611 |
0.5f*numLayers[2]/avg, |
630 | 612 |
}; |
613 |
} |
|
631 | 614 |
|
632 |
mMovement = new MovementC(ROT_AXIS,mCuts,mLayerRotatable,avg,TYPE_NOT_SPLIT,ENABLED,dist3D); |
|
633 |
} |
|
634 |
return mMovement; |
|
615 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
616 |
|
|
617 |
public int getSolvedFunctionIndex() |
|
618 |
{ |
|
619 |
return 0; |
|
620 |
} |
|
621 |
|
|
622 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
623 |
|
|
624 |
protected int getNumStickerTypes(int[] numLayers) |
|
625 |
{ |
|
626 |
return 1; |
|
627 |
} |
|
628 |
|
|
629 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
630 |
|
|
631 |
protected int getNumCubitFaces() |
|
632 |
{ |
|
633 |
return 6; |
|
634 |
} |
|
635 |
|
|
636 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
637 |
// PUBLIC API |
|
638 |
|
|
639 |
public Static3D[] getRotationAxis() |
|
640 |
{ |
|
641 |
return ROT_AXIS; |
|
635 | 642 |
} |
636 | 643 |
|
637 | 644 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
705 | 712 |
return R.string.cube3_inventor; |
706 | 713 |
} |
707 | 714 |
|
715 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
716 |
|
|
717 |
public int getYearOfInvention(int[] numLayers) |
|
718 |
{ |
|
719 |
switch(numLayers[0]) |
|
720 |
{ |
|
721 |
case 2: return 1970; |
|
722 |
case 3: return 1974; |
|
723 |
case 4: return 1981; |
|
724 |
case 5: return 1981; |
|
725 |
} |
|
726 |
return 1974; |
|
727 |
} |
|
728 |
|
|
708 | 729 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
709 | 730 |
|
710 | 731 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyDiamond.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_OCTAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_NOT_SPLIT; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 | 34 |
import org.distorted.objectlib.main.Movement8; |
35 | 35 |
import org.distorted.objectlib.main.ObjectControl; |
36 | 36 |
import org.distorted.objectlib.main.ObjectType; |
... | ... | |
52 | 52 |
new Static3D( 0,-SQ3/3,+SQ6/3) |
53 | 53 |
}; |
54 | 54 |
|
55 |
private static final int[][][] ENABLED = new int[][][] |
|
56 |
{ |
|
57 |
{{1,2,3}},{{1,2,3}},{{0,2,3}},{{0,2,3}},{{0,1,3}},{{0,1,3}},{{0,1,2}},{{0,1,2}} |
|
58 |
}; |
|
59 |
|
|
60 | 55 |
private ScrambleState[] mStates; |
61 | 56 |
private int[] mBasicAngle; |
62 | 57 |
private int[] mFaceMap; |
63 | 58 |
private float[][] mCuts; |
64 |
private boolean[][] mLayerRotatable; |
|
65 | 59 |
private Static4D[] mQuats; |
66 | 60 |
private int[] mTetraToFaceMap; |
67 | 61 |
private ObjectSticker[] mStickers; |
68 |
private Movement mMovement; |
|
69 | 62 |
|
70 | 63 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
71 | 64 |
|
... | ... | |
157 | 150 |
|
158 | 151 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
159 | 152 |
|
160 |
protected int getSolvedFunctionIndex()
|
|
153 |
public int getSolvedFunctionIndex()
|
|
161 | 154 |
{ |
162 | 155 |
return 0; |
163 | 156 |
} |
... | ... | |
196 | 189 |
|
197 | 190 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
198 | 191 |
|
199 |
private void getLayerRotatable(int[] numLayers)
|
|
192 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
200 | 193 |
{ |
201 |
if( mLayerRotatable==null ) |
|
202 |
{ |
|
203 |
int numAxis = ROT_AXIS.length; |
|
204 |
mLayerRotatable = new boolean[numAxis][]; |
|
194 |
int numAxis = ROT_AXIS.length; |
|
195 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
205 | 196 |
|
206 |
for(int i=0; i<numAxis; i++) |
|
207 |
{ |
|
208 |
mLayerRotatable[i] = new boolean[numLayers[i]]; |
|
209 |
for(int j=0; j<numLayers[i]; j++) mLayerRotatable[i][j] = true; |
|
210 |
} |
|
197 |
for(int i=0; i<numAxis; i++) |
|
198 |
{ |
|
199 |
layerRotatable[i] = new boolean[numLayers[i]]; |
|
200 |
for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true; |
|
211 | 201 |
} |
202 |
|
|
203 |
return layerRotatable; |
|
204 |
} |
|
205 |
|
|
206 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
207 |
|
|
208 |
public int getMovementType() |
|
209 |
{ |
|
210 |
return MOVEMENT_OCTAHEDRON; |
|
211 |
} |
|
212 |
|
|
213 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
214 |
|
|
215 |
public int getMovementSplit() |
|
216 |
{ |
|
217 |
return TYPE_NOT_SPLIT; |
|
218 |
} |
|
219 |
|
|
220 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
221 |
|
|
222 |
public int[][][] getEnabled() |
|
223 |
{ |
|
224 |
return new int[][][] |
|
225 |
{ |
|
226 |
{{1,2,3}},{{1,2,3}},{{0,2,3}},{{0,2,3}},{{0,1,3}},{{0,1,3}},{{0,1,2}},{{0,1,2}} |
|
227 |
}; |
|
228 |
} |
|
229 |
|
|
230 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
231 |
|
|
232 |
public float[] getDist3D(int[] numLayers) |
|
233 |
{ |
|
234 |
return null; |
|
212 | 235 |
} |
213 | 236 |
|
214 | 237 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
539 | 562 |
return ROT_AXIS; |
540 | 563 |
} |
541 | 564 |
|
542 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
543 |
|
|
544 |
public Movement getMovement() |
|
545 |
{ |
|
546 |
if( mMovement==null ) |
|
547 |
{ |
|
548 |
int[] numLayers = getNumLayers(); |
|
549 |
if( mCuts==null ) getCuts(numLayers); |
|
550 |
getLayerRotatable(numLayers); |
|
551 |
mMovement = new Movement8(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_NOT_SPLIT,ENABLED); |
|
552 |
} |
|
553 |
return mMovement; |
|
554 |
} |
|
555 |
|
|
556 | 565 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
557 | 566 |
|
558 | 567 |
public int[] getBasicAngle() |
... | ... | |
603 | 612 |
return 0; |
604 | 613 |
} |
605 | 614 |
|
615 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
616 |
|
|
617 |
public int getYearOfInvention(int[] numLayers) |
|
618 |
{ |
|
619 |
switch(numLayers[0]) |
|
620 |
{ |
|
621 |
case 2: return 1984; |
|
622 |
case 3: return 2003; |
|
623 |
case 4: return 2011; |
|
624 |
} |
|
625 |
return 1984; |
|
626 |
} |
|
627 |
|
|
606 | 628 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
607 | 629 |
|
608 | 630 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyDino.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_HEXAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_SPLIT_CORNER; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 |
import org.distorted.objectlib.main.Movement6; |
|
35 | 34 |
import org.distorted.objectlib.helpers.ObjectShape; |
36 | 35 |
import org.distorted.objectlib.helpers.ObjectSticker; |
37 | 36 |
import org.distorted.objectlib.helpers.ScrambleState; |
... | ... | |
51 | 50 |
new Static3D(+SQ3/3,-SQ3/3,-SQ3/3) |
52 | 51 |
}; |
53 | 52 |
|
54 |
private static final int[][][] ENABLED = new int[][][] |
|
55 |
{ |
|
56 |
{{0,1},{3,1},{2,3},{0,2}}, |
|
57 |
{{2,3},{3,1},{0,1},{0,2}}, |
|
58 |
{{1,2},{0,1},{0,3},{2,3}}, |
|
59 |
{{1,2},{2,3},{0,3},{0,1}}, |
|
60 |
{{0,3},{0,2},{1,2},{1,3}}, |
|
61 |
{{1,2},{0,2},{0,3},{1,3}}, |
|
62 |
}; |
|
63 |
|
|
64 | 53 |
private int[] mBasicAngle; |
65 | 54 |
private Static4D[] mQuats; |
66 | 55 |
private float[][] mCuts; |
67 |
private boolean[][] mLayerRotatable; |
|
68 | 56 |
private ObjectSticker[] mStickers; |
69 | 57 |
private float[][] mCenters; |
70 |
private Movement mMovement; |
|
71 | 58 |
ScrambleState[] mStates; |
72 | 59 |
|
73 | 60 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
129 | 116 |
|
130 | 117 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
131 | 118 |
|
132 |
private void getLayerRotatable(int[] numLayers)
|
|
119 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
133 | 120 |
{ |
134 |
if( mLayerRotatable==null ) |
|
121 |
int numAxis = ROT_AXIS.length; |
|
122 |
boolean[] tmp = new boolean[] {true,false,true}; |
|
123 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
124 |
for(int i=0; i<numAxis; i++) layerRotatable[i] = tmp; |
|
125 |
|
|
126 |
return layerRotatable; |
|
127 |
} |
|
128 |
|
|
129 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
130 |
|
|
131 |
public int getMovementType() |
|
132 |
{ |
|
133 |
return MOVEMENT_HEXAHEDRON; |
|
134 |
} |
|
135 |
|
|
136 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
137 |
|
|
138 |
public int getMovementSplit() |
|
139 |
{ |
|
140 |
return TYPE_SPLIT_CORNER; |
|
141 |
} |
|
142 |
|
|
143 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
144 |
|
|
145 |
public int[][][] getEnabled() |
|
146 |
{ |
|
147 |
return new int[][][] |
|
135 | 148 |
{ |
136 |
int numAxis = ROT_AXIS.length; |
|
137 |
boolean[] tmp = new boolean[] {true,false,true}; |
|
138 |
mLayerRotatable = new boolean[numAxis][]; |
|
139 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
140 |
} |
|
149 |
{{0,1},{3,1},{2,3},{0,2}}, |
|
150 |
{{2,3},{3,1},{0,1},{0,2}}, |
|
151 |
{{1,2},{0,1},{0,3},{2,3}}, |
|
152 |
{{1,2},{2,3},{0,3},{0,1}}, |
|
153 |
{{0,3},{0,2},{1,2},{1,3}}, |
|
154 |
{{1,2},{0,2},{0,3},{1,3}}, |
|
155 |
}; |
|
156 |
} |
|
157 |
|
|
158 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
159 |
|
|
160 |
public float[] getDist3D(int[] numLayers) |
|
161 |
{ |
|
162 |
return null; |
|
141 | 163 |
} |
142 | 164 |
|
143 | 165 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
248 | 270 |
return ROT_AXIS; |
249 | 271 |
} |
250 | 272 |
|
251 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
252 |
|
|
253 |
public Movement getMovement() |
|
254 |
{ |
|
255 |
if( mMovement==null ) |
|
256 |
{ |
|
257 |
int[] numLayers = getNumLayers(); |
|
258 |
if( mCuts==null ) getCuts(numLayers); |
|
259 |
getLayerRotatable(numLayers); |
|
260 |
mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_SPLIT_CORNER,ENABLED); |
|
261 |
} |
|
262 |
return mMovement; |
|
263 |
} |
|
264 |
|
|
265 | 273 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
266 | 274 |
|
267 | 275 |
public int[] getBasicAngle() |
src/main/java/org/distorted/objectlib/objects/TwistyDino4.java | ||
---|---|---|
85 | 85 |
|
86 | 86 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
87 | 87 |
|
88 |
protected int getSolvedFunctionIndex()
|
|
88 |
public int getSolvedFunctionIndex()
|
|
89 | 89 |
{ |
90 | 90 |
return 1; |
91 | 91 |
} |
... | ... | |
117 | 117 |
{ |
118 | 118 |
return R.string.din43_inventor; |
119 | 119 |
} |
120 |
|
|
121 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
122 |
|
|
123 |
public int getYearOfInvention(int[] numLayers) |
|
124 |
{ |
|
125 |
return 1985; |
|
126 |
} |
|
120 | 127 |
} |
src/main/java/org/distorted/objectlib/objects/TwistyDino6.java | ||
---|---|---|
94 | 94 |
|
95 | 95 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
96 | 96 |
|
97 |
protected int getSolvedFunctionIndex()
|
|
97 |
public int getSolvedFunctionIndex()
|
|
98 | 98 |
{ |
99 | 99 |
return 2; |
100 | 100 |
} |
... | ... | |
119 | 119 |
{ |
120 | 120 |
return R.string.dino3_inventor; |
121 | 121 |
} |
122 |
|
|
123 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
124 |
|
|
125 |
public int getYearOfInvention(int[] numLayers) |
|
126 |
{ |
|
127 |
return 1985; |
|
128 |
} |
|
122 | 129 |
} |
src/main/java/org/distorted/objectlib/objects/TwistyHelicopter.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_HEXAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_SPLIT_EDGE; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 | 34 |
import org.distorted.objectlib.main.Movement6; |
35 | 35 |
import org.distorted.objectlib.main.ObjectControl; |
36 | 36 |
import org.distorted.objectlib.main.ObjectType; |
... | ... | |
54 | 54 |
new Static3D(-SQ2/2, -SQ2/2, 0) |
55 | 55 |
}; |
56 | 56 |
|
57 |
private static final int[][][] ENABLED = new int[][][] |
|
58 |
{ |
|
59 |
{{2,5},{2,4},{3,4},{3,5}}, |
|
60 |
{{2,4},{2,5},{3,5},{3,4}}, |
|
61 |
{{0,5},{1,5},{1,4},{0,4}}, |
|
62 |
{{0,4},{1,4},{1,5},{0,5}}, |
|
63 |
{{1,3},{0,3},{0,2},{1,2}}, |
|
64 |
{{0,3},{1,3},{1,2},{0,2}}, |
|
65 |
}; |
|
66 |
|
|
67 | 57 |
private ScrambleState[] mStates; |
68 | 58 |
private int[] mBasicAngle; |
69 | 59 |
private Static4D[] mQuats; |
70 | 60 |
private float[][] mCuts; |
71 |
private boolean[][] mLayerRotatable; |
|
72 | 61 |
private float[][] mCenters; |
73 | 62 |
private int[] mQuatIndices; |
74 | 63 |
private int[][] mFaceMap; |
75 | 64 |
private ObjectSticker[] mStickers; |
76 |
private Movement mMovement; |
|
77 | 65 |
|
78 | 66 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
79 | 67 |
|
... | ... | |
171 | 159 |
|
172 | 160 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
173 | 161 |
|
174 |
protected int getSolvedFunctionIndex()
|
|
162 |
public int getSolvedFunctionIndex()
|
|
175 | 163 |
{ |
176 | 164 |
return 0; |
177 | 165 |
} |
... | ... | |
198 | 186 |
|
199 | 187 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
200 | 188 |
|
201 |
private void getLayerRotatable(int[] numLayers) |
|
189 |
public boolean[][] getLayerRotatable(int[] numLayers) |
|
190 |
{ |
|
191 |
int numAxis = ROT_AXIS.length; |
|
192 |
boolean[] tmp = new boolean[] {true,false,true}; |
|
193 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
194 |
for(int i=0; i<numAxis; i++) layerRotatable[i] = tmp; |
|
195 |
|
|
196 |
return layerRotatable; |
|
197 |
} |
|
198 |
|
|
199 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
200 |
|
|
201 |
public int getMovementType() |
|
202 |
{ |
|
203 |
return MOVEMENT_HEXAHEDRON; |
|
204 |
} |
|
205 |
|
|
206 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
207 |
|
|
208 |
public int getMovementSplit() |
|
209 |
{ |
|
210 |
return TYPE_SPLIT_EDGE; |
|
211 |
} |
|
212 |
|
|
213 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
214 |
|
|
215 |
public int[][][] getEnabled() |
|
202 | 216 |
{ |
203 |
if( mLayerRotatable==null )
|
|
217 |
return new int[][][]
|
|
204 | 218 |
{ |
205 |
int numAxis = ROT_AXIS.length; |
|
206 |
boolean[] tmp = new boolean[] {true,false,true}; |
|
207 |
mLayerRotatable = new boolean[numAxis][]; |
|
208 |
for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp; |
|
209 |
} |
|
219 |
{{2,5},{2,4},{3,4},{3,5}}, |
|
220 |
{{2,4},{2,5},{3,5},{3,4}}, |
|
221 |
{{0,5},{1,5},{1,4},{0,4}}, |
|
222 |
{{0,4},{1,4},{1,5},{0,5}}, |
|
223 |
{{1,3},{0,3},{0,2},{1,2}}, |
|
224 |
{{0,3},{1,3},{1,2},{0,2}}, |
|
225 |
}; |
|
226 |
} |
|
227 |
|
|
228 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
229 |
|
|
230 |
public float[] getDist3D(int[] numLayers) |
|
231 |
{ |
|
232 |
return null; |
|
210 | 233 |
} |
211 | 234 |
|
212 | 235 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
441 | 464 |
return ROT_AXIS; |
442 | 465 |
} |
443 | 466 |
|
444 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
445 |
|
|
446 |
public Movement getMovement() |
|
447 |
{ |
|
448 |
if( mMovement==null ) |
|
449 |
{ |
|
450 |
int[] numLayers = getNumLayers(); |
|
451 |
if( mCuts==null ) getCuts(numLayers); |
|
452 |
getLayerRotatable(numLayers); |
|
453 |
mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_SPLIT_EDGE,ENABLED); |
|
454 |
} |
|
455 |
return mMovement; |
|
456 |
} |
|
457 |
|
|
458 | 467 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
459 | 468 |
|
460 | 469 |
public int[] getBasicAngle() |
... | ... | |
484 | 493 |
return R.string.heli3_inventor; |
485 | 494 |
} |
486 | 495 |
|
496 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
497 |
|
|
498 |
public int getYearOfInvention(int[] numLayers) |
|
499 |
{ |
|
500 |
return 2006; |
|
501 |
} |
|
502 |
|
|
487 | 503 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
488 | 504 |
|
489 | 505 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyIvy.java | ||
---|---|---|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 | 22 |
import static org.distorted.objectlib.main.Movement.TYPE_SPLIT_CORNER; |
23 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_HEXAHEDRON; |
|
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
25 | 26 |
|
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 | 34 |
import org.distorted.objectlib.main.Movement6; |
35 | 35 |
import org.distorted.objectlib.main.ObjectControl; |
36 | 36 |
import org.distorted.objectlib.main.ObjectType; |
... | ... | |
51 | 51 |
new Static3D(+SQ3/3,-SQ3/3,-SQ3/3) |
52 | 52 |
}; |
53 | 53 |
|
54 |
private static final int[][][] ENABLED = new int[][][] |
|
55 |
{ |
|
56 |
{{0},{3},{3},{0}}, |
|
57 |
{{2},{1},{1},{2}}, |
|
58 |
{{2},{0},{0},{2}}, |
|
59 |
{{1},{3},{3},{1}}, |
|
60 |
{{0},{0},{1},{1}}, |
|
61 |
{{2},{2},{3},{3}}, |
|
62 |
}; |
|
63 |
|
|
64 | 54 |
private static final int NUM_STICKERS = 2; |
65 | 55 |
public static final float IVY_D = 0.006f; |
66 | 56 |
private static final int IVY_N = 8; |
... | ... | |
69 | 59 |
private int[] mBasicAngle; |
70 | 60 |
private Static4D[] mQuats; |
71 | 61 |
private float[][] mCuts; |
72 |
private boolean[][] mLayerRotatable; |
|
73 | 62 |
private int[][] mFaceMap; |
74 | 63 |
private ObjectSticker[] mStickers; |
75 |
private Movement mMovement; |
|
76 | 64 |
|
77 | 65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
78 | 66 |
|
... | ... | |
147 | 135 |
|
148 | 136 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
149 | 137 |
|
150 |
protected int getSolvedFunctionIndex()
|
|
138 |
public int getSolvedFunctionIndex()
|
|
151 | 139 |
{ |
152 | 140 |
return 0; |
153 | 141 |
} |
... | ... | |
174 | 162 |
|
175 | 163 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
176 | 164 |
|
177 |
private void getLayerRotatable(int[] numLayers)
|
|
165 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
178 | 166 |
{ |
179 |
if( mLayerRotatable==null ) |
|
180 |
{ |
|
181 |
int numAxis = ROT_AXIS.length; |
|
182 |
mLayerRotatable = new boolean[numAxis][]; |
|
167 |
int numAxis = ROT_AXIS.length; |
|
168 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
183 | 169 |
|
184 |
for(int i=0; i<numAxis; i++) |
|
185 |
{ |
|
186 |
mLayerRotatable[i] = new boolean[numLayers[i]]; |
|
187 |
for(int j=0; j<numLayers[i]; j++) mLayerRotatable[i][j] = true; |
|
188 |
} |
|
170 |
for(int i=0; i<numAxis; i++) |
|
171 |
{ |
|
172 |
layerRotatable[i] = new boolean[numLayers[i]]; |
|
173 |
for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true; |
|
189 | 174 |
} |
175 |
|
|
176 |
return layerRotatable; |
|
177 |
} |
|
178 |
|
|
179 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
180 |
|
|
181 |
public int getMovementType() |
|
182 |
{ |
|
183 |
return MOVEMENT_HEXAHEDRON; |
|
184 |
} |
|
185 |
|
|
186 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
187 |
|
|
188 |
public int getMovementSplit() |
|
189 |
{ |
|
190 |
return TYPE_SPLIT_CORNER; |
|
191 |
} |
|
192 |
|
|
193 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
194 |
|
|
195 |
public int[][][] getEnabled() |
|
196 |
{ |
|
197 |
return new int[][][] |
|
198 |
{ |
|
199 |
{{0},{3},{3},{0}}, |
|
200 |
{{2},{1},{1},{2}}, |
|
201 |
{{2},{0},{0},{2}}, |
|
202 |
{{1},{3},{3},{1}}, |
|
203 |
{{0},{0},{1},{1}}, |
|
204 |
{{2},{2},{3},{3}}, |
|
205 |
}; |
|
206 |
} |
|
207 |
|
|
208 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
209 |
|
|
210 |
public float[] getDist3D(int[] numLayers) |
|
211 |
{ |
|
212 |
return null; |
|
190 | 213 |
} |
191 | 214 |
|
192 | 215 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
473 | 496 |
return ROT_AXIS; |
474 | 497 |
} |
475 | 498 |
|
476 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
477 |
|
|
478 |
public Movement getMovement() |
|
479 |
{ |
|
480 |
if( mMovement==null ) |
|
481 |
{ |
|
482 |
int[] numLayers = getNumLayers(); |
|
483 |
if( mCuts==null ) getCuts(numLayers); |
|
484 |
getLayerRotatable(numLayers); |
|
485 |
mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_SPLIT_CORNER,ENABLED); |
|
486 |
} |
|
487 |
return mMovement; |
|
488 |
} |
|
489 |
|
|
490 | 499 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
491 | 500 |
|
492 | 501 |
public int[] getBasicAngle() |
... | ... | |
516 | 525 |
return R.string.ivy2_inventor; |
517 | 526 |
} |
518 | 527 |
|
528 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
529 |
|
|
530 |
public int getYearOfInvention(int[] numLayers) |
|
531 |
{ |
|
532 |
return 2009; |
|
533 |
} |
|
534 |
|
|
519 | 535 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
520 | 536 |
|
521 | 537 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyJing.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_TETRAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_NOT_SPLIT; |
23 | 24 |
|
24 | 25 |
import android.content.res.Resources; |
... | ... | |
30 | 31 |
import org.distorted.library.type.Static4D; |
31 | 32 |
|
32 | 33 |
import org.distorted.objectlib.R; |
33 |
import org.distorted.objectlib.main.Movement; |
|
34 | 34 |
import org.distorted.objectlib.main.Movement4; |
35 | 35 |
import org.distorted.objectlib.main.ObjectControl; |
36 | 36 |
import org.distorted.objectlib.main.ObjectType; |
... | ... | |
51 | 51 |
new Static3D(-SQ6/3,+SQ3/3, 0), |
52 | 52 |
}; |
53 | 53 |
|
54 |
private static final int[][][] ENABLED = new int[][][] |
|
55 |
{ |
|
56 |
{{1,2,3}},{{0,2,3}},{{0,1,3}},{{0,1,2}} |
|
57 |
}; |
|
58 |
|
|
59 | 54 |
static final float F = 0.48f; // length of the edge of the corner cubit. Keep<0.5 |
60 | 55 |
// Assuming the length of the edge of the whole |
61 | 56 |
// tetrahedron is 2.0 (ie standard, equal to numLayers |
... | ... | |
65 | 60 |
private int[] mRotQuat; |
66 | 61 |
private Static4D[] mQuats; |
67 | 62 |
private float[][] mCuts; |
68 |
private boolean[][] mLayerRotatable; |
|
69 | 63 |
private float[][] mCenters; |
70 | 64 |
private int[][] mFaceMap; |
71 | 65 |
private ObjectSticker[] mStickers; |
72 |
private Movement mMovement; |
|
73 | 66 |
|
74 | 67 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
75 | 68 |
|
... | ... | |
173 | 166 |
|
174 | 167 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
175 | 168 |
|
176 |
protected int getSolvedFunctionIndex()
|
|
169 |
public int getSolvedFunctionIndex()
|
|
177 | 170 |
{ |
178 | 171 |
return 0; |
179 | 172 |
} |
... | ... | |
200 | 193 |
|
201 | 194 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
202 | 195 |
|
203 |
private void getLayerRotatable(int[] numLayers)
|
|
196 |
public boolean[][] getLayerRotatable(int[] numLayers)
|
|
204 | 197 |
{ |
205 |
if( mLayerRotatable==null ) |
|
206 |
{ |
|
207 |
int numAxis = ROT_AXIS.length; |
|
208 |
mLayerRotatable = new boolean[numAxis][]; |
|
198 |
int numAxis = ROT_AXIS.length; |
|
199 |
boolean[][] layerRotatable = new boolean[numAxis][]; |
|
209 | 200 |
|
210 |
for(int i=0; i<numAxis; i++) |
|
211 |
{ |
|
212 |
mLayerRotatable[i] = new boolean[numLayers[i]]; |
|
213 |
for(int j=0; j<numLayers[i]; j++) mLayerRotatable[i][j] = true; |
|
214 |
} |
|
201 |
for(int i=0; i<numAxis; i++) |
|
202 |
{ |
|
203 |
layerRotatable[i] = new boolean[numLayers[i]]; |
|
204 |
for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true; |
|
215 | 205 |
} |
206 |
|
|
207 |
return layerRotatable; |
|
208 |
} |
|
209 |
|
|
210 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
211 |
|
|
212 |
public int getMovementType() |
|
213 |
{ |
|
214 |
return MOVEMENT_TETRAHEDRON; |
|
215 |
} |
|
216 |
|
|
217 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
218 |
|
|
219 |
public int getMovementSplit() |
|
220 |
{ |
|
221 |
return TYPE_NOT_SPLIT; |
|
222 |
} |
|
223 |
|
|
224 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
225 |
|
|
226 |
public int[][][] getEnabled() |
|
227 |
{ |
|
228 |
return new int[][][] |
|
229 |
{ |
|
230 |
{{1,2,3}},{{0,2,3}},{{0,1,3}},{{0,1,2}} |
|
231 |
}; |
|
232 |
} |
|
233 |
|
|
234 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
235 |
|
|
236 |
public float[] getDist3D(int[] numLayers) |
|
237 |
{ |
|
238 |
return null; |
|
216 | 239 |
} |
217 | 240 |
|
218 | 241 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
431 | 454 |
return ROT_AXIS; |
432 | 455 |
} |
433 | 456 |
|
434 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
435 |
|
|
436 |
public Movement getMovement() |
|
437 |
{ |
|
438 |
if( mMovement==null ) |
|
439 |
{ |
|
440 |
int[] numLayers = getNumLayers(); |
|
441 |
if( mCuts==null ) getCuts(numLayers); |
|
442 |
getLayerRotatable(numLayers); |
|
443 |
mMovement = new Movement4(ROT_AXIS,mCuts,mLayerRotatable,numLayers[0],TYPE_NOT_SPLIT,ENABLED); |
|
444 |
} |
|
445 |
return mMovement; |
|
446 |
} |
|
447 |
|
|
448 | 457 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
449 | 458 |
|
450 | 459 |
public int[] getBasicAngle() |
... | ... | |
474 | 483 |
return R.string.jing_inventor; |
475 | 484 |
} |
476 | 485 |
|
486 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
487 |
|
|
488 |
public int getYearOfInvention(int[] numLayers) |
|
489 |
{ |
|
490 |
return 1991; |
|
491 |
} |
|
492 |
|
|
477 | 493 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
478 | 494 |
|
479 | 495 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyKilominx.java | ||
---|---|---|
752 | 752 |
return 0; |
753 | 753 |
} |
754 | 754 |
|
755 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
756 |
|
|
757 |
public int getYearOfInvention(int[] numLayers) |
|
758 |
{ |
|
759 |
switch(numLayers[0]) |
|
760 |
{ |
|
761 |
case 3: return 2008; |
|
762 |
case 5: return 2010; |
|
763 |
} |
|
764 |
return 2008; |
|
765 |
} |
|
766 |
|
|
755 | 767 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
756 | 768 |
|
757 | 769 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyMegaminx.java | ||
---|---|---|
654 | 654 |
return 0; |
655 | 655 |
} |
656 | 656 |
|
657 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
658 |
|
|
659 |
public int getYearOfInvention(int[] numLayers) |
|
660 |
{ |
|
661 |
switch(numLayers[0]) |
|
662 |
{ |
|
663 |
case 3: return 1982; |
|
664 |
case 5: return 2006; |
|
665 |
} |
|
666 |
return 1982; |
|
667 |
} |
|
668 |
|
|
657 | 669 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
658 | 670 |
|
659 | 671 |
public int getComplexity(int[] numLayers) |
src/main/java/org/distorted/objectlib/objects/TwistyMinx.java | ||
---|---|---|
19 | 19 |
|
20 | 20 |
package org.distorted.objectlib.objects; |
21 | 21 |
|
22 |
import static org.distorted.objectlib.main.Movement.MOVEMENT_DODECAHEDRON; |
|
22 | 23 |
import static org.distorted.objectlib.main.Movement.TYPE_SPLIT_EDGE; |
23 | 24 |
import static org.distorted.objectlib.main.Movement12.C2; |
24 | 25 |
import static org.distorted.objectlib.main.Movement12.LEN; |
... | ... | |
31 | 32 |
import org.distorted.library.mesh.MeshSquare; |
32 | 33 |
import org.distorted.library.type.Static3D; |
33 | 34 |
import org.distorted.library.type.Static4D; |
34 |
import org.distorted.objectlib.main.Movement; |
|
35 | 35 |
import org.distorted.objectlib.main.Movement12; |
36 | 36 |
import org.distorted.objectlib.helpers.ObjectSticker; |
37 | 37 |
import org.distorted.objectlib.helpers.ScrambleState; |
... | ... | |
61 | 61 |
new Static3D( SIN54/LEN, 0 , -C2/LEN ) |
62 | 62 |
}; |
63 | 63 |
|
64 |
private static final int[][][] ENABLED = new int[][][] |
|
65 |
{ |
|
66 |
{{2,3},{3,5},{1,5},{1,4},{2,4}}, |
|
67 |
{{0,5},{2,5},{2,3},{3,4},{0,4}}, |
|
68 |
{{2,3},{2,5},{0,5},{0,4},{3,4}}, |
|
69 |
{{1,5},{3,5},{2,3},{2,4},{1,4}}, |
|
70 |
{{0,3},{0,4},{4,5},{1,5},{1,3}}, |
|
71 |
{{1,2},{1,4},{4,5},{0,5},{0,2}}, |
|
72 |
{{4,5},{1,4},{1,2},{0,2},{0,5}}, |
|
73 |
{{4,5},{0,4},{0,3},{1,3},{1,5}}, |
|
74 |
{{0,2},{0,1},{1,3},{3,5},{2,5}}, |
|
75 |
{{3,4},{2,4},{1,2},{0,1},{0,3}}, |
|
76 |
{{2,4},{3,4},{0,3},{0,1},{1,2}}, |
|
77 |
{{1,3},{0,1},{0,2},{2,5},{3,5}}, |
|
78 |
}; |
|
79 |
|
|
80 | 64 |
private ScrambleState[] mStates; |
81 | 65 |
private int[] mBasicAngle; |
82 | 66 |
private int[] mFaceMap; |
83 | 67 |
private float[][] mCuts; |
84 |
private boolean[][] mLayerRotatable; |
Also available in: Unified diff
Reorg for writing the JSON