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/TwistyDiamond.java
47 47
  private ScrambleState[] mStates;
48 48
  private int[] mBasicAngle;
49 49
  private int[] mFaceMap;
50
  private float[][] mCuts;
51
  private boolean[][] mLayerRotatable;
50 52
  private Static4D[] mQuats;
51 53
  private int[] mTetraToFaceMap;
52 54
  private ObjectSticker[] mStickers;
......
143 145

  
144 146
  float[][] getCuts(int numLayers)
145 147
    {
146
    if( numLayers<2 )
147
      {
148
      return null;
149
      }
150
    else
148
    if( numLayers<2 ) return null;
149

  
150
    if( mCuts==null )
151 151
      {
152
      float[][] cuts = new float[4][numLayers-1];
153
      float dist = SQ6/3;
154
      float cut  = 0.5f*dist*(2-numLayers);
152
      mCuts = new float[4][numLayers-1];
153
      float cut = (SQ6/6)*(2-numLayers);
155 154

  
156 155
      for(int i=0; i<numLayers-1; i++)
157 156
        {
158
        cuts[0][i] = cut;
159
        cuts[1][i] = cut;
160
        cuts[2][i] = cut;
161
        cuts[3][i] = cut;
162
        cut += dist;
157
        mCuts[0][i] = cut;
158
        mCuts[1][i] = cut;
159
        mCuts[2][i] = cut;
160
        mCuts[3][i] = cut;
161
        cut += SQ6/3;
163 162
        }
163
      }
164

  
165
    return mCuts;
166
    }
164 167

  
165
      return cuts;
168
///////////////////////////////////////////////////////////////////////////////////////////////////
169

  
170
  private void getLayerRotatable(int numLayers)
171
    {
172
    if( mLayerRotatable==null )
173
      {
174
      int numAxis = ROT_AXIS.length;
175
      boolean[] tmp = new boolean[numLayers];
176
      for(int i=0; i<numLayers; i++) tmp[i] = true;
177
      mLayerRotatable = new boolean[numAxis][];
178
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
166 179
      }
167 180
    }
168 181

  
......
479 492

  
480 493
  public Movement getMovement()
481 494
    {
482
    if( mMovement==null ) mMovement = new MovementDiamond();
495
    if( mMovement==null )
496
      {
497
      int numLayers = getNumLayers();
498
      if( mCuts==null ) getCuts(numLayers);
499
      getLayerRotatable(numLayers);
500

  
501
      mMovement = new MovementDiamond(mCuts,mLayerRotatable,numLayers);
502
      }
483 503
    return mMovement;
484 504
    }
485 505

  

Also available in: Unified diff