Project

General

Profile

« Previous | Next » 

Revision ef018c1b

Added by Leszek Koltunski over 2 years ago

Abstract the next function, computeRowFromOffset(), out of the individual Movement classes.
Still two issues:

1) mysterious 1.5 multiplier in Movement12
2) in Movement8, moving the offset works only if the rotAxis are face-turning, i.e. they connect the centers of the opposing faces of the octahedron.

View differences:

src/main/java/org/distorted/objects/TwistyMirror.java
49 49

  
50 50
  private ScrambleState[] mStates;
51 51
  private Static4D[] mQuats;
52
  private float[][] mCuts;
53
  private boolean[][] mLayerRotatable;
52 54
  private int[] mBasicAngle;
53 55
  private ObjectSticker[] mStickers;
54 56
  private float[][] mPositions;
......
591 593

  
592 594
  float[][] getCuts(int numLayers)
593 595
    {
594
    float[][] cuts = new float[3][numLayers-1];
595

  
596
    for(int i=0; i<numLayers-1; i++)
596
    if( mCuts==null )
597 597
      {
598
      float cut = (2-numLayers)*0.5f + i;
599
      cuts[0][i] = cut;
600
      cuts[1][i] = cut;
601
      cuts[2][i] = cut;
598
      mCuts = new float[3][numLayers-1];
599

  
600
      for(int i=0; i<numLayers-1; i++)
601
        {
602
        float cut = (2-numLayers)*0.5f + i;
603
        mCuts[0][i] = cut;
604
        mCuts[1][i] = cut;
605
        mCuts[2][i] = cut;
606
        }
602 607
      }
603 608

  
604
    return cuts;
609
    return mCuts;
610
    }
611

  
612
///////////////////////////////////////////////////////////////////////////////////////////////////
613

  
614
  private void getLayerRotatable(int numLayers)
615
    {
616
    if( mLayerRotatable==null )
617
      {
618
      int numAxis = ROT_AXIS.length;
619
      boolean[] tmp = new boolean[numLayers];
620
      for(int i=0; i<numLayers; i++) tmp[i] = true;
621
      mLayerRotatable = new boolean[numAxis][];
622
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
623
      }
605 624
    }
606 625

  
607 626
///////////////////////////////////////////////////////////////////////////////////////////////////
......
630 649

  
631 650
  public Movement getMovement()
632 651
    {
633
    if( mMovement==null ) mMovement = new MovementCube();
652
    if( mMovement==null )
653
      {
654
      int numLayers = getNumLayers();
655
      if( mCuts==null ) getCuts(numLayers);
656
      getLayerRotatable(numLayers);
657

  
658
      mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers);
659
      }
634 660
    return mMovement;
635 661
    }
636 662

  

Also available in: Unified diff