Project

General

Profile

« Previous | Next » 

Revision af0de0af

Added by Leszek Koltunski over 2 years ago

Remove statics from the Minx classes.

View differences:

src/main/java/org/distorted/objects/TwistyKilominx.java
34 34

  
35 35
public class TwistyKilominx extends TwistyMinx
36 36
{
37
  private static final int[] mCenterFaceMap = new int[]
37
  private int[] mCenterFaceMap;
38

  
39
///////////////////////////////////////////////////////////////////////////////////////////////////
40

  
41
  TwistyKilominx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
42
                 DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
43
    {
44
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.KILO, res, scrWidth);
45
    }
46

  
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48

  
49
  void initializeCenterFaceMap()
50
    {
51
    mCenterFaceMap = new int[]
38 52
      {
39 53
        0,0,0,0,1,
40 54
        1,0,1,1,0,
......
49 63
        2,1,0,1,2,
50 64
        2,2,2,2,2
51 65
      };
52

  
53
  private static final float CENTER_CORR = 0.87f;
54

  
55
  private static final float[][] STICKERS = new float[][]
56
      {
57
        { -0.36616942f, -0.36327124f, 0.5f, -0.36327124f, 0.23233888f, 0.4605048f, -0.36616942f, 0.26603764f },
58
        { -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f },
59
        { -0.3249197f, -0.39442718f, 0.3249197f, -0.39442718f, 0.3249197f, 0.5f, -0.3249197f, 0.2888544f }
60
      };
61

  
62
  static
63
    {
64
    final float C = 1.14f; // make the 'center' sticker artificially larger, so that we paint
65
                           // over the area in the center of the face.
66

  
67
    STICKERS[0][0] *= C;
68
    STICKERS[0][1] *= C;
69
    STICKERS[0][2] *= C;
70
    STICKERS[0][3] *= C;
71
    STICKERS[0][4] *= C;
72
    STICKERS[0][5] *= C;
73
    STICKERS[0][6] *= C;
74
    STICKERS[0][7] *= C;
75

  
76
    STICKERS[0][2] *= CENTER_CORR;
77
    STICKERS[0][3] *= CENTER_CORR;
78
    }
79

  
80
  private static final ObjectSticker[] mStickers;
81
  static
82
    {
83
    mStickers = new ObjectSticker[STICKERS.length];
84

  
85
    float R = 0.10f;
86
    final float[][] radii = { {R,R,R,R},{R,R,R,R},{R,R,R,R} };
87
    final float[] strokes = { 0.20f, 0.11f, 0.10f };
88

  
89
    for(int s=0; s<STICKERS.length; s++)
90
      {
91
      mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]);
92
      }
93
    }
94

  
95
///////////////////////////////////////////////////////////////////////////////////////////////////
96

  
97
  TwistyKilominx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
98
                 DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
99
    {
100
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.KILO, res, scrWidth);
101 66
    }
102 67

  
103 68
///////////////////////////////////////////////////////////////////////////////////////////////////
......
169 134

  
170 135
  private void computeBasicCornerVectors(int corner)
171 136
    {
172
    Static4D quat = QUATS[QUAT_CORNER_INDICES[corner]];
137
    if( mQuatCornerIndices==null ) initializeQuatIndices();
138
    if( mQuats==null ) initializeQuats();
139
    if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV();
140

  
141
    Static4D quat = mQuats[mQuatCornerIndices[corner]];
173 142

  
174 143
    mCurrCornerV[0] = QuatHelper.rotateVectorByQuat(mBasicCornerV[0],quat);
175 144
    mCurrCornerV[1] = QuatHelper.rotateVectorByQuat(mBasicCornerV[1],quat);
......
180 149

  
181 150
  private float[] computeCorner(int numCubitsPerCorner, int numLayers, int corner, int part)
182 151
    {
152
    if( mCorners==null ) initializeCorners();
153
    if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV();
154

  
183 155
    float D = numLayers/3.0f;
184
    float[] corn = CORNERS[corner];
156
    float[] corn = mCorners[corner];
185 157

  
186 158
    if( part==0 )
187 159
      {
......
212 184

  
213 185
  private float[] computeCenter(int numLayers, int center, int part)
214 186
    {
187
    if( mCenterCoords==null ) initializeCenterCoords();
188
    if( mCorners     ==null ) initializeCorners();
189
    if( mCenterMap   ==null ) initializeCenterMap();
190

  
215 191
    int corner = mCenterMap[center][part];
216 192
    float[] cent = mCenterCoords[center];
217
    float[] corn = CORNERS[corner];
193
    float[] corn = mCorners[corner];
218 194
    float D = numLayers/3.0f;
219 195
    float F = 1.0f - (2.0f*numLayers-6.0f)/(numLayers-1)*COS54*COS54;
220 196

  
......
238 214

  
239 215
  private float[] computeEdge(int numLayers, int edge, int part)
240 216
    {
217
    if( mCenterCoords==null ) initializeCenterCoords();
218
    if( mCorners==null ) initializeCorners();
219
    if( mEdgeMap==null ) initializeEdgeMap();
220

  
241 221
    float D = numLayers/3.0f;
242
    float[] c1 = CORNERS[ mEdgeMap[edge][0] ];
243
    float[] c2 = CORNERS[ mEdgeMap[edge][1] ];
222
    float[] c1 = mCorners[ mEdgeMap[edge][0] ];
223
    float[] c2 = mCorners[ mEdgeMap[edge][1] ];
244 224

  
245 225
    int leftRight = 2*(part%2) -1;
246 226
    part /= 2;
......
284 264

  
285 265
  float[][] getCubitPositions(int numLayers)
286 266
    {
287
    if( numLayers<5 ) return CORNERS;
267
    if( mCorners==null ) initializeCorners();
268
    if( numLayers<5 ) return mCorners;
288 269

  
289 270
    int numCubitsPerCorner = numCubitsPerCorner(numLayers);
290 271
    int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
......
327 308

  
328 309
  private int getQuat(int cubit, int numCubitsPerCorner, int numCubitsPerEdge)
329 310
    {
311
    if( mQuatCornerIndices==null || mQuatEdgeIndices==null ) initializeQuatIndices();
312
    if( mCenterMap==null ) initializeCenterMap();
313

  
330 314
    if( cubit < NUM_CORNERS*numCubitsPerCorner )
331 315
      {
332 316
      int corner = cubit/numCubitsPerCorner;
333
      return QUAT_CORNER_INDICES[corner];
317
      return mQuatCornerIndices[corner];
334 318
      }
335 319

  
336 320
    if( cubit < NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge )
337 321
      {
338 322
      int edge = (cubit-NUM_CORNERS*numCubitsPerCorner)/numCubitsPerEdge;
339
      return QUAT_EDGE_INDICES[edge];
323
      return mQuatEdgeIndices[edge];
340 324
      }
341 325

  
342 326
    if( numCubitsPerCorner==0 )
343 327
      {
344
      return QUAT_CORNER_INDICES[cubit];
328
      return mQuatCornerIndices[cubit];
345 329
      }
346 330
    else
347 331
      {
......
351 335
      int index= cubit%numCubitsPerCenter;
352 336
      int corner=mCenterMap[face][index];
353 337

  
354
      return QUAT_CORNER_INDICES[corner];
338
      return mQuatCornerIndices[corner];
355 339
      }
356 340
    }
357 341

  
......
537 521

  
538 522
  Static4D getQuat(int cubit, int numLayers)
539 523
    {
524
    if( mQuats==null ) initializeQuats();
540 525
    int numCubitsPerCorner = numCubitsPerCorner(numLayers);
541 526
    int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
542 527

  
543
    return QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
528
    return mQuats[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
544 529
    }
545 530

  
546 531
///////////////////////////////////////////////////////////////////////////////////////////////////
......
581 566

  
582 567
  int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner)
583 568
    {
569
    if( mCornerFaceMap==null ) initializeCornerFaceMap();
584 570
    if( cubitface<0 || cubitface>2 ) return NUM_TEXTURES;
585 571

  
586 572
    int part  = cubit % numCubitsPerCorner;
......
627 613

  
628 614
    int part    = edge % numCubitsPerEdge;
629 615
    int variant = edge / numCubitsPerEdge;
616
    if( mEdgeMap==null ) initializeEdgeMap();
630 617

  
631 618
    part /=2;
632 619

  
......
637 624

  
638 625
  int getCenterColor(int center, int cubitface, int numLayers)
639 626
    {
640
     if( numLayers==3 )
627
    if( mCenterFaceMap==null ) initializeCenterFaceMap();
628
    if( mCornerFaceMap==null ) initializeCornerFaceMap();
629

  
630
    if( numLayers==3 )
641 631
      {
642 632
      return cubitface>=0 && cubitface<3 ? mCornerFaceMap[center][cubitface] : NUM_TEXTURES;
643 633
      }
......
679 669

  
680 670
  ObjectSticker retSticker(int face)
681 671
    {
672
    if( mStickers==null )
673
      {
674
      float[][] STICKERS = new float[][]
675
        {
676
          { -0.36616942f, -0.36327124f, 0.5f, -0.36327124f, 0.23233888f, 0.4605048f, -0.36616942f, 0.26603764f },
677
          { -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f },
678
          { -0.3249197f, -0.39442718f, 0.3249197f, -0.39442718f, 0.3249197f, 0.5f, -0.3249197f, 0.2888544f }
679
        };
680

  
681
      float CENTER_CORR = 0.87f;
682
      float C = 1.14f; // make the 'center' sticker artificially larger, so that we paint over the area in the center of the face.
683

  
684
      STICKERS[0][0] *= C;
685
      STICKERS[0][1] *= C;
686
      STICKERS[0][2] *= C;
687
      STICKERS[0][3] *= C;
688
      STICKERS[0][4] *= C;
689
      STICKERS[0][5] *= C;
690
      STICKERS[0][6] *= C;
691
      STICKERS[0][7] *= C;
692

  
693
      STICKERS[0][2] *= CENTER_CORR;
694
      STICKERS[0][3] *= CENTER_CORR;
695

  
696
      mStickers = new ObjectSticker[STICKERS.length];
697

  
698
      float R = 0.10f;
699
      final float[][] radii = { {R,R,R,R},{R,R,R,R},{R,R,R,R} };
700
      final float[] strokes = { 0.20f, 0.11f, 0.10f };
701

  
702
      for(int s=0; s<STICKERS.length; s++)
703
        {
704
        mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]);
705
        }
706
      }
707

  
682 708
    return mStickers[getStickerIndex(face)];
683 709
    }
684 710

  
src/main/java/org/distorted/objects/TwistyMegaminx.java
35 35
public class TwistyMegaminx extends TwistyMinx
36 36
{
37 37
  static final float MEGA_D = 0.04f;
38
  private int[] mQuatCenterIndices;
38 39

  
39
  private static final int[] QUAT_CENTER_INDICES =
40
      {
41
        16, 18, 22,  1, 20, 13, 14, 15,  0, 12,  2,  3
42
      };
40
///////////////////////////////////////////////////////////////////////////////////////////////////
43 41

  
44
  private static final float[][] STICKERS = new float[][]
45
      {
46
        { -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f },
47
        { -0.5f, -0.0914315f, 0.5f, -0.4163512f, 0.5f, 0.4163512f, -0.5f, 0.0914315f },
48
        { -0.49233657f, -0.18006028f, 0.49233657f, -0.5f, 0.49233657f, 0.5f, -0.49233657f, 0.18006028f },
49
        { -0.3002273f, -0.30490047f, 0.3002273f, -0.5f, 0.3002273f, 0.5f, -0.3002273f, 0.30490047f },
50
        { -0.29389262f, 0.4045085f, -0.47552824f, -0.1545085f, 0.0f, -0.5f, 0.47552824f, -0.1545085f, 0.29389262f, 0.4045085f }
51
      };
52

  
53
  private static final ObjectSticker[] mStickers;
54
  static
42
  TwistyMegaminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
43
                 DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
55 44
    {
56
    mStickers = new ObjectSticker[STICKERS.length];
57

  
58
    final float R0 = 0.08f;
59
    final float R1 = 0.12f;
60
    final float R2 = 0.12f;
61
    final float R3 = 0.08f;
62
    final float R4 = 0.10f;
63
    final float[][] radii = { {R0,R0,R0,R0},{R1,R1,R1,R1},{R2,R2,R2,R2},{R3,R3,R3,R3},{R4,R4,R4,R4,R4} };
64
    final float[] strokes = { 0.10f,0.12f,0.12f,0.08f,0.07f };
65

  
66
    for(int s=0; s<STICKERS.length; s++)
67
      {
68
      mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]);
69
      }
45
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.MEGA, res, scrWidth);
70 46
    }
71 47

  
72 48
///////////////////////////////////////////////////////////////////////////////////////////////////
73 49

  
74
  TwistyMegaminx(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
75
                 DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
50
  private void initializeCenterIndices()
76 51
    {
77
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.MEGA, res, scrWidth);
52
    mQuatCenterIndices = new int[] { 16, 18, 22,  1, 20, 13, 14, 15,  0, 12,  2,  3 };
78 53
    }
79 54

  
80 55
///////////////////////////////////////////////////////////////////////////////////////////////////
......
144 119

  
145 120
  private float[] computeCenter(int center, int numLayers)
146 121
    {
122
    if( mCenterCoords==null ) initializeCenterCoords();
147 123
    float[] coords = mCenterCoords[center];
148 124
    float A = numLayers/3.0f;
149 125

  
......
156 132

  
157 133
  private void computeBasicCornerVectors(int corner)
158 134
    {
159
    Static4D quat = QUATS[QUAT_CORNER_INDICES[corner]];
135
    if( mQuatCornerIndices==null ) initializeQuatIndices();
136
    if( mQuats==null ) initializeQuats();
137
    if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV();
138

  
139
    Static4D quat = mQuats[mQuatCornerIndices[corner]];
160 140

  
161 141
    mCurrCornerV[0] = QuatHelper.rotateVectorByQuat(mBasicCornerV[0],quat);
162 142
    mCurrCornerV[1] = QuatHelper.rotateVectorByQuat(mBasicCornerV[1],quat);
......
167 147

  
168 148
  private float[] computeCorner(int numCubitsPerCorner, int numLayers, int corner, int part)
169 149
    {
150
    if( mCorners==null ) initializeCorners();
151
    if( mCurrCornerV==null || mBasicCornerV==null ) initializeCornerV();
152

  
170 153
    float D = numLayers/3.0f;
171
    float[] corn = CORNERS[corner];
154
    float[] corn = mCorners[corner];
172 155

  
173 156
    if( part==0 )
174 157
      {
......
207 190

  
208 191
  private float[] computeEdge(int numLayers, int edge, int part)
209 192
    {
210
    float D = numLayers/3.0f;
193
    if( mCenterCoords==null ) initializeCenterCoords();
194
    if( mCorners==null ) initializeCorners();
195
    if( mEdgeMap==null ) initializeEdgeMap();
211 196

  
212
    float[] c1 = CORNERS[ mEdgeMap[edge][0] ];
213
    float[] c2 = CORNERS[ mEdgeMap[edge][1] ];
197
    float D = numLayers/3.0f;
198
    float[] c1 = mCorners[ mEdgeMap[edge][0] ];
199
    float[] c2 = mCorners[ mEdgeMap[edge][1] ];
214 200
    float x = D * (c1[0]+c2[0]) / 2;
215 201
    float y = D * (c1[1]+c2[1]) / 2;
216 202
    float z = D * (c1[2]+c2[2]) / 2;
......
277 263

  
278 264
  private int getQuat(int cubit, int numCubitsPerCorner, int numCubitsPerEdge)
279 265
    {
266
    if( mQuatCornerIndices==null || mQuatEdgeIndices==null ) initializeQuatIndices();
267
    if( mQuatCenterIndices==null ) initializeCenterIndices();
268

  
280 269
    if( cubit < NUM_CORNERS*numCubitsPerCorner )
281 270
      {
282 271
      int corner = cubit/numCubitsPerCorner;
283
      return QUAT_CORNER_INDICES[corner];
272
      return mQuatCornerIndices[corner];
284 273
      }
285 274

  
286 275
    if( cubit < NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge )
287 276
      {
288 277
      int edge = (cubit-NUM_CORNERS*numCubitsPerCorner)/numCubitsPerEdge;
289
      return QUAT_EDGE_INDICES[edge];
278
      return mQuatEdgeIndices[edge];
290 279
      }
291 280

  
292 281
    int center = cubit - NUM_CORNERS*numCubitsPerCorner - NUM_EDGES*numCubitsPerEdge;
293
    return QUAT_CENTER_INDICES[center];
282
    return mQuatCenterIndices[center];
294 283
    }
295 284

  
296 285
///////////////////////////////////////////////////////////////////////////////////////////////////
......
443 432
      }
444 433
    }
445 434

  
446

  
447 435
///////////////////////////////////////////////////////////////////////////////////////////////////
448 436

  
449 437
  Static4D getQuat(int cubit, int numLayers)
450 438
    {
439
    if( mQuats==null ) initializeQuats();
451 440
    int numCubitsPerCorner = numCubitsPerCorner(numLayers);
452 441
    int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
453 442

  
454
    return QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
443
    return mQuats[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
455 444
    }
456 445

  
457 446
///////////////////////////////////////////////////////////////////////////////////////////////////
......
491 480

  
492 481
  int getCornerColor(int cubit, int cubitface, int numLayers, int numCubitsPerCorner)
493 482
    {
483
    if( mCornerFaceMap==null ) initializeCornerFaceMap();
494 484
    if( cubitface<0 || cubitface>2 ) return NUM_TEXTURES;
495 485

  
496 486
    int part  = cubit % numCubitsPerCorner;
......
537 527

  
538 528
    int part    = edge % numCubitsPerEdge;
539 529
    int variant = edge / numCubitsPerEdge;
530
    if( mEdgeMap==null ) initializeEdgeMap();
540 531

  
541 532
    return (part==0 || cubitface==((part+1)%2)) ? mEdgeMap[variant][cubitface+2] + ((part+3)/2)*NUM_FACES : NUM_TEXTURES;
542 533
    }
......
582 573

  
583 574
  ObjectSticker retSticker(int face)
584 575
    {
576
    if( mStickers==null )
577
      {
578
      float[][] STICKERS = new float[][]
579
        {
580
          { -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f },
581
          { -0.5f, -0.0914315f, 0.5f, -0.4163512f, 0.5f, 0.4163512f, -0.5f, 0.0914315f },
582
          { -0.49233657f, -0.18006028f, 0.49233657f, -0.5f, 0.49233657f, 0.5f, -0.49233657f, 0.18006028f },
583
          { -0.3002273f, -0.30490047f, 0.3002273f, -0.5f, 0.3002273f, 0.5f, -0.3002273f, 0.30490047f },
584
          { -0.29389262f, 0.4045085f, -0.47552824f, -0.1545085f, 0.0f, -0.5f, 0.47552824f, -0.1545085f, 0.29389262f, 0.4045085f }
585
        };
586

  
587
      mStickers = new ObjectSticker[STICKERS.length];
588

  
589
      final float R0 = 0.08f;
590
      final float R1 = 0.12f;
591
      final float R2 = 0.12f;
592
      final float R3 = 0.08f;
593
      final float R4 = 0.10f;
594
      final float[][] radii = { {R0,R0,R0,R0},{R1,R1,R1,R1},{R2,R2,R2,R2},{R3,R3,R3,R3},{R4,R4,R4,R4,R4} };
595
      final float[] strokes = { 0.10f,0.12f,0.12f,0.08f,0.07f };
596

  
597
      for(int s=0; s<STICKERS.length; s++)
598
        {
599
        mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]);
600
        }
601
      }
602

  
585 603
    return mStickers[getStickerIndex(face)];
586 604
    }
587 605

  
src/main/java/org/distorted/objects/TwistyMinx.java
21 21

  
22 22
import android.content.res.Resources;
23 23

  
24
import org.distorted.helpers.ObjectSticker;
24 25
import org.distorted.helpers.ScrambleState;
25 26
import org.distorted.library.main.DistortedEffects;
26 27
import org.distorted.library.main.DistortedTexture;
......
60 61
           new Static3D( SIN54/LEN,    0     ,   -C2/LEN )
61 62
         };
62 63

  
63
  private static final int[] BASIC_ANGLE = new int[] { 5,5,5,5,5,5 };
64

  
65 64
  static final int MINX_LGREEN = 0xff53aa00;
66 65
  static final int MINX_PINK   = 0xfffd7ab7;
67 66
  static final int MINX_SANDY  = 0xffefd48b;
......
82 81
           MINX_DBLUE , MINX_DYELLOW, MINX_WHITE , MINX_GREY
83 82
         };
84 83

  
85
  private static final int[] mFaceMap = new int[] {8,10,3,7,1,11,9,2,4,0,5,6};
84
  private int mCurrState;
85
  private int mIndexExcluded;
86
  private ScrambleState[] mStates;
87
  private int[][] mScrambleTable;
88
  private int[] mNumOccurences;
89
  private int[] mBasicAngle;
90
  private int[] mFaceMap;
91
  Static4D[] mQuats;
92
  float[][] mCenterCoords;
93
  float[][] mCorners;
94
  int[][] mCornerFaceMap;
95
  int[] mQuatEdgeIndices;
96
  int[] mQuatCornerIndices;
97
  int[][] mEdgeMap;
98
  int[][] mCenterMap;
99
  Static4D[] mBasicCornerV, mCurrCornerV;
100
  ObjectSticker[] mStickers;
86 101

  
87
  // All 60 legal rotation quats of a Minx
88
  static final Static4D[] QUATS = new Static4D[]
89
         {
90
           new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),  //0
91
           new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
92
           new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
93
           new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
94

  
95
           new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),  //4
96
           new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
97
           new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
98
           new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
99
           new Static4D( -0.5f,  0.5f,  0.5f,  0.5f ),
100
           new Static4D( -0.5f,  0.5f, -0.5f,  0.5f ),
101
           new Static4D( -0.5f, -0.5f,  0.5f,  0.5f ),
102
           new Static4D( -0.5f, -0.5f, -0.5f,  0.5f ),
103

  
104
           new Static4D(  0.5f, SIN54, SIN18,  0.0f ), // 12
105
           new Static4D(  0.5f, SIN54,-SIN18,  0.0f ),
106
           new Static4D(  0.5f,-SIN54, SIN18,  0.0f ),
107
           new Static4D(  0.5f,-SIN54,-SIN18,  0.0f ),
108
           new Static4D( SIN18,  0.5f, SIN54,  0.0f ),
109
           new Static4D( SIN18,  0.5f,-SIN54,  0.0f ),
110
           new Static4D(-SIN18,  0.5f, SIN54,  0.0f ),
111
           new Static4D(-SIN18,  0.5f,-SIN54,  0.0f ),
112
           new Static4D( SIN54, SIN18,  0.5f,  0.0f ),
113
           new Static4D( SIN54,-SIN18,  0.5f,  0.0f ),
114
           new Static4D(-SIN54, SIN18,  0.5f,  0.0f ),
115
           new Static4D(-SIN54,-SIN18,  0.5f,  0.0f ),
116

  
117
           new Static4D(  0.0f, SIN18, SIN54,  0.5f ), //24
118
           new Static4D(  0.0f, SIN18,-SIN54,  0.5f ),
119
           new Static4D(  0.0f,-SIN18, SIN54,  0.5f ),
120
           new Static4D(  0.0f,-SIN18,-SIN54,  0.5f ),
121
           new Static4D( SIN18, SIN54,  0.0f,  0.5f ),
122
           new Static4D( SIN18,-SIN54,  0.0f,  0.5f ),
123
           new Static4D(-SIN18, SIN54,  0.0f,  0.5f ),
124
           new Static4D(-SIN18,-SIN54,  0.0f,  0.5f ),
125
           new Static4D( SIN54,  0.0f, SIN18,  0.5f ),
126
           new Static4D( SIN54,  0.0f,-SIN18,  0.5f ),
127
           new Static4D(-SIN54,  0.0f, SIN18,  0.5f ),
128
           new Static4D(-SIN54,  0.0f,-SIN18,  0.5f ),
129

  
130
           new Static4D(  0.0f, SIN54,  0.5f, SIN18 ), //36
131
           new Static4D(  0.0f, SIN54, -0.5f, SIN18 ),
132
           new Static4D(  0.0f,-SIN54,  0.5f, SIN18 ),
133
           new Static4D(  0.0f,-SIN54, -0.5f, SIN18 ),
134
           new Static4D(  0.5f,  0.0f, SIN54, SIN18 ),
135
           new Static4D(  0.5f,  0.0f,-SIN54, SIN18 ),
136
           new Static4D( -0.5f,  0.0f, SIN54, SIN18 ),
137
           new Static4D( -0.5f,  0.0f,-SIN54, SIN18 ),
138
           new Static4D( SIN54,  0.5f,  0.0f, SIN18 ),
139
           new Static4D( SIN54, -0.5f,  0.0f, SIN18 ),
140
           new Static4D(-SIN54,  0.5f,  0.0f, SIN18 ),
141
           new Static4D(-SIN54, -0.5f,  0.0f, SIN18 ),
142

  
143
           new Static4D(  0.0f,  0.5f, SIN18, SIN54 ), //48
144
           new Static4D(  0.0f,  0.5f,-SIN18, SIN54 ),
145
           new Static4D(  0.0f, -0.5f, SIN18, SIN54 ),
146
           new Static4D(  0.0f, -0.5f,-SIN18, SIN54 ),
147
           new Static4D(  0.5f, SIN18,  0.0f, SIN54 ),
148
           new Static4D(  0.5f,-SIN18,  0.0f, SIN54 ),
149
           new Static4D( -0.5f, SIN18,  0.0f, SIN54 ),
150
           new Static4D( -0.5f,-SIN18,  0.0f, SIN54 ),
151
           new Static4D( SIN18,  0.0f,  0.5f, SIN54 ),
152
           new Static4D( SIN18,  0.0f, -0.5f, SIN54 ),
153
           new Static4D(-SIN18,  0.0f,  0.5f, SIN54 ),
154
           new Static4D(-SIN18,  0.0f, -0.5f, SIN54 ),
155
         };
102
///////////////////////////////////////////////////////////////////////////////////////////////////
156 103

  
157
  // Coordinates of all 20 corners of a Minx
158
  static final float[][] CORNERS = new float[][]
159
         {
160
             {  0.0f,  0.5f,    C2},
161
             {  0.0f,  0.5f,   -C2},
162
             {  0.0f, -0.5f,    C2},
163
             {  0.0f, -0.5f,   -C2},
164
             {    C2,  0.0f,  0.5f},
165
             {    C2,  0.0f, -0.5f},
166
             {   -C2,  0.0f,  0.5f},
167
             {   -C2,  0.0f, -0.5f},
168
             {  0.5f,    C2,  0.0f},
169
             {  0.5f,   -C2,  0.0f},
170
             { -0.5f,    C2,  0.0f},
171
             { -0.5f,   -C2,  0.0f},
172
             { SIN54, SIN54, SIN54},
173
             { SIN54, SIN54,-SIN54},
174
             { SIN54,-SIN54, SIN54},
175
             { SIN54,-SIN54,-SIN54},
176
             {-SIN54, SIN54, SIN54},
177
             {-SIN54, SIN54,-SIN54},
178
             {-SIN54,-SIN54, SIN54},
179
             {-SIN54,-SIN54,-SIN54},
180
         };
104
  TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture, MeshSquare mesh,
105
             DistortedEffects effects, int[][] moves, ObjectList obj, Resources res, int scrWidth)
106
    {
107
    super(numLayers, realSize, quat, texture, mesh, effects, moves, obj, res, scrWidth);
181 108

  
182
  static final int[][] mCornerFaceMap =
183
         {
184
           {  0, 1, 8 },
185
           {  6, 5,10 },
186
           {  1, 0,11 },
187
           {  5, 6, 3 },
188
           {  0, 9, 4 },
189
           {  5, 4, 9 },
190
           {  7, 1, 2 },
191
           {  2, 6, 7 },
192
           { 10, 9, 8 },
193
           {  4, 3,11 },
194
           {  7,10, 8 },
195
           {  3, 2,11 },
196
           {  0, 8, 9 },
197
           {  9,10, 5 },
198
           {  0, 4,11 },
199
           {  4, 5, 3 },
200
           {  1, 7, 8 },
201
           {  7, 6,10 },
202
           {  2, 1,11 },
203
           {  6, 2, 3 },
204
         };
109
    initializeScrambleStates(numLayers);
110
    }
205 111

  
206
  static final int[] QUAT_EDGE_INDICES =
207
      {
208
        56, 40, 43, 59,  0, 19,  9, 54, 58, 49,
209
        48, 24, 52,  4, 16, 32, 20, 11, 21, 35 ,
210
        37, 30,  8, 28, 36, 44,  1, 46, 12, 47
211
      };
212 112

  
113
///////////////////////////////////////////////////////////////////////////////////////////////////
213 114

  
214
  static final int[] QUAT_CORNER_INDICES =
215
      {
216
         0,  2,  3,  1, 40, 31, 41, 30, 39, 35,
217
        36, 34, 56, 32, 43, 21, 48, 28, 42, 23
218
      };
115
  void initializeCornerV()
116
    {
117
    mBasicCornerV = new Static4D[3];
118
    mCurrCornerV  = new Static4D[3];
119

  
120
    mBasicCornerV[0] = new Static4D( (SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
121
    mBasicCornerV[1] = new Static4D(-(SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
122
    mBasicCornerV[2] = new Static4D(              0,        -0.500f,    0.0f, 0.0f );
123
    }
124

  
125
///////////////////////////////////////////////////////////////////////////////////////////////////
126
// the five vertices that form a given face. Order: the same as colors of the faces in TwistyMinx.
127

  
128
  void initializeCenterMap()
129
    {
130
    mCenterMap = new int[][]
131
         {
132
           { 0, 12,  4, 14,  2},
133
           { 0,  2, 18,  6, 16},
134
           { 6, 18, 11, 19,  7},
135
           { 3, 15,  9, 11, 19},
136
           { 4,  5, 15,  9, 14},
137
           { 1, 13,  5, 15,  3},
138
           { 1,  3, 19,  7, 17},
139
           {10, 16,  6,  7, 17},
140
           { 0, 12,  8, 10, 16},
141
           { 8, 13,  5,  4, 12},
142
           { 1, 13,  8, 10, 17},
143
           { 2, 14,  9, 11, 18},
144
         };
145
    }
219 146

  
220
  // the quadruple ( corner1, corner2, face1, face2 ) defining an edge.
221
  // In fact the 2 corners already define it, the faces only provide easy
222
  // way to get to know the colors. Order: arbitrary. Face1 arbitrarily on
223
  // the 'left' or right of vector corner1 --> corner2, according to Quat.
224
  static final int[][] mEdgeMap =
147
///////////////////////////////////////////////////////////////////////////////////////////////////
148
// the quadruple ( corner1, corner2, face1, face2 ) defining an edge.
149
// In fact the 2 corners already define it, the faces only provide easy
150
// way to get to know the colors. Order: arbitrary. Face1 arbitrarily on
151
// the 'left' or right of vector corner1 --> corner2, according to Quat.
152

  
153
  void initializeEdgeMap()
154
    {
155
    mEdgeMap = new int[][]
225 156
         {
226 157
           {  0, 12,  0,  8}, //0
227 158
           { 12,  4,  0,  9},
......
254 185
           {  1, 13, 10,  5},
255 186
           {  3, 15,  5,  3},
256 187
         };
188
    }
257 189

  
258
  // the five vertices that form a given face. Order: the same as colors
259
  // of the faces in TwistyMinx.
260
  static final int[][] mCenterMap =
261
         {
262
           { 0, 12,  4, 14,  2},
263
           { 0,  2, 18,  6, 16},
264
           { 6, 18, 11, 19,  7},
265
           { 3, 15,  9, 11, 19},
266
           { 4,  5, 15,  9, 14},
267
           { 1, 13,  5, 15,  3},
268
           { 1,  3, 19,  7, 17},
269
           {10, 16,  6,  7, 17},
270
           { 0, 12,  8, 10, 16},
271
           { 8, 13,  5,  4, 12},
272
           { 1, 13,  8, 10, 17},
273
           { 2, 14,  9, 11, 18},
274
         };
275

  
276
  static final float[][] mCenterCoords = new float[NUM_CENTERS][3];
190
///////////////////////////////////////////////////////////////////////////////////////////////////
277 191

  
278
  static
192
  void initializeQuatIndices()
279 193
    {
280
    for(int center=0; center<NUM_CENTERS; center++)
194
    mQuatEdgeIndices = new int[]
281 195
      {
282
      int[] map = mCenterMap[center];
196
        56, 40, 43, 59,  0, 19,  9, 54, 58, 49,
197
        48, 24, 52,  4, 16, 32, 20, 11, 21, 35,
198
        37, 30,  8, 28, 36, 44,  1, 46, 12, 47
199
      };
200
    mQuatCornerIndices = new int[]
201
      {
202
         0,  2,  3,  1, 40, 31, 41, 30, 39, 35,
203
        36, 34, 56, 32, 43, 21, 48, 28, 42, 23
204
      };
205
    }
283 206

  
284
      float x = CORNERS[map[0]][0] +
285
                CORNERS[map[1]][0] +
286
                CORNERS[map[2]][0] +
287
                CORNERS[map[3]][0] +
288
                CORNERS[map[4]][0] ;
207
///////////////////////////////////////////////////////////////////////////////////////////////////
289 208

  
290
      float y = CORNERS[map[0]][1] +
291
                CORNERS[map[1]][1] +
292
                CORNERS[map[2]][1] +
293
                CORNERS[map[3]][1] +
294
                CORNERS[map[4]][1] ;
209
  void initializeCornerFaceMap()
210
    {
211
    mCornerFaceMap = new int[][]
212
         {
213
           {  0, 1, 8 },
214
           {  6, 5,10 },
215
           {  1, 0,11 },
216
           {  5, 6, 3 },
217
           {  0, 9, 4 },
218
           {  5, 4, 9 },
219
           {  7, 1, 2 },
220
           {  2, 6, 7 },
221
           { 10, 9, 8 },
222
           {  4, 3,11 },
223
           {  7,10, 8 },
224
           {  3, 2,11 },
225
           {  0, 8, 9 },
226
           {  9,10, 5 },
227
           {  0, 4,11 },
228
           {  4, 5, 3 },
229
           {  1, 7, 8 },
230
           {  7, 6,10 },
231
           {  2, 1,11 },
232
           {  6, 2, 3 },
233
         };
234
    }
295 235

  
296
      float z = CORNERS[map[0]][2] +
297
                CORNERS[map[1]][2] +
298
                CORNERS[map[2]][2] +
299
                CORNERS[map[3]][2] +
300
                CORNERS[map[4]][2] ;
236
///////////////////////////////////////////////////////////////////////////////////////////////////
301 237

  
302
      mCenterCoords[center][0] = x/5;
303
      mCenterCoords[center][1] = y/5;
304
      mCenterCoords[center][2] = z/5;
305
      }
238
  void initializeQuats()
239
    {
240
    mQuats = new Static4D[]
241
         {
242
         new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),  //0
243
         new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
244
         new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
245
         new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
246

  
247
         new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),  //4
248
         new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
249
         new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
250
         new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
251
         new Static4D( -0.5f,  0.5f,  0.5f,  0.5f ),
252
         new Static4D( -0.5f,  0.5f, -0.5f,  0.5f ),
253
         new Static4D( -0.5f, -0.5f,  0.5f,  0.5f ),
254
         new Static4D( -0.5f, -0.5f, -0.5f,  0.5f ),
255

  
256
         new Static4D(  0.5f, SIN54, SIN18,  0.0f ), // 12
257
         new Static4D(  0.5f, SIN54,-SIN18,  0.0f ),
258
         new Static4D(  0.5f,-SIN54, SIN18,  0.0f ),
259
         new Static4D(  0.5f,-SIN54,-SIN18,  0.0f ),
260
         new Static4D( SIN18,  0.5f, SIN54,  0.0f ),
261
         new Static4D( SIN18,  0.5f,-SIN54,  0.0f ),
262
         new Static4D(-SIN18,  0.5f, SIN54,  0.0f ),
263
         new Static4D(-SIN18,  0.5f,-SIN54,  0.0f ),
264
         new Static4D( SIN54, SIN18,  0.5f,  0.0f ),
265
         new Static4D( SIN54,-SIN18,  0.5f,  0.0f ),
266
         new Static4D(-SIN54, SIN18,  0.5f,  0.0f ),
267
         new Static4D(-SIN54,-SIN18,  0.5f,  0.0f ),
268

  
269
         new Static4D(  0.0f, SIN18, SIN54,  0.5f ), //24
270
         new Static4D(  0.0f, SIN18,-SIN54,  0.5f ),
271
         new Static4D(  0.0f,-SIN18, SIN54,  0.5f ),
272
         new Static4D(  0.0f,-SIN18,-SIN54,  0.5f ),
273
         new Static4D( SIN18, SIN54,  0.0f,  0.5f ),
274
         new Static4D( SIN18,-SIN54,  0.0f,  0.5f ),
275
         new Static4D(-SIN18, SIN54,  0.0f,  0.5f ),
276
         new Static4D(-SIN18,-SIN54,  0.0f,  0.5f ),
277
         new Static4D( SIN54,  0.0f, SIN18,  0.5f ),
278
         new Static4D( SIN54,  0.0f,-SIN18,  0.5f ),
279
         new Static4D(-SIN54,  0.0f, SIN18,  0.5f ),
280
         new Static4D(-SIN54,  0.0f,-SIN18,  0.5f ),
281

  
282
         new Static4D(  0.0f, SIN54,  0.5f, SIN18 ), //36
283
         new Static4D(  0.0f, SIN54, -0.5f, SIN18 ),
284
         new Static4D(  0.0f,-SIN54,  0.5f, SIN18 ),
285
         new Static4D(  0.0f,-SIN54, -0.5f, SIN18 ),
286
         new Static4D(  0.5f,  0.0f, SIN54, SIN18 ),
287
         new Static4D(  0.5f,  0.0f,-SIN54, SIN18 ),
288
         new Static4D( -0.5f,  0.0f, SIN54, SIN18 ),
289
         new Static4D( -0.5f,  0.0f,-SIN54, SIN18 ),
290
         new Static4D( SIN54,  0.5f,  0.0f, SIN18 ),
291
         new Static4D( SIN54, -0.5f,  0.0f, SIN18 ),
292
         new Static4D(-SIN54,  0.5f,  0.0f, SIN18 ),
293
         new Static4D(-SIN54, -0.5f,  0.0f, SIN18 ),
294

  
295
         new Static4D(  0.0f,  0.5f, SIN18, SIN54 ), //48
296
         new Static4D(  0.0f,  0.5f,-SIN18, SIN54 ),
297
         new Static4D(  0.0f, -0.5f, SIN18, SIN54 ),
298
         new Static4D(  0.0f, -0.5f,-SIN18, SIN54 ),
299
         new Static4D(  0.5f, SIN18,  0.0f, SIN54 ),
300
         new Static4D(  0.5f,-SIN18,  0.0f, SIN54 ),
301
         new Static4D( -0.5f, SIN18,  0.0f, SIN54 ),
302
         new Static4D( -0.5f,-SIN18,  0.0f, SIN54 ),
303
         new Static4D( SIN18,  0.0f,  0.5f, SIN54 ),
304
         new Static4D( SIN18,  0.0f, -0.5f, SIN54 ),
305
         new Static4D(-SIN18,  0.0f,  0.5f, SIN54 ),
306
         new Static4D(-SIN18,  0.0f, -0.5f, SIN54 ),
307
         };
306 308
    }
307 309

  
308
  static final Static4D[] mBasicCornerV, mCurrCornerV;
310
///////////////////////////////////////////////////////////////////////////////////////////////////
311
// Coordinates of all 20 corners of a Minx
309 312

  
310
  static
313
  void initializeCorners()
311 314
    {
312
    mBasicCornerV = new Static4D[3];
313
    mCurrCornerV  = new Static4D[3];
314

  
315
    mBasicCornerV[0] = new Static4D( (SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
316
    mBasicCornerV[1] = new Static4D(-(SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
317
    mBasicCornerV[2] = new Static4D(              0,        -0.500f,    0.0f, 0.0f );
315
    mCorners = new float[][]
316
         {
317
             {  0.0f,  0.5f,    C2},
318
             {  0.0f,  0.5f,   -C2},
319
             {  0.0f, -0.5f,    C2},
320
             {  0.0f, -0.5f,   -C2},
321
             {    C2,  0.0f,  0.5f},
322
             {    C2,  0.0f, -0.5f},
323
             {   -C2,  0.0f,  0.5f},
324
             {   -C2,  0.0f, -0.5f},
325
             {  0.5f,    C2,  0.0f},
326
             {  0.5f,   -C2,  0.0f},
327
             { -0.5f,    C2,  0.0f},
328
             { -0.5f,   -C2,  0.0f},
329
             { SIN54, SIN54, SIN54},
330
             { SIN54, SIN54,-SIN54},
331
             { SIN54,-SIN54, SIN54},
332
             { SIN54,-SIN54,-SIN54},
333
             {-SIN54, SIN54, SIN54},
334
             {-SIN54, SIN54,-SIN54},
335
             {-SIN54,-SIN54, SIN54},
336
             {-SIN54,-SIN54,-SIN54},
337
         };
318 338
    }
319 339

  
320
  private int mCurrState;
321
  private int mIndexExcluded;
322
  private ScrambleState[] mStates;
323
  private int[][] mScrambleTable;
324
  private int[] mNumOccurences;
325

  
326 340
///////////////////////////////////////////////////////////////////////////////////////////////////
327 341

  
328
  TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture, MeshSquare mesh,
329
             DistortedEffects effects, int[][] moves, ObjectList obj, Resources res, int scrWidth)
342
  void initializeCenterCoords()
330 343
    {
331
    super(numLayers, realSize, quat, texture, mesh, effects, moves, obj, res, scrWidth);
344
    if( mCorners==null ) initializeCorners();
345
    if( mCenterMap==null ) initializeCenterMap();
332 346

  
333
    initializeScrambleStates(numLayers);
347
    mCenterCoords = new float[NUM_CENTERS][3];
348

  
349
    for(int center=0; center<NUM_CENTERS; center++)
350
      {
351
      int[] map = mCenterMap[center];
352

  
353
      float x = mCorners[map[0]][0] +
354
                mCorners[map[1]][0] +
355
                mCorners[map[2]][0] +
356
                mCorners[map[3]][0] +
357
                mCorners[map[4]][0] ;
358

  
359
      float y = mCorners[map[0]][1] +
360
                mCorners[map[1]][1] +
361
                mCorners[map[2]][1] +
362
                mCorners[map[3]][1] +
363
                mCorners[map[4]][1] ;
364

  
365
      float z = mCorners[map[0]][2] +
366
                mCorners[map[1]][2] +
367
                mCorners[map[2]][2] +
368
                mCorners[map[3]][2] +
369
                mCorners[map[4]][2] ;
370

  
371
      mCenterCoords[center][0] = x/5;
372
      mCenterCoords[center][1] = y/5;
373
      mCenterCoords[center][2] = z/5;
374
      }
334 375
    }
335 376

  
336 377
///////////////////////////////////////////////////////////////////////////////////////////////////
......
463 504

  
464 505
  int[] getSolvedQuats(int cubit, int numLayers)
465 506
    {
507
    if( mQuats==null ) initializeQuats();
508
    if( mFaceMap==null ) mFaceMap = new int[] {8,10,3,7,1,11,9,2,4,0,5,6};
466 509
    int status = retCubitSolvedStatus(cubit,numLayers);
467
    return status<0 ? null : buildSolvedQuats(MovementMinx.FACE_AXIS[mFaceMap[status]],QUATS);
510
    return status<0 ? null : buildSolvedQuats(MovementMinx.FACE_AXIS[mFaceMap[status]],mQuats);
468 511
    }
469 512

  
470 513
///////////////////////////////////////////////////////////////////////////////////////////////////
471 514

  
472 515
  Static4D[] getQuats()
473 516
    {
474
    return QUATS;
517
    if( mQuats==null ) initializeQuats();
518
    return mQuats;
475 519
    }
476 520

  
477 521
///////////////////////////////////////////////////////////////////////////////////////////////////
......
569 613

  
570 614
  public int[] getBasicAngle()
571 615
    {
572
    return BASIC_ANGLE;
616
    if( mBasicAngle ==null ) mBasicAngle = new int[] { 5,5,5,5,5,5 };
617
    return mBasicAngle;
573 618
    }
574 619
}
src/main/java/org/distorted/objects/TwistyObject.java
271 271
    int sizeIndex = ObjectList.getSizeIndex(list.ordinal(),mNumLayers);
272 272
    int resourceID= list.getResourceIDs()[sizeIndex];
273 273

  
274
    if( resourceID!=0 )
274
    if( false ) // resourceID!=0 )
275 275
      {
276 276
      InputStream is = res.openRawResource(resourceID);
277 277
      DataInputStream dos = new DataInputStream(is);

Also available in: Unified diff