Project

General

Profile

Download (23.4 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 0e505360

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.objects;
21

    
22
import android.content.res.Resources;
23

    
24
import org.distorted.library.main.DistortedEffects;
25
import org.distorted.library.main.DistortedTexture;
26
import org.distorted.library.mesh.MeshSquare;
27
import org.distorted.library.type.Static4D;
28
import org.distorted.main.R;
29
import org.distorted.main.RubikActivity;
30

    
31
import java.lang.reflect.Field;
32

    
33
///////////////////////////////////////////////////////////////////////////////////////////////////
34

    
35
public enum ObjectList
36
  {
37
  ///////////////////// Size // DB Level // NumScrambles // Mesh // small icon // medium icon // big icon // huge icon
38

    
39
  CUBE (
40
         new int[][] {
41
                       {2 , 12, 12, R.raw.cube2, R.drawable.ui_small_cube2, R.drawable.ui_medium_cube2, R.drawable.ui_big_cube2, R.drawable.ui_huge_cube2} ,
42
                       {3 , 16, 17, R.raw.cube3, R.drawable.ui_small_cube3, R.drawable.ui_medium_cube3, R.drawable.ui_big_cube3, R.drawable.ui_huge_cube3} ,
43
                       {4 , 20, 24, R.raw.cube4, R.drawable.ui_small_cube4, R.drawable.ui_medium_cube4, R.drawable.ui_big_cube4, R.drawable.ui_huge_cube4} ,
44
                       {5 , 24, 28, R.raw.cube5, R.drawable.ui_small_cube5, R.drawable.ui_medium_cube5, R.drawable.ui_big_cube5, R.drawable.ui_huge_cube5}
45
                     },
46
         TwistyCube.class,
47
         new MovementCube(),
48
         0,
49
         60
50
       ),
51

    
52
  JING (
53
         new int[][] {
54
                       {2 , 11, 11, R.raw.jing, R.drawable.ui_small_jing2, R.drawable.ui_medium_jing2, R.drawable.ui_big_jing2, R.drawable.ui_huge_jing2} ,
55
                     },
56
         TwistyJing.class,
57
         new MovementJing(),
58
         1,
59
         30
60
       ),
61

    
62
  PYRA (
63
         new int[][] {
64
                       {3 , 10, 10, R.raw.pyra3, R.drawable.ui_small_pyra3, R.drawable.ui_medium_pyra3, R.drawable.ui_big_pyra3, R.drawable.ui_huge_pyra3} ,
65
                       {4 , 15, 17, R.raw.pyra4, R.drawable.ui_small_pyra4, R.drawable.ui_medium_pyra4, R.drawable.ui_big_pyra4, R.drawable.ui_huge_pyra4} ,
66
                       {5 , 20, 23, R.raw.pyra5, R.drawable.ui_small_pyra5, R.drawable.ui_medium_pyra5, R.drawable.ui_big_pyra5, R.drawable.ui_huge_pyra5}
67
                     },
68
         TwistyPyraminx.class,
69
         new MovementPyraminx(),
70
         1,
71
         30
72
       ),
73

    
74
  KILO (
75
         new int[][] {
76
                       {3 , 18, 18, R.raw.kilo3, R.drawable.ui_small_kilo3, R.drawable.ui_medium_kilo3, R.drawable.ui_big_kilo3, R.drawable.ui_huge_kilo3} ,
77
                       {5 , 33, 33, R.raw.kilo5, R.drawable.ui_small_kilo5, R.drawable.ui_medium_kilo5, R.drawable.ui_big_kilo5, R.drawable.ui_huge_kilo5} ,
78
                     },
79
         TwistyKilominx.class,
80
         new MovementMinx(),
81
         2,
82
         30
83
       ),
84

    
85
  MEGA (
86
         new int[][] {
87
                       {3 , 21, 21, R.raw.mega3, R.drawable.ui_small_mega3, R.drawable.ui_medium_mega3, R.drawable.ui_big_mega3, R.drawable.ui_huge_mega3} ,
88
                       {5 , 35, 37, R.raw.mega5, R.drawable.ui_small_mega5, R.drawable.ui_medium_mega5, R.drawable.ui_big_mega5, R.drawable.ui_huge_mega5} ,
89
                     },
90
         TwistyMegaminx.class,
91
         new MovementMinx(),
92
         2,
93
         30
94
       ),
95

    
96
  ULTI (
97
         new int[][] {
98
                       {2 , 18, 18, R.raw.ulti, R.drawable.ui_small_ulti, R.drawable.ui_medium_ulti, R.drawable.ui_big_ulti, R.drawable.ui_huge_ulti} ,
99
                     },
100
         TwistyUltimate.class,
101
         new MovementUltimate(),
102
         3,
103
         30
104
       ),
105

    
106
  DIAM (
107
         new int[][] {
108
                       {2 , 10, 12, R.raw.diam2, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
109
                       {3 , 18, 24, R.raw.diam3, R.drawable.ui_small_diam3, R.drawable.ui_medium_diam3, R.drawable.ui_big_diam3, R.drawable.ui_huge_diam3} ,
110
                       {4 , 32, 32, R.raw.diam4, R.drawable.ui_small_diam4, R.drawable.ui_medium_diam4, R.drawable.ui_big_diam4, R.drawable.ui_huge_diam4} ,
111
                     },
112
         TwistyDiamond.class,
113
         new MovementDiamond(),
114
         3,
115
         60
116
       ),
117

    
118
  DINO (
119
         new int[][] {
120
                       {3 , 10, 10, R.raw.dino, R.drawable.ui_small_dino, R.drawable.ui_medium_dino, R.drawable.ui_big_dino, R.drawable.ui_huge_dino} ,
121
                     },
122
         TwistyDino6.class,
123
         new MovementDino(),
124
         4,
125
         60
126
       ),
127

    
128
  DIN4 (
129
         new int[][] {
130
                       {3 , 7, 7, R.raw.dino, R.drawable.ui_small_din4, R.drawable.ui_medium_din4, R.drawable.ui_big_din4, R.drawable.ui_huge_din4} ,
131
                     },
132
         TwistyDino4.class,
133
         new MovementDino(),
134
         4,
135
         60
136
       ),
137

    
138
  REDI (
139
         new int[][] {
140
                       {3 , 14, 16, R.raw.redi, R.drawable.ui_small_redi, R.drawable.ui_medium_redi, R.drawable.ui_big_redi, R.drawable.ui_huge_redi} ,
141
                     },
142
         TwistyRedi.class,
143
         new MovementRedi(),
144
         4,
145
         60
146
       ),
147

    
148
  HELI (
149
         new int[][] {
150
                       {3 , 18, 20, R.raw.heli, R.drawable.ui_small_heli, R.drawable.ui_medium_heli, R.drawable.ui_big_heli, R.drawable.ui_huge_heli} ,
151
                     },
152
         TwistyHelicopter.class,
153
         new MovementHelicopter(),
154
         4,
155
         60
156
       ),
157

    
158
  SKEW (
159
         new int[][] {
160
                       {2 , 11, 11, R.raw.skew2, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
161
                       {3 , 17, 21, R.raw.skew3, R.drawable.ui_small_skewm, R.drawable.ui_medium_skewm, R.drawable.ui_big_skewm, R.drawable.ui_huge_skewm} ,
162
                     },
163
         TwistySkewb.class,
164
         new MovementSkewb(),
165
         5,
166
         60
167
       ),
168

    
169
  IVY  (
170
         new int[][] {
171
                       {2 , 8, 8, R.raw.ivy, R.drawable.ui_small_ivy, R.drawable.ui_medium_ivy, R.drawable.ui_big_ivy, R.drawable.ui_huge_ivy} ,
172
                     },
173
         TwistyIvy.class,
174
         new MovementIvy(),
175
         5,
176
         60
177
       ),
178

    
179
  REX  (
180
         new int[][] {
181
                       {3 , 16, 19, R.raw.rex, R.drawable.ui_small_rex, R.drawable.ui_medium_rex, R.drawable.ui_big_rex, R.drawable.ui_huge_rex} ,
182
                     },
183
         TwistyRex.class,
184
         new MovementRex(),
185
         5,
186
         60
187
       ),
188

    
189
  BAN1 (
190
         new int[][] {
191
                       {3 , 16, 16, R.raw.ban1, R.drawable.ui_small_ban1, R.drawable.ui_medium_ban1, R.drawable.ui_big_ban1, R.drawable.ui_huge_ban1} ,
192
                     },
193
         TwistyBandagedFused.class,
194
         new MovementCube(),
195
         6,
196
         60
197
       ),
198

    
199
  BAN2 (
200
         new int[][] {
201
                       {3 , 16, 16, R.raw.ban2, R.drawable.ui_small_ban2, R.drawable.ui_medium_ban2, R.drawable.ui_big_ban2, R.drawable.ui_huge_ban2} ,
202
                     },
203
         TwistyBandaged2Bar.class,
204
         new MovementCube(),
205
         6,
206
         60
207
       ),
208

    
209
  BAN3 (
210
         new int[][] {
211
                       {3 , 16, 16, R.raw.ban3, R.drawable.ui_small_ban3, R.drawable.ui_medium_ban3, R.drawable.ui_big_ban3, R.drawable.ui_huge_ban3} ,
212
                     },
213
         TwistyBandaged3Plate.class,
214
         new MovementCube(),
215
         6,
216
         60
217
       ),
218

    
219
  BAN4 (
220
         new int[][] {
221
                       {3 , 16, 16, R.raw.ban4, R.drawable.ui_small_ban4, R.drawable.ui_medium_ban4, R.drawable.ui_big_ban4, R.drawable.ui_huge_ban4} ,
222
                     },
223
         TwistyBandagedEvil.class,
224
         new MovementCube(),
225
         6,
226
         60
227
       ),
228

    
229
  SQU1 (
230
         new int[][] {
231
                       {3 , 24, 24, R.raw.square1, R.drawable.ui_small_square1, R.drawable.ui_medium_square1, R.drawable.ui_big_square1, R.drawable.ui_huge_square1} ,
232
                     },
233
         TwistySquare1.class,
234
         new MovementSquare(),
235
         7,
236
         60
237
       ),
238

    
239
  SQU2 (
240
         new int[][] {
241
                       {3 , 24, 24, R.raw.square2, R.drawable.ui_small_square2, R.drawable.ui_medium_square2, R.drawable.ui_big_square2, R.drawable.ui_huge_square2} ,
242
                     },
243
         TwistySquare2.class,
244
         new MovementSquare(),
245
         7,
246
         60
247
       ),
248

    
249
  MIRR (
250
         new int[][] {
251
                       {2 , 12, 12, R.raw.mirr2, R.drawable.ui_small_mirr2, R.drawable.ui_medium_mirr2, R.drawable.ui_big_mirr2, R.drawable.ui_huge_mirr2} ,
252
                       {3 , 16, 17, R.raw.mirr3, R.drawable.ui_small_mirr3, R.drawable.ui_medium_mirr3, R.drawable.ui_big_mirr3, R.drawable.ui_huge_mirr3} ,
253
                     },
254
         TwistyMirror.class,
255
         new MovementCube(),
256
         7,
257
         60
258
       ),
259
  ;
260

    
261
  public static final int NUM_OBJECTS = values().length;
262
  public static final int MAX_NUM_OBJECTS;
263
  public static final int MAX_LEVEL;
264
  public static final int MAX_SCRAMBLE;
265
  public static final int MAX_OBJECT_SIZE;
266

    
267
  private final int[] mObjectSizes, mDBLevels, mNumScrambles, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
268
  private final Class<? extends TwistyObject> mObjectClass;
269
  private final Movement mObjectMovementClass;
270
  private final int mRow, mNumSizes;
271
  private final int mFOV;
272

    
273
  private static final ObjectList[] objects;
274
  private static int mNumAll;
275
  private static int[] mIndices;
276
  private static int mColCount, mRowCount;
277

    
278
  static
279
    {
280
    mNumAll = 0;
281
    int num, i = 0;
282
    objects = new ObjectList[NUM_OBJECTS];
283
    int maxNum     = Integer.MIN_VALUE;
284
    int maxLevel   = Integer.MIN_VALUE;
285
    int maxScramble= Integer.MIN_VALUE;
286
    int maxSize    = Integer.MIN_VALUE;
287

    
288
    for(ObjectList object: ObjectList.values())
289
      {
290
      objects[i] = object;
291
      i++;
292
      num = object.mObjectSizes.length;
293
      mNumAll += num;
294
      if( num> maxNum ) maxNum = num;
295

    
296
      for(int j=0; j<num; j++)
297
        {
298
        if( object.mNumScrambles[j]> maxScramble ) maxScramble= object.mNumScrambles[j];
299
        if( object.mDBLevels[j]    > maxLevel    ) maxLevel   = object.mDBLevels[j];
300
        if( object.mObjectSizes[j] > maxSize     ) maxSize    = object.mObjectSizes[j];
301
        }
302
      }
303

    
304
    MAX_NUM_OBJECTS = maxNum;
305
    MAX_LEVEL       = maxLevel;
306
    MAX_SCRAMBLE    = maxScramble;
307
    MAX_OBJECT_SIZE = maxSize;
308
    }
309

    
310
///////////////////////////////////////////////////////////////////////////////////////////////////
311

    
312
  private static void setUpColAndRow()
313
    {
314
    mIndices = new int[NUM_OBJECTS];
315
    mRowCount= 0;
316

    
317
    for(int obj=0; obj<NUM_OBJECTS; obj++)
318
      {
319
      mIndices[obj] = objects[obj].mRow;
320
      if( mIndices[obj]>=mRowCount ) mRowCount = mIndices[obj]+1;
321
      }
322

    
323
    mColCount = 0;
324

    
325
    for(int row=0; row<mRowCount; row++)
326
      {
327
      int numObjects = computeNumObjectsInRow(row);
328
      if( numObjects>mColCount ) mColCount = numObjects;
329
      }
330
    }
331

    
332
///////////////////////////////////////////////////////////////////////////////////////////////////
333

    
334
  private static int computeNumObjectsInRow(int row)
335
    {
336
    int num=0;
337

    
338
    for(int object=0; object<NUM_OBJECTS; object++)
339
      {
340
      if( objects[object].mRow == row )
341
        {
342
        num += objects[object].mNumSizes;
343
        }
344
      }
345

    
346
    return num;
347
    }
348

    
349
///////////////////////////////////////////////////////////////////////////////////////////////////
350

    
351
  public static int getColumnCount()
352
    {
353
    if( mIndices==null ) setUpColAndRow();
354

    
355
    return mColCount;
356
    }
357

    
358
///////////////////////////////////////////////////////////////////////////////////////////////////
359

    
360
  public static int getRowCount()
361
    {
362
    if( mIndices==null ) setUpColAndRow();
363

    
364
    return mRowCount;
365
    }
366

    
367
///////////////////////////////////////////////////////////////////////////////////////////////////
368

    
369
  public static int[] getIndices()
370
    {
371
    if( mIndices==null ) setUpColAndRow();
372

    
373
    return mIndices;
374
    }
375

    
376
///////////////////////////////////////////////////////////////////////////////////////////////////
377

    
378
  public static ObjectList getObject(int ordinal)
379
    {
380
    return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal] : CUBE;
381
    }
382

    
383
///////////////////////////////////////////////////////////////////////////////////////////////////
384

    
385
  public static int pack(int object, int sizeIndex)
386
    {
387
    int ret = 0;
388
    for(int i=0; i<object; i++) ret += objects[i].mObjectSizes.length;
389

    
390
    return ret+sizeIndex;
391
    }
392

    
393
///////////////////////////////////////////////////////////////////////////////////////////////////
394

    
395
  public static int unpackSizeIndex(int number)
396
    {
397
    int num;
398

    
399
    for(int i=0; i<NUM_OBJECTS; i++)
400
      {
401
      num = objects[i].mObjectSizes.length;
402
      if( number<num ) return number;
403
      number -= num;
404
      }
405

    
406
    return -1;
407
    }
408

    
409
///////////////////////////////////////////////////////////////////////////////////////////////////
410

    
411
  public static int unpackObject(int number)
412
    {
413
    int num;
414

    
415
    for(int i=0; i<NUM_OBJECTS; i++)
416
      {
417
      num = objects[i].mObjectSizes.length;
418
      if( number<num ) return i;
419
      number -= num;
420
      }
421

    
422
    return -1;
423
    }
424

    
425
///////////////////////////////////////////////////////////////////////////////////////////////////
426

    
427
  public static int unpackObjectFromString(String obj)
428
    {
429
    int u = obj.indexOf('_');
430
    int l = obj.length();
431

    
432
    if( u>0 )
433
      {
434
      String name = obj.substring(0,u);
435
      int size = Integer.parseInt( obj.substring(u+1,l) );
436

    
437
      for(int i=0; i<NUM_OBJECTS; i++)
438
        {
439
        if( objects[i].name().equals(name) )
440
          {
441
          int sizeIndex = getSizeIndex(i,size);
442
          return pack(i,sizeIndex);
443
          }
444
        }
445
      }
446

    
447
    return -1;
448
    }
449

    
450
///////////////////////////////////////////////////////////////////////////////////////////////////
451

    
452
  public static String getObjectList()
453
    {
454
    String name;
455
    StringBuilder list = new StringBuilder();
456
    int len;
457
    int[] sizes;
458

    
459
    for(int i=0; i<NUM_OBJECTS; i++)
460
      {
461
      sizes = objects[i].mObjectSizes;
462
      len   = sizes.length;
463
      name  = objects[i].name();
464

    
465
      for(int j=0; j<len; j++)
466
        {
467
        if( i>0 || j>0 ) list.append(',');
468
        list.append(name);
469
        list.append('_');
470
        list.append(sizes[j]);
471
        }
472
      }
473

    
474
    return list.toString();
475
    }
476

    
477
///////////////////////////////////////////////////////////////////////////////////////////////////
478

    
479
  public static int getTotal()
480
    {
481
    return mNumAll;
482
    }
483

    
484
///////////////////////////////////////////////////////////////////////////////////////////////////
485

    
486
  public static int getDBLevel(int ordinal, int sizeIndex)
487
    {
488
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
489
      {
490
      int num = objects[ordinal].mObjectSizes.length;
491
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mDBLevels[sizeIndex] : 0;
492
      }
493

    
494
    return 0;
495
    }
496

    
497
///////////////////////////////////////////////////////////////////////////////////////////////////
498

    
499
  public static int getNumScramble(int ordinal, int sizeIndex)
500
    {
501
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
502
      {
503
      int num = objects[ordinal].mObjectSizes.length;
504
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mNumScrambles[sizeIndex] : 0;
505
      }
506

    
507
    return 0;
508
    }
509

    
510
///////////////////////////////////////////////////////////////////////////////////////////////////
511

    
512
  public static int getOrdinal(String name)
513
    {
514
    for(int i=0; i<NUM_OBJECTS; i++)
515
      {
516
      if(objects[i].name().equals(name)) return i;
517
      }
518

    
519
    return -1;
520
    }
521

    
522
///////////////////////////////////////////////////////////////////////////////////////////////////
523

    
524
  public static int getSizeIndex(int ordinal, int size)
525
    {
526
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
527
      {
528
      int[] sizes = objects[ordinal].getSizes();
529
      int len = sizes.length;
530

    
531
      for(int i=0; i<len; i++)
532
        {
533
        if( sizes[i]==size ) return i;
534
        }
535
      }
536

    
537
    return -1;
538
    }
539

    
540
///////////////////////////////////////////////////////////////////////////////////////////////////
541

    
542
  public static int[] retFaceColors(ObjectList object)
543
    {
544
    Field field;
545
    int[] faceColors=null;
546

    
547
    try
548
      {
549
      field = object.mObjectClass.getDeclaredField("FACE_COLORS");
550
      field.setAccessible(true);
551
      Object obj = field.get(null);
552
      faceColors = (int[]) obj;
553
      }
554
    catch(NoSuchFieldException ex)
555
      {
556
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": no such field exception getting field: "+ex.getMessage());
557
      }
558
    catch(IllegalAccessException ex)
559
      {
560
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": illegal access exception getting field: "+ex.getMessage());
561
      }
562

    
563
    return faceColors;
564
    }
565

    
566
///////////////////////////////////////////////////////////////////////////////////////////////////
567

    
568
  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
569
    {
570
    mNumSizes = info.length;
571

    
572
    mObjectSizes  = new int[mNumSizes];
573
    mDBLevels     = new int[mNumSizes];
574
    mNumScrambles = new int[mNumSizes];
575
    mResourceIDs  = new int[mNumSizes];
576
    mSmallIconIDs = new int[mNumSizes];
577
    mMediumIconIDs= new int[mNumSizes];
578
    mBigIconIDs   = new int[mNumSizes];
579
    mHugeIconIDs  = new int[mNumSizes];
580

    
581
    for(int i=0; i<mNumSizes; i++)
582
      {
583
      mObjectSizes[i]  = info[i][0];
584
      mDBLevels[i]     = info[i][1];
585
      mNumScrambles[i] = info[i][2];
586
      mResourceIDs[i]  = info[i][3];
587
      mSmallIconIDs[i] = info[i][4];
588
      mMediumIconIDs[i]= info[i][5];
589
      mBigIconIDs[i]   = info[i][6];
590
      mHugeIconIDs[i]  = info[i][7];
591
      }
592

    
593
    mObjectClass         = object;
594
    mObjectMovementClass = movement;
595
    mRow                 = row;
596
    mFOV                 = fov;
597
    }
598

    
599
///////////////////////////////////////////////////////////////////////////////////////////////////
600

    
601
  public int[] getSizes()
602
    {
603
    return mObjectSizes;
604
    }
605

    
606
///////////////////////////////////////////////////////////////////////////////////////////////////
607

    
608
  public int[] getDBLevels()
609
    {
610
    return mDBLevels;
611
    }
612

    
613
///////////////////////////////////////////////////////////////////////////////////////////////////
614

    
615
  public int[] getNumScrambles()
616
    {
617
    return mNumScrambles;
618
    }
619

    
620
///////////////////////////////////////////////////////////////////////////////////////////////////
621

    
622
  public int getFOV()
623
    {
624
    return mFOV;
625
    }
626

    
627
///////////////////////////////////////////////////////////////////////////////////////////////////
628

    
629
  public int[] getIconIDs()
630
    {
631
    int size = RubikActivity.getDrawableSize();
632

    
633
    switch(size)
634
      {
635
      case 0 : return mSmallIconIDs;
636
      case 1 : return mMediumIconIDs;
637
      case 2 : return mBigIconIDs;
638
      default: return mHugeIconIDs;
639
      }
640
    }
641

    
642
///////////////////////////////////////////////////////////////////////////////////////////////////
643

    
644
  public int[] getResourceIDs()
645
    {
646
    return mResourceIDs;
647
    }
648

    
649
///////////////////////////////////////////////////////////////////////////////////////////////////
650

    
651
  public int getNumVariants()
652
    {
653
    return mObjectSizes.length;
654
    }
655

    
656
///////////////////////////////////////////////////////////////////////////////////////////////////
657

    
658
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
659
    {
660
    DistortedTexture texture = new DistortedTexture();
661
    DistortedEffects effects = new DistortedEffects();
662
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
663

    
664
    switch(ordinal())
665
      {
666
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
667
      case  1: return new TwistyJing          (size, quat, texture, mesh, effects, moves, res, scrWidth);
668
      case  2: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
669
      case  3: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
670
      case  4: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
671
      case  5: return new TwistyUltimate      (size, quat, texture, mesh, effects, moves, res, scrWidth);
672
      case  6: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
673
      case  7: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
674
      case  8: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
675
      case  9: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
676
      case 10: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
677
      case 11: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
678
      case 12: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
679
      case 13: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
680
      case 14: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
681
      case 15: return new TwistyBandaged2Bar  (size, quat, texture, mesh, effects, moves, res, scrWidth);
682
      case 16: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
683
      case 17: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
684
      case 18: return new TwistySquare1       (size, quat, texture, mesh, effects, moves, res, scrWidth);
685
      case 19: return new TwistySquare2       (size, quat, texture, mesh, effects, moves, res, scrWidth);
686
      case 20: return new TwistyMirror        (size, quat, texture, mesh, effects, moves, res, scrWidth);
687
      }
688

    
689
    return null;
690
    }
691

    
692
///////////////////////////////////////////////////////////////////////////////////////////////////
693

    
694
  public Movement getObjectMovementClass()
695
    {
696
    return mObjectMovementClass;
697
    }
698
  }
(16-16/43)