93 |
93 |
private static final int POST_ROTATION_MILLISEC = 500;
|
94 |
94 |
|
95 |
95 |
protected float[][] mStickerCoords;
|
96 |
|
int NUM_AXIS, SHIFT;
|
97 |
|
Static4D[] OBJECT_QUATS;
|
|
96 |
int mNumAxis, mMaxNumLayers;
|
|
97 |
Static4D[] mObjectQuats;
|
98 |
98 |
|
99 |
99 |
private int[][] mStickerVariants;
|
100 |
100 |
private float[] mStickerScales;
|
... | ... | |
179 |
179 |
mSolvedFunctionIndex = getSolvedFunctionIndex();
|
180 |
180 |
|
181 |
181 |
int numAxis = mAxis.length;
|
182 |
|
SHIFT = -1;
|
|
182 |
mMaxNumLayers = -1;
|
183 |
183 |
|
184 |
184 |
mCuts = getCuts(mNumLayers);
|
185 |
185 |
mNumCuts = new int[numAxis];
|
186 |
186 |
for(int i=0; i<numAxis; i++)
|
187 |
187 |
{
|
188 |
|
if( SHIFT<mNumLayers[i] ) SHIFT = mNumLayers[i];
|
|
188 |
if( mMaxNumLayers<mNumLayers[i] ) mMaxNumLayers = mNumLayers[i];
|
189 |
189 |
mNumCuts[i] = (mCuts==null || mCuts[i]==null ? 0 : mCuts[i].length);
|
190 |
190 |
}
|
191 |
191 |
|
192 |
192 |
mNumCubits = mOrigPos.length;
|
193 |
193 |
mNumFaceColors = getNumFaceColors();
|
194 |
|
NUM_AXIS = mAxis.length;
|
|
194 |
mNumAxis = mAxis.length;
|
195 |
195 |
|
196 |
|
OBJECT_QUATS = getQuats();
|
197 |
|
mNumQuats = OBJECT_QUATS.length;
|
|
196 |
mObjectQuats = getQuats();
|
|
197 |
mNumQuats = mObjectQuats.length;
|
198 |
198 |
|
199 |
199 |
int scramblingType = getScrambleType();
|
200 |
200 |
ScrambleState[] states = getScrambleStates();
|
201 |
|
mScrambler = new TwistyObjectScrambler(scramblingType,NUM_AXIS,mNumLayers,states);
|
|
201 |
mScrambler = new TwistyObjectScrambler(scramblingType, mNumAxis,mNumLayers,states);
|
202 |
202 |
|
203 |
203 |
boolean bandaged=false;
|
204 |
204 |
|
... | ... | |
239 |
239 |
|
240 |
240 |
for( int q=0; q<mNumQuats; q++)
|
241 |
241 |
{
|
242 |
|
VertexEffectQuaternion vq = new VertexEffectQuaternion(OBJECT_QUATS[q],CENTER);
|
|
242 |
VertexEffectQuaternion vq = new VertexEffectQuaternion(mObjectQuats[q],CENTER);
|
243 |
243 |
vq.setMeshAssociation(0,q);
|
244 |
244 |
mEffects.apply(vq);
|
245 |
245 |
}
|
... | ... | |
354 |
354 |
|
355 |
355 |
for(int i=0; i<mNumCubits; i++)
|
356 |
356 |
{
|
357 |
|
mCubits[i] = new Cubit(this,mOrigPos[i], NUM_AXIS);
|
|
357 |
mCubits[i] = new Cubit(this,mOrigPos[i], mNumAxis);
|
358 |
358 |
mMesh.setEffectAssociation(i, mCubits[i].computeAssociation(), 0);
|
359 |
359 |
}
|
360 |
360 |
}
|
... | ... | |
364 |
364 |
|
365 |
365 |
for(int i=0; i<mNumCubits; i++)
|
366 |
366 |
{
|
367 |
|
mCubits[i] = new Cubit(this,mOrigPos[i], NUM_AXIS);
|
|
367 |
mCubits[i] = new Cubit(this,mOrigPos[i], mNumAxis);
|
368 |
368 |
cubitMesh[i] = createCubitMesh(i,mNumLayers,meshState,mNumCubitFaces);
|
369 |
369 |
Static3D pos = getPos(mOrigPos[i]);
|
370 |
370 |
cubitMesh[i].apply(new MatrixEffectMove(pos),1,0);
|
... | ... | |
591 |
591 |
float MAXDIFF = 0.01f;
|
592 |
592 |
float[] center= mOrigPos[centerNum];
|
593 |
593 |
Static4D sc = new Static4D(center[0], center[1], center[2], 1.0f);
|
594 |
|
Static4D result = QuatHelper.rotateVectorByQuat(sc,OBJECT_QUATS[quatNum]);
|
|
594 |
Static4D result = QuatHelper.rotateVectorByQuat(sc,mObjectQuats[quatNum]);
|
595 |
595 |
|
596 |
596 |
float x = result.get0();
|
597 |
597 |
float y = result.get1();
|
... | ... | |
898 |
898 |
|
899 |
899 |
int mulQuat(int q1, int q2)
|
900 |
900 |
{
|
901 |
|
Static4D result = QuatHelper.quatMultiply(OBJECT_QUATS[q1],OBJECT_QUATS[q2]);
|
|
901 |
Static4D result = QuatHelper.quatMultiply(mObjectQuats[q1],mObjectQuats[q2]);
|
902 |
902 |
|
903 |
903 |
float rX = result.get0();
|
904 |
904 |
float rY = result.get1();
|
... | ... | |
910 |
910 |
|
911 |
911 |
for(int i=0; i<mNumQuats; i++)
|
912 |
912 |
{
|
913 |
|
dX = OBJECT_QUATS[i].get0() - rX;
|
914 |
|
dY = OBJECT_QUATS[i].get1() - rY;
|
915 |
|
dZ = OBJECT_QUATS[i].get2() - rZ;
|
916 |
|
dW = OBJECT_QUATS[i].get3() - rW;
|
|
913 |
dX = mObjectQuats[i].get0() - rX;
|
|
914 |
dY = mObjectQuats[i].get1() - rY;
|
|
915 |
dZ = mObjectQuats[i].get2() - rZ;
|
|
916 |
dW = mObjectQuats[i].get3() - rW;
|
917 |
917 |
|
918 |
918 |
if( dX<MAX_ERROR && dX>-MAX_ERROR &&
|
919 |
919 |
dY<MAX_ERROR && dY>-MAX_ERROR &&
|
920 |
920 |
dZ<MAX_ERROR && dZ>-MAX_ERROR &&
|
921 |
921 |
dW<MAX_ERROR && dW>-MAX_ERROR ) return i;
|
922 |
922 |
|
923 |
|
dX = OBJECT_QUATS[i].get0() + rX;
|
924 |
|
dY = OBJECT_QUATS[i].get1() + rY;
|
925 |
|
dZ = OBJECT_QUATS[i].get2() + rZ;
|
926 |
|
dW = OBJECT_QUATS[i].get3() + rW;
|
|
923 |
dX = mObjectQuats[i].get0() + rX;
|
|
924 |
dY = mObjectQuats[i].get1() + rY;
|
|
925 |
dZ = mObjectQuats[i].get2() + rZ;
|
|
926 |
dW = mObjectQuats[i].get3() + rW;
|
927 |
927 |
|
928 |
928 |
if( dX<MAX_ERROR && dX>-MAX_ERROR &&
|
929 |
929 |
dY<MAX_ERROR && dY>-MAX_ERROR &&
|
... | ... | |
1030 |
1030 |
mRotationAngle.resetToBeginning();
|
1031 |
1031 |
mRotationAngle.add(new Static1D(0));
|
1032 |
1032 |
mRotationAngle.add(new Static1D(angle));
|
1033 |
|
mRotateEffect.setMeshAssociation( mRotRowBitmap<<(axis*SHIFT) , -1);
|
|
1033 |
mRotateEffect.setMeshAssociation( mRotRowBitmap<<(axis*mMaxNumLayers) , -1);
|
1034 |
1034 |
mRotateEffect.notifyWhenFinished(listener);
|
1035 |
1035 |
|
1036 |
1036 |
return mRotateEffect.getID();
|
... | ... | |
1050 |
1050 |
|
1051 |
1051 |
synchronized void beginNewRotation(int axis, int row )
|
1052 |
1052 |
{
|
1053 |
|
if( axis<0 || axis>=NUM_AXIS )
|
|
1053 |
if( axis<0 || axis>=mNumAxis )
|
1054 |
1054 |
{
|
1055 |
1055 |
android.util.Log.e("object", "invalid rotation axis: "+axis);
|
1056 |
1056 |
return;
|
... | ... | |
1066 |
1066 |
mRotationAngleStatic.set0(0.0f);
|
1067 |
1067 |
mRotationAxis.set( mAxis[axis] );
|
1068 |
1068 |
mRotationAngle.add(mRotationAngleStatic);
|
1069 |
|
mRotateEffect.setMeshAssociation( mRotRowBitmap<<(axis*SHIFT) , -1);
|
|
1069 |
mRotateEffect.setMeshAssociation( mRotRowBitmap<<(axis*mMaxNumLayers) , -1);
|
1070 |
1070 |
}
|
1071 |
1071 |
|
1072 |
1072 |
///////////////////////////////////////////////////////////////////////////////////////////////////
|
... | ... | |
1147 |
1147 |
|
1148 |
1148 |
if( mQuatDebug[i]>=0 && mQuatDebug[i]<mNumQuats )
|
1149 |
1149 |
{
|
1150 |
|
mCubits[i].modifyCurrentPosition(OBJECT_QUATS[mQuatDebug[i]]);
|
|
1150 |
mCubits[i].modifyCurrentPosition(mObjectQuats[mQuatDebug[i]]);
|
1151 |
1151 |
mMesh.setEffectAssociation(i, mCubits[i].computeAssociation(),mQuatDebug[i]);
|
1152 |
1152 |
}
|
1153 |
1153 |
else
|
Clenups.