Project

General

Profile

« Previous | Next » 

Revision 8ba7aeb1

Added by Leszek Koltunski over 3 years ago

RubikControl: rotate the cube.

View differences:

src/main/java/org/distorted/control/RubikControl.java
23 23
import org.distorted.library.main.DistortedScreen;
24 24
import org.distorted.library.message.EffectListener;
25 25
import org.distorted.main.RubikActivity;
26
import org.distorted.main.RubikSurfaceView;
26 27

  
27 28
import java.lang.ref.WeakReference;
28 29

  
......
46 47
    return act!=null ? act.getScreen() : null;
47 48
    }
48 49

  
50
///////////////////////////////////////////////////////////////////////////////////////////////////
51

  
52
  RubikSurfaceView getSurfaceView()
53
    {
54
    RubikActivity act = mRefAct.get();
55
    return act!=null ? act.getSurfaceView() : null;
56
    }
57

  
49 58
///////////////////////////////////////////////////////////////////////////////////////////////////
50 59

  
51 60
  private void addWholeObjects()
src/main/java/org/distorted/control/RubikControlWhole.java
34 34
import org.distorted.library.type.Static3D;
35 35
import org.distorted.main.R;
36 36
import org.distorted.main.RubikActivity;
37
import org.distorted.main.RubikSurfaceView;
37 38

  
38 39
import java.io.IOException;
39 40
import java.io.InputStream;
......
55 56
  private static final int[] DYN = { 2, 1, 1, 1, 2, 2, 4, 2, 2, 2, 2, 2, 4};
56 57

  
57 58
  private float X0, X1, X2, Y1, D, s001, s014, s033, F;
59
  private int mWidth, mHeight;
58 60

  
59 61
  private final RubikControl mControl;
60 62
  private DistortedEffects[] mEffects;
......
274 276

  
275 277
    mDynMoveHand1.add(mPosition1);
276 278
    mDynMoveShad1.add(mPosition1);
279

  
280
    RubikSurfaceView view = mControl.getSurfaceView();
281
    float x = point1.get0() + mWidth*0.5f;
282
    float y = mHeight*0.5f - point1.get1();
283
    view.prepareDown();
284
    view.actionDown(x,y);
277 285
    }
278 286

  
279 287
///////////////////////////////////////////////////////////////////////////////////////////////////
......
767 775
    mEffects[3].apply(moveHand2);
768 776

  
769 777
    DistortedScreen screen = mControl.getScreen();
770
    int wid= screen.getWidth();
771
    int hei= screen.getHeight();
772

  
773
    X0   = wid*0.55f;
774
    X1   = wid*0.45f;
775
    X2   = wid*0.35f;
776
    Y1   = hei*0.28f;
777
    D    = wid*0.01f;
778
    s001 = wid*0.0001f;
779
    s014 = wid*0.14f;
780
    s033 = wid*0.33f;
778
    mWidth = screen.getWidth();
779
    mHeight= screen.getHeight();
780

  
781
    X0   = mWidth*0.65f;
782
    X1   = mWidth*0.50f;
783
    X2   = mWidth*0.35f;
784
    Y1   = mHeight*0.28f;
785
    D    = mWidth*0.01f;
786
    s001 = mWidth*0.0001f;
787
    s014 = mWidth*0.14f;
788
    s033 = mWidth*0.33f;
781 789
    F    = 0.60f;
782 790
    }
783 791

  
......
886 894
      {
887 895
      case 1: boolean finished1 = mDyn1.get( tmpBuffer,0, time, mDiffTime);
888 896
              mPosition1.set(tmpBuffer[0], tmpBuffer[1], tmpBuffer[2]);
889
              if( finished1 ) stageFinished(mCurrentStage);
897

  
898
              if( mCurrentStage==3 )
899
                {
900
                RubikSurfaceView view = mControl.getSurfaceView();
901
                float x = tmpBuffer[0]+mWidth*0.5f;
902
                float y = mHeight*0.5f-tmpBuffer[1];
903
                view.actionMove(x,y);
904
                }
905

  
906
              if( finished1 )
907
                {
908
                if( mCurrentStage==3 )
909
                  {
910
                  RubikSurfaceView view = mControl.getSurfaceView();
911
                  view.prepareUp();
912
                  view.actionUp();
913
                  }
914

  
915
                stageFinished(mCurrentStage);
916
                }
890 917
              break;
891 918
      case 2: boolean finished2_1 = mDyn1.get( tmpBuffer,0, time, mDiffTime);
892 919
              boolean finished2_2 = mDyn2.get( tmpBuffer,3, time, mDiffTime);
src/main/java/org/distorted/main/RubikActivity.java
396 396

  
397 397
///////////////////////////////////////////////////////////////////////////////////////////////////
398 398

  
399
    public int getScreenWidthInPixels()
399
    public RubikPreRender getPreRender()
400 400
      {
401
      return mScreenWidth;
401
      RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
402
      return view.getPreRender();
402 403
      }
403 404

  
404 405
///////////////////////////////////////////////////////////////////////////////////////////////////
405 406

  
406
    public int getScreenHeightInPixels()
407
    public RubikSurfaceView getSurfaceView()
407 408
      {
408
      return mScreenHeight;
409
      return findViewById(R.id.rubikSurfaceView);
409 410
      }
410 411

  
411 412
///////////////////////////////////////////////////////////////////////////////////////////////////
412 413

  
413
    public RubikPreRender getPreRender()
414
    public int getScreenWidthInPixels()
414 415
      {
415
      RubikSurfaceView view = findViewById(R.id.rubikSurfaceView);
416
      return view.getPreRender();
416
      return mScreenWidth;
417
      }
418

  
419
///////////////////////////////////////////////////////////////////////////////////////////////////
420

  
421
    public int getScreenHeightInPixels()
422
      {
423
      return mScreenHeight;
417 424
      }
418 425

  
419 426
///////////////////////////////////////////////////////////////////////////////////////////////////
src/main/java/org/distorted/main/RubikSurfaceView.java
80 80

  
81 81
    private int mPointer1, mPointer2;
82 82
    private float mX1, mY1, mX2, mY2, mX, mY;
83
    private boolean mIsAutomatic;
83 84

  
84 85
    private static final Static4D mQuat= new Static4D(-0.25189602f,0.3546389f,0.009657208f,0.90038127f);
85 86
    private static final Static4D mTemp= new Static4D(0,0,0,1);
......
342 343
          {
343 344
          final RubikActivity act = (RubikActivity)getContext();
344 345

  
345
          mDragging           = !act.isLocked();
346
          mDragging           = (!act.isLocked() || mIsAutomatic);
346 347
          mBeginningRotation  = false;
347 348
          mContinuingRotation = false;
348 349
          }
......
529 530

  
530 531
///////////////////////////////////////////////////////////////////////////////////////////////////
531 532

  
532
    private void prepareUp()
533
    private void prepareUp(MotionEvent event)
533 534
      {
534 535
      mPointer1 = INVALID_POINTER_ID;
535 536
      mPointer2 = INVALID_POINTER_ID;
......
575 576

  
576 577
      if(!isInEditMode())
577 578
        {
579
        mIsAutomatic = false;
580

  
578 581
        mLastCubitColor = -1;
579 582
        mCurrRotSpeed   = 0.0f;
580 583

  
......
623 626

  
624 627
///////////////////////////////////////////////////////////////////////////////////////////////////
625 628

  
626
    public void actionMove(int p1, float x1, float y1, int p2, float x2, float y2)
629
    public void prepareDown()
627 630
      {
628
      float pX = p1 != INVALID_POINTER_ID ? x1 : x2;
629
      float pY = p1 != INVALID_POINTER_ID ? y1 : y2;
631
      mIsAutomatic = true;
632
      mPointer1 = 0;
633
      mPointer2 = INVALID_POINTER_ID;
634
      }
635

  
636
///////////////////////////////////////////////////////////////////////////////////////////////////
637

  
638
    public void prepareUp()
639
      {
640
      mIsAutomatic = false;
641
      mPointer1 = INVALID_POINTER_ID;
642
      mPointer2 = INVALID_POINTER_ID;
643
      }
644

  
645
///////////////////////////////////////////////////////////////////////////////////////////////////
646

  
647
    public void actionMove(float pX, float pY)
648
      {
649
      //android.util.Log.e("D", "ACTION MOVE x="+pX+" y="+pY+" mDragging="+mDragging);
630 650

  
631 651
      float x = (pX - mScreenWidth*0.5f)/mScreenMin;
632 652
      float y = (mScreenHeight*0.5f -pY)/mScreenMin;
......
654 674

  
655 675
///////////////////////////////////////////////////////////////////////////////////////////////////
656 676

  
657
    public void actionDown(float x1, float y1)
677
    public void actionDown(float x, float y)
658 678
      {
659
      mX = (x1 -  mScreenWidth*0.5f)/mScreenMin;
660
      mY = (mScreenHeight*0.5f - y1)/mScreenMin;
679
      //android.util.Log.e("D", "ACTION DOWN x="+x+" y="+y);
680

  
681
      mX = (x -  mScreenWidth*0.5f)/mScreenMin;
682
      mY = (mScreenHeight*0.5f - y)/mScreenMin;
661 683

  
662 684
      setUpDragOrRotate(true,mX,mY);
663 685
      }
......
666 688

  
667 689
    public void actionUp()
668 690
      {
691
      //android.util.Log.e("D", "ACTION UP");
692

  
669 693
      if( mContinuingRotation )
670 694
        {
671 695
        finishRotation();
......
702 726

  
703 727
///////////////////////////////////////////////////////////////////////////////////////////////////
704 728

  
705
    public void actionUp2(int p1, float x1, float y1, int p2, float x2, float y2)
729
    public void actionUp2(boolean p1isUp, float x1, float y1, boolean p2isUp, float x2, float y2)
706 730
      {
707
      if( p1==INVALID_POINTER_ID )
731
      if( p1isUp )
708 732
        {
709 733
        mX = (x2 -  mScreenWidth*0.5f)/mScreenMin;
710 734
        mY = (mScreenHeight*0.5f - y2)/mScreenMin;
711 735
        }
712
      if( p2==INVALID_POINTER_ID )
736
      if( p2isUp )
713 737
        {
714 738
        mX = (x1 -  mScreenWidth*0.5f)/mScreenMin;
715 739
        mY = (mScreenHeight*0.5f - y1)/mScreenMin;
......
729 753
                                               actionDown(mX1, mY1);
730 754
                                               break;
731 755
         case MotionEvent.ACTION_MOVE        : prepareMove(event);
732
                                               actionMove(mPointer1, mX1, mY1, mPointer2, mX2, mY2);
756
                                               float x = mPointer1 != INVALID_POINTER_ID ? mX1 : mX2;
757
                                               float y = mPointer1 != INVALID_POINTER_ID ? mY1 : mY2;
758
                                               actionMove(x,y);
733 759
                                               break;
734
         case MotionEvent.ACTION_UP          : prepareUp();
760
         case MotionEvent.ACTION_UP          : prepareUp(event);
735 761
                                               actionUp();
736 762
                                               break;
737 763
         case MotionEvent.ACTION_POINTER_DOWN: prepareDown2(event);
738 764
                                               actionDown2(mX1, mY1, mX2, mY2);
739 765
                                               break;
740 766
         case MotionEvent.ACTION_POINTER_UP  : prepareUp2(event);
741
                                               actionUp2(mPointer1, mX1, mY1, mPointer2, mX2, mY2);
767
                                               boolean p1isUp = mPointer1==INVALID_POINTER_ID;
768
                                               boolean p2isUp = mPointer2==INVALID_POINTER_ID;
769
                                               actionUp2(p1isUp, mX1, mY1, p2isUp, mX2, mY2);
742 770
                                               break;
743 771
         }
744 772

  

Also available in: Unified diff