Revision 9224ffd2
Added by Leszek Koltunski about 4 years ago
src/main/java/org/distorted/object/RubikObject.java | ||
---|---|---|
53 | 53 |
|
54 | 54 |
private static final int POST_ROTATION_MILLISEC = 500; |
55 | 55 |
private final int NUM_CUBITS; |
56 |
private int mRotRow; |
|
56 |
private int mRotRowBitmap;
|
|
57 | 57 |
private int mRotAxis; |
58 | 58 |
private Static3D[] mOrigPos; |
59 | 59 |
private Static3D mScale, mNodeScale; |
... | ... | |
190 | 190 |
|
191 | 191 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
192 | 192 |
|
193 |
private boolean belongsToRotation( int cubit, int axis, int row) |
|
193 |
private boolean belongsToRotation( int cubit, int axis, int rowBitmap)
|
|
194 | 194 |
{ |
195 |
return ((int)(mCubits[cubit].mRotationRow[axis]+0.5f))==row; |
|
195 |
int cubitRow = (int)(mCubits[cubit].mRotationRow[axis]+0.5f); |
|
196 |
return ((1<<cubitRow)&rowBitmap)!=0; |
|
196 | 197 |
} |
197 | 198 |
|
198 | 199 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
221 | 222 |
|
222 | 223 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
223 | 224 |
// TODO |
225 |
// rotV : 0 --> VECTX, 1--> VECTY, 2 --> VECTZ |
|
226 |
// rotRC: 01010 --> move the 2nd and 4th layer |
|
227 |
// rotA : counterclockwise by rotA*90 degrees |
|
224 | 228 |
|
225 | 229 |
private boolean scheduleMultiRotation(int rotV, int rotRC, int rotA) |
226 | 230 |
{ |
... | ... | |
433 | 437 |
|
434 | 438 |
for(int i=0; i<NUM_CUBITS; i++) |
435 | 439 |
{ |
436 |
if( belongsToRotation(i,mRotAxis,mRotRow) ) |
|
440 |
if( belongsToRotation(i,mRotAxis,mRotRowBitmap) )
|
|
437 | 441 |
{ |
438 | 442 |
if( first ) |
439 | 443 |
{ |
... | ... | |
506 | 510 |
return; |
507 | 511 |
} |
508 | 512 |
|
509 |
mRotAxis = axis; |
|
510 |
mRotRow = row;
|
|
513 |
mRotAxis = axis;
|
|
514 |
mRotRowBitmap = (1<<row);
|
|
511 | 515 |
|
512 | 516 |
mRotationAngleStatic.set0(0.0f); |
513 | 517 |
|
514 | 518 |
for(int i=0; i<NUM_CUBITS; i++) |
515 |
if( belongsToRotation(i,mRotAxis,mRotRow) ) |
|
519 |
if( belongsToRotation(i,mRotAxis,mRotRowBitmap) )
|
|
516 | 520 |
{ |
517 | 521 |
mCubits[i].beginNewRotation(axis); |
518 | 522 |
} |
... | ... | |
520 | 524 |
|
521 | 525 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
522 | 526 |
|
523 |
public long addNewRotation( int axis, int row, int angle, long durationMillis, EffectListener listener ) |
|
527 |
public long addNewRotation( int axis, int rowBitmap, int angle, long durationMillis, EffectListener listener )
|
|
524 | 528 |
{ |
525 | 529 |
long effectID=0; |
526 | 530 |
boolean first = true; |
527 | 531 |
|
528 |
mRotAxis = axis; |
|
529 |
mRotRow = row;
|
|
532 |
mRotAxis = axis;
|
|
533 |
mRotRowBitmap = rowBitmap;
|
|
530 | 534 |
|
531 | 535 |
mRotationAngleStatic.set0(0.0f); |
532 | 536 |
|
533 | 537 |
for(int i=0; i<NUM_CUBITS; i++) |
534 |
if( belongsToRotation(i,mRotAxis,mRotRow) ) |
|
538 |
if( belongsToRotation(i,mRotAxis,mRotRowBitmap) )
|
|
535 | 539 |
{ |
536 | 540 |
mCubits[i].addNewRotation(axis,durationMillis,angle); |
537 | 541 |
|
... | ... | |
553 | 557 |
Static4D quat = null; |
554 | 558 |
|
555 | 559 |
for(int i=0; i<NUM_CUBITS; i++) |
556 |
if( belongsToRotation(i,mRotAxis,mRotRow) ) |
|
560 |
if( belongsToRotation(i,mRotAxis,mRotRowBitmap) )
|
|
557 | 561 |
{ |
558 | 562 |
if( first ) |
559 | 563 |
{ |
... | ... | |
575 | 579 |
int a2=move.charAt(2)-'0'; |
576 | 580 |
int a3=move.charAt(3)-'0'; |
577 | 581 |
|
578 |
int rotVector = (10*a1+a2)/32; // 0 --> VECTX, 1--> VECTY, 2 --> VECTZ
|
|
579 |
int rotBitmap = (10*a1+a2)%32; // 01010 --> move the 2nd and 4th layer
|
|
580 |
int rotAngle = 2-a3; // counterclockwise by rotAngle*90 degrees
|
|
582 |
int rotVector = (10*a1+a2)/32; |
|
583 |
int rotBitmap = (10*a1+a2)%32; |
|
584 |
int rotAngle = 2-a3; |
|
581 | 585 |
|
582 | 586 |
return scheduleMultiRotation(rotVector, rotBitmap, rotAngle); |
583 | 587 |
} |
Also available in: Unified diff
extend the RubikObject API to make it possible to add rotations of multiple rows simultaneously (all along the same axis of course!)