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/TwistyBandagedAbstract.java
59 59
  private Static4D[] mInitQuats;
60 60
  private int[][] mAxisMap;
61 61
  private int[][] mFaceMap;
62
  private float[][] mCuts;
63
  private boolean[][] mLayerRotatable;
62 64
  private Movement mMovement;
63 65
  ScrambleState[] mStates;
64 66
  float[][] POSITIONS;
......
313 315

  
314 316
  float[][] getCuts(int numLayers)
315 317
    {
316
    float[][] cuts = new float[3][numLayers-1];
318
    if( numLayers<2 ) return null;
317 319

  
318
    for(int i=0; i<numLayers-1; i++)
320
    if( mCuts==null )
319 321
      {
320
      float cut = (2-numLayers)*0.5f + i;
321
      cuts[0][i] = cut;
322
      cuts[1][i] = cut;
323
      cuts[2][i] = cut;
322
      mCuts = new float[3][numLayers-1];
323

  
324
      for(int i=0; i<numLayers-1; i++)
325
        {
326
        float cut = (2-numLayers)*0.5f + i;
327
        mCuts[0][i] = cut;
328
        mCuts[1][i] = cut;
329
        mCuts[2][i] = cut;
330
        }
324 331
      }
325 332

  
326
    return cuts;
333
    return mCuts;
334
    }
335

  
336
///////////////////////////////////////////////////////////////////////////////////////////////////
337

  
338
  private void getLayerRotatable(int numLayers)
339
    {
340
    if( mLayerRotatable==null )
341
      {
342
      int numAxis = ROT_AXIS.length;
343
      boolean[] tmp = new boolean[numLayers];
344
      for(int i=0; i<numLayers; i++) tmp[i] = true;
345
      mLayerRotatable = new boolean[numAxis][];
346
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
347
      }
327 348
    }
328 349

  
329 350
///////////////////////////////////////////////////////////////////////////////////////////////////
......
431 452

  
432 453
  public Movement getMovement()
433 454
    {
434
    if( mMovement==null ) mMovement = new MovementCube();
455
    if( mMovement==null )
456
      {
457
      int numLayers = getNumLayers();
458
      if( mCuts==null ) getCuts(numLayers);
459
      getLayerRotatable(numLayers);
460

  
461
      mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers);
462
      }
435 463
    return mMovement;
436 464
    }
437 465

  

Also available in: Unified diff