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/TwistyCube.java
44 44

  
45 45
  private ScrambleState[] mStates;
46 46
  private Static4D[] mQuats;
47
  private float[][] mCuts;
48
  private boolean[][] mLayerRotatable;
47 49
  private int[] mBasicAngle;
48 50
  private ObjectSticker[] mStickers;
49 51
  private Movement mMovement;
......
275 277

  
276 278
  float[][] getCuts(int numLayers)
277 279
    {
278
    float[][] cuts = new float[3][numLayers-1];
280
    if( numLayers<2 ) return null;
279 281

  
280
    for(int i=0; i<numLayers-1; i++)
282
    if( mCuts==null )
281 283
      {
282
      float cut = (2-numLayers)*0.5f + i;
283
      cuts[0][i] = cut;
284
      cuts[1][i] = cut;
285
      cuts[2][i] = cut;
284
      mCuts = new float[3][numLayers-1];
285

  
286
      for(int i=0; i<numLayers-1; i++)
287
        {
288
        float cut = (2-numLayers)*0.5f + i;
289
        mCuts[0][i] = cut;
290
        mCuts[1][i] = cut;
291
        mCuts[2][i] = cut;
292
        }
286 293
      }
287 294

  
288
    return cuts;
295
    return mCuts;
296
    }
297

  
298
///////////////////////////////////////////////////////////////////////////////////////////////////
299

  
300
  private void getLayerRotatable(int numLayers)
301
    {
302
    if( mLayerRotatable==null )
303
      {
304
      int numAxis = ROT_AXIS.length;
305
      boolean[] tmp = new boolean[numLayers];
306
      for(int i=0; i<numLayers; i++) tmp[i] = true;
307
      mLayerRotatable = new boolean[numAxis][];
308
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
309
      }
289 310
    }
290 311

  
291 312
///////////////////////////////////////////////////////////////////////////////////////////////////
......
328 349

  
329 350
  public Movement getMovement()
330 351
    {
331
    if( mMovement==null ) mMovement = new MovementCube();
352
    if( mMovement==null )
353
      {
354
      int numLayers = getNumLayers();
355
      if( mCuts==null ) getCuts(numLayers);
356
      getLayerRotatable(numLayers);
357

  
358
      mMovement = new MovementCube(mCuts,mLayerRotatable,numLayers);
359
      }
332 360
    return mMovement;
333 361
    }
334 362

  

Also available in: Unified diff