Revision 3788d0cd
Added by Leszek Koltunski about 1 year ago
src/main/java/org/distorted/objectlib/main/TwistyObject.java | ||
---|---|---|
158 | 158 |
private int mNumAxis; |
159 | 159 |
private int mPointNum; |
160 | 160 |
private int mRotationState; |
161 |
private boolean mThereAreDeciders; |
|
161 | 162 |
|
162 | 163 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
163 | 164 |
|
... | ... | |
473 | 474 |
{ |
474 | 475 |
mCubits[i] = new TwistyObjectCubit(this,mOrigPos[i],mNumAxis,mMaxNumLayers,i); |
475 | 476 |
setCubitQuat(i,mCubits[i].computeAssociation(),0); |
477 |
|
|
478 |
if( !mThereAreDeciders && mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER ) |
|
479 |
{ |
|
480 |
mThereAreDeciders = true; |
|
481 |
} |
|
476 | 482 |
} |
477 | 483 |
} |
478 | 484 |
|
... | ... | |
932 | 938 |
mBelongs[i] = belongsToRotation(i,axisIndex,banBitmap); |
933 | 939 |
if( mBelongs[i] ) |
934 | 940 |
{ |
935 |
boolean result = mCubits[i].rotateCubit(quat); |
|
941 |
boolean result = mCubits[i].rotateCubit(quat,false);
|
|
936 | 942 |
if( !result ) debugQuat(quat,i,axisX,axisY,axisZ,angle,1); |
937 | 943 |
} |
938 | 944 |
} |
... | ... | |
953 | 959 |
} |
954 | 960 |
} |
955 | 961 |
} |
962 |
|
|
963 |
for(int i=0; i<mNumCubits; i++) |
|
964 |
{ |
|
965 |
float[] pos = mCubits[i].getCurrentPos(); |
|
966 |
int len = pos.length/3; |
|
967 |
for(int j=0; j<len; j++) clampPos(pos,3*j); |
|
968 |
} |
|
956 | 969 |
} |
957 | 970 |
} |
958 | 971 |
|
... | ... | |
1097 | 1110 |
mBelongs[i] = belongsToRotation(i, mCurrentRotAxis,mRotRowBitmap); |
1098 | 1111 |
if( mBelongs[i] ) |
1099 | 1112 |
{ |
1100 |
boolean result = mCubits[i].rotateCubit(quat); |
|
1113 |
boolean result = mCubits[i].rotateCubit(quat,true);
|
|
1101 | 1114 |
if( !result ) debugQuat(quat,i,axisX,axisY,axisZ,angle,2); |
1102 | 1115 |
} |
1103 | 1116 |
} |
... | ... | |
1125 | 1138 |
|
1126 | 1139 |
private void recomputeFaceOffsets() |
1127 | 1140 |
{ |
1128 |
for(int i=0; i<mNumPuzzleFaces; i++)
|
|
1141 |
if( mThereAreDeciders )
|
|
1129 | 1142 |
{ |
1130 |
mRowOffsets[i][0] =0; |
|
1131 |
mRowOffsets[i][1] =0; |
|
1132 |
mRowOffsets[i][2] =0; |
|
1133 |
} |
|
1134 |
|
|
1135 |
for(int i=0; i<mNumCubits; i++) |
|
1136 |
if( mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER ) |
|
1143 |
for(int i=0; i<mNumPuzzleFaces; i++) |
|
1137 | 1144 |
{ |
1138 |
float[] offset = mCubits[i].getOffset(); |
|
1139 |
int face = mCubits[i].getPuzzleFace(); |
|
1140 |
mRowOffsets[face][0] = offset[0]; |
|
1141 |
mRowOffsets[face][1] = offset[1]; |
|
1142 |
mRowOffsets[face][2] = offset[2]; |
|
1145 |
mRowOffsets[i][0] =0; |
|
1146 |
mRowOffsets[i][1] =0; |
|
1147 |
mRowOffsets[i][2] =0; |
|
1143 | 1148 |
} |
1149 |
|
|
1150 |
for(int i=0; i<mNumCubits; i++) |
|
1151 |
if( mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER ) |
|
1152 |
{ |
|
1153 |
float[] offset = mCubits[i].getOffset(); |
|
1154 |
int face = mCubits[i].getPuzzleFace(); |
|
1155 |
mRowOffsets[face][0] = offset[0]; |
|
1156 |
mRowOffsets[face][1] = offset[1]; |
|
1157 |
mRowOffsets[face][2] = offset[2]; |
|
1158 |
} |
|
1159 |
} |
|
1144 | 1160 |
} |
1145 | 1161 |
|
1146 | 1162 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
1380 | 1396 |
|
1381 | 1397 |
if( mQuatDebug[i]>=0 && mQuatDebug[i]<mNumQuats ) |
1382 | 1398 |
{ |
1383 |
boolean result = mCubits[i].rotateCubit(mObjectQuats[mQuatDebug[i]]); |
|
1399 |
boolean result = mCubits[i].rotateCubit(mObjectQuats[mQuatDebug[i]],true);
|
|
1384 | 1400 |
if( !result ) debugQuat(mObjectQuats[mQuatDebug[i]],i,0,0,0,mQuatDebug[i],3); |
1385 | 1401 |
} |
1386 | 1402 |
else { error = true; break; } |
src/main/java/org/distorted/objectlib/main/TwistyObjectCubit.java | ||
---|---|---|
205 | 205 |
|
206 | 206 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
207 | 207 |
|
208 |
boolean rotateCubit(Static4D quat) |
|
208 |
float[] getCurrentPos() |
|
209 |
{ |
|
210 |
return mCurrentPosition; |
|
211 |
} |
|
212 |
|
|
213 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
214 |
|
|
215 |
boolean rotateCubit(Static4D quat, boolean clamp) |
|
209 | 216 |
{ |
210 | 217 |
boolean result = true; |
211 | 218 |
int len = mLen/3; |
212 | 219 |
|
213 |
for(int i=0; i<len; i++) |
|
220 |
if( clamp ) |
|
221 |
{ |
|
222 |
for(int i=0; i<len; i++) |
|
223 |
{ |
|
224 |
QuatHelper.rotateVectorByQuat( mTmp, mCurrentPosition[3*i], mCurrentPosition[3*i+1], mCurrentPosition[3*i+2], 0, quat); |
|
225 |
mCurrentPosition[3*i ] = mTmp[0]; |
|
226 |
mCurrentPosition[3*i+1] = mTmp[1]; |
|
227 |
mCurrentPosition[3*i+2] = mTmp[2]; |
|
228 |
mParent.clampPos(mCurrentPosition, 3*i); |
|
229 |
} |
|
230 |
} |
|
231 |
else |
|
214 | 232 |
{ |
215 |
QuatHelper.rotateVectorByQuat( mTmp, mCurrentPosition[3*i], mCurrentPosition[3*i+1], mCurrentPosition[3*i+2], 0, quat); |
|
216 |
mCurrentPosition[3*i ] = mTmp[0]; |
|
217 |
mCurrentPosition[3*i+1] = mTmp[1]; |
|
218 |
mCurrentPosition[3*i+2] = mTmp[2]; |
|
219 |
mParent.clampPos(mCurrentPosition, 3*i); |
|
233 |
for(int i=0; i<len; i++) |
|
234 |
{ |
|
235 |
QuatHelper.rotateVectorByQuat( mTmp, mCurrentPosition[3*i], mCurrentPosition[3*i+1], mCurrentPosition[3*i+2], 0, quat); |
|
236 |
mCurrentPosition[3*i ] = mTmp[0]; |
|
237 |
mCurrentPosition[3*i+1] = mTmp[1]; |
|
238 |
mCurrentPosition[3*i+2] = mTmp[2]; |
|
239 |
} |
|
220 | 240 |
} |
221 | 241 |
|
222 | 242 |
if( mCubitType!=TYPE_NORMAL ) |
Also available in: Unified diff
Speedups for setupPosition(). Now the 587 moves of the Burr Cube is getting done visibly faster.