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/TwistyPyraminx.java
46 46
  private ScrambleState[] mStates;
47 47
  private int[] mBasicAngle;
48 48
  private Static4D[] mQuats;
49
  private float[][] mCuts;
50
  private boolean[][] mLayerRotatable;
49 51
  private ObjectSticker[] mStickers;
50 52
  private Movement mMovement;
51 53

  
......
214 216

  
215 217
  float[][] getCuts(int numLayers)
216 218
    {
217
    float[][] cuts = new float[4][numLayers-1];
218

  
219
    for(int i=0; i<numLayers-1; i++)
219
    if( mCuts==null )
220 220
      {
221
      float cut = (1.0f+i-numLayers/3.0f)*(SQ6/3);
222
      cuts[0][i] = cut;
223
      cuts[1][i] = cut;
224
      cuts[2][i] = cut;
225
      cuts[3][i] = cut;
221
      mCuts = new float[4][numLayers-1];
222

  
223
      for(int i=0; i<numLayers-1; i++)
224
        {
225
        float cut = (1.0f+i-numLayers/3.0f)*(SQ6/3);
226
        mCuts[0][i] = cut;
227
        mCuts[1][i] = cut;
228
        mCuts[2][i] = cut;
229
        mCuts[3][i] = cut;
230
        }
226 231
      }
227 232

  
228
    return cuts;
233
    return mCuts;
234
    }
235

  
236
///////////////////////////////////////////////////////////////////////////////////////////////////
237

  
238
  private void getLayerRotatable(int numLayers)
239
    {
240
    if( mLayerRotatable==null )
241
      {
242
      int numAxis = ROT_AXIS.length;
243
      boolean[] tmp = new boolean[numLayers];
244
      for(int i=0; i<numLayers; i++) tmp[i] = true;
245
      mLayerRotatable = new boolean[numAxis][];
246
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
247
      }
229 248
    }
230 249

  
231 250
///////////////////////////////////////////////////////////////////////////////////////////////////
......
357 376

  
358 377
  public Movement getMovement()
359 378
    {
360
    if( mMovement==null ) mMovement = new MovementPyraminx();
379
    if( mMovement==null )
380
      {
381
      int numLayers = getNumLayers();
382
      if( mCuts==null ) getCuts(numLayers);
383
      getLayerRotatable(numLayers);
384

  
385
      mMovement = new MovementPyraminx(mCuts,mLayerRotatable,numLayers);
386
      }
361 387
    return mMovement;
362 388
    }
363 389

  

Also available in: Unified diff