Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ e2b9e87e

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

    
50
  PYRA (
51
         new int[][] {
52
                       {3 , 10, R.raw.pyra3, R.drawable.ui_small_pyra3, R.drawable.ui_medium_pyra3, R.drawable.ui_big_pyra3, R.drawable.ui_huge_pyra3} ,
53
                       {4 , 15, R.raw.pyra4, R.drawable.ui_small_pyra4, R.drawable.ui_medium_pyra4, R.drawable.ui_big_pyra4, R.drawable.ui_huge_pyra4} ,
54
                       {5 , 20, R.raw.pyra5, R.drawable.ui_small_pyra5, R.drawable.ui_medium_pyra5, R.drawable.ui_big_pyra5, R.drawable.ui_huge_pyra5}
55
                     },
56
         TwistyPyraminx.class,
57
         new MovementPyraminx(),
58
         1,
59
         30
60
       ),
61

    
62
  ULTI (
63
         new int[][] {
64
                       {2 , 18, R.raw.ulti, R.drawable.ui_small_ulti, R.drawable.ui_medium_ulti, R.drawable.ui_big_ulti, R.drawable.ui_huge_ulti} ,
65
                     },
66
         TwistyUltimate.class,
67
         new MovementUltimate(),
68
         1,
69
         30
70
       ),
71

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

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

    
94
  DINO (
95
         new int[][] {
96
                       {3 , 10, R.raw.dino, R.drawable.ui_small_dino, R.drawable.ui_medium_dino, R.drawable.ui_big_dino, R.drawable.ui_huge_dino} ,
97
                     },
98
         TwistyDino6.class,
99
         new MovementDino(),
100
         3,
101
         60
102
       ),
103

    
104
  DIN4 (
105
         new int[][] {
106
                       {3 ,  7, R.raw.dino, R.drawable.ui_small_din4, R.drawable.ui_medium_din4, R.drawable.ui_big_din4, R.drawable.ui_huge_din4} ,
107
                     },
108
         TwistyDino4.class,
109
         new MovementDino(),
110
         3,
111
         60
112
       ),
113

    
114
  REDI (
115
         new int[][] {
116
                       {3 , 14, R.raw.redi, R.drawable.ui_small_redi, R.drawable.ui_medium_redi, R.drawable.ui_big_redi, R.drawable.ui_huge_redi} ,
117
                     },
118
         TwistyRedi.class,
119
         new MovementRedi(),
120
         3,
121
         60
122
       ),
123

    
124
  HELI (
125
         new int[][] {
126
                       {3 , 18, R.raw.heli, R.drawable.ui_small_heli, R.drawable.ui_medium_heli, R.drawable.ui_big_heli, R.drawable.ui_huge_heli} ,
127
                     },
128
         TwistyHelicopter.class,
129
         new MovementHelicopter(),
130
         3,
131
         60
132
       ),
133

    
134
  SKEW (
135
         new int[][] {
136
                       {2 , 11, R.raw.skew2, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
137
                       {3 , 17, R.raw.skew3, R.drawable.ui_small_skewm, R.drawable.ui_medium_skewm, R.drawable.ui_big_skewm, R.drawable.ui_huge_skewm} ,
138
                     },
139
         TwistySkewb.class,
140
         new MovementSkewb(),
141
         4,
142
         60
143
       ),
144

    
145
  IVY  (
146
         new int[][] {
147
                       {2 , 8, R.raw.ivy, R.drawable.ui_small_ivy, R.drawable.ui_medium_ivy, R.drawable.ui_big_ivy, R.drawable.ui_huge_ivy} ,
148
                     },
149
         TwistyIvy.class,
150
         new MovementIvy(),
151
         4,
152
         60
153
       ),
154

    
155
  REX  (
156
         new int[][] {
157
                       {3 , 16, R.raw.rex, R.drawable.ui_small_rex, R.drawable.ui_medium_rex, R.drawable.ui_big_rex, R.drawable.ui_huge_rex} ,
158
                     },
159
         TwistyRex.class,
160
         new MovementRex(),
161
         4,
162
         60
163
       ),
164

    
165
  BAN1 (
166
         new int[][] {
167
                       {3 , 16, R.raw.ban1, R.drawable.ui_small_ban1, R.drawable.ui_medium_ban1, R.drawable.ui_big_ban1, R.drawable.ui_huge_ban1} ,
168
                     },
169
         TwistyBandagedFused.class,
170
         new MovementCube(),
171
         5,
172
         60
173
       ),
174

    
175
  BAN2 (
176
         new int[][] {
177
                       {3 , 16, R.raw.ban2, R.drawable.ui_small_ban2, R.drawable.ui_medium_ban2, R.drawable.ui_big_ban2, R.drawable.ui_huge_ban2} ,
178
                     },
179
         TwistyBandaged2Bar.class,
180
         new MovementCube(),
181
         5,
182
         60
183
       ),
184

    
185
  BAN3 (
186
         new int[][] {
187
                       {3 , 16, R.raw.ban3, R.drawable.ui_small_ban3, R.drawable.ui_medium_ban3, R.drawable.ui_big_ban3, R.drawable.ui_huge_ban3} ,
188
                     },
189
         TwistyBandaged3Plate.class,
190
         new MovementCube(),
191
         5,
192
         60
193
       ),
194

    
195
  BAN4 (
196
         new int[][] {
197
                       {3 , 16, R.raw.ban4, R.drawable.ui_small_ban4, R.drawable.ui_medium_ban4, R.drawable.ui_big_ban4, R.drawable.ui_huge_ban4} ,
198
                     },
199
         TwistyBandagedEvil.class,
200
         new MovementCube(),
201
         5,
202
         60
203
       ),
204

    
205
  DIAM (
206
         new int[][] {
207
                       {2 , 10, R.raw.diam2, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
208
                       {3 , 18, R.raw.diam3, R.drawable.ui_small_diam3, R.drawable.ui_medium_diam3, R.drawable.ui_big_diam3, R.drawable.ui_huge_diam3} ,
209
                     },
210
         TwistyDiamond.class,
211
         new MovementDiamond(),
212
         6,
213
         60
214
       ),
215

    
216
  SQU1 (
217
         new int[][] {
218
                       {3 , 18, 0, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
219
                     },
220
         TwistySquare1.class,
221
         new MovementSquare(),
222
         6,
223
         60
224
       ),
225

    
226
  SQU2 (
227
         new int[][] {
228
                       {3 , 18, 0, R.drawable.ui_small_diam2, R.drawable.ui_medium_diam2, R.drawable.ui_big_diam2, R.drawable.ui_huge_diam2} ,
229
                     },
230
         TwistySquare2.class,
231
         new MovementSquare(),
232
         6,
233
         60
234
       ),
235
  ;
236

    
237
  public static final int NUM_OBJECTS = values().length;
238
  public static final int MAX_NUM_OBJECTS;
239
  public static final int MAX_LEVEL;
240
  public static final int MAX_OBJECT_SIZE;
241

    
242
  private final int[] mObjectSizes, mMaxLevels, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
243
  private final Class<? extends TwistyObject> mObjectClass;
244
  private final Movement mObjectMovementClass;
245
  private final int mRow, mNumSizes;
246
  private final int mFOV;
247

    
248
  private static final ObjectList[] objects;
249
  private static int mNumAll;
250
  private static int[] mIndices;
251
  private static int mColCount, mRowCount;
252

    
253
  static
254
    {
255
    mNumAll = 0;
256
    int num, i = 0;
257
    objects = new ObjectList[NUM_OBJECTS];
258
    int maxNum  = Integer.MIN_VALUE;
259
    int maxLevel= Integer.MIN_VALUE;
260
    int maxSize = Integer.MIN_VALUE;
261

    
262
    for(ObjectList object: ObjectList.values())
263
      {
264
      objects[i] = object;
265
      i++;
266
      num = object.mObjectSizes.length;
267
      mNumAll += num;
268
      if( num> maxNum ) maxNum = num;
269

    
270
      for(int j=0; j<num; j++)
271
        {
272
        if( object.mMaxLevels[j] > maxLevel ) maxLevel = object.mMaxLevels[j];
273
        if( object.mObjectSizes[j] > maxSize) maxSize  = object.mObjectSizes[j];
274
        }
275
      }
276

    
277
    MAX_NUM_OBJECTS = maxNum;
278
    MAX_LEVEL       = maxLevel;
279
    MAX_OBJECT_SIZE = maxSize;
280
    }
281

    
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283

    
284
  private static void setUpColAndRow()
285
    {
286
    mIndices = new int[NUM_OBJECTS];
287
    mRowCount= 0;
288

    
289
    for(int obj=0; obj<NUM_OBJECTS; obj++)
290
      {
291
      mIndices[obj] = objects[obj].mRow;
292
      if( mIndices[obj]>=mRowCount ) mRowCount = mIndices[obj]+1;
293
      }
294

    
295
    mColCount = 0;
296

    
297
    for(int row=0; row<mRowCount; row++)
298
      {
299
      int numObjects = computeNumObjectsInRow(row);
300
      if( numObjects>mColCount ) mColCount = numObjects;
301
      }
302
    }
303

    
304
///////////////////////////////////////////////////////////////////////////////////////////////////
305

    
306
  private static int computeNumObjectsInRow(int row)
307
    {
308
    int num=0;
309

    
310
    for(int object=0; object<NUM_OBJECTS; object++)
311
      {
312
      if( objects[object].mRow == row )
313
        {
314
        num += objects[object].mNumSizes;
315
        }
316
      }
317

    
318
    return num;
319
    }
320

    
321
///////////////////////////////////////////////////////////////////////////////////////////////////
322

    
323
  public static int getColumnCount()
324
    {
325
    if( mIndices==null ) setUpColAndRow();
326

    
327
    return mColCount;
328
    }
329

    
330
///////////////////////////////////////////////////////////////////////////////////////////////////
331

    
332
  public static int getRowCount()
333
    {
334
    if( mIndices==null ) setUpColAndRow();
335

    
336
    return mRowCount;
337
    }
338

    
339
///////////////////////////////////////////////////////////////////////////////////////////////////
340

    
341
  public static int[] getIndices()
342
    {
343
    if( mIndices==null ) setUpColAndRow();
344

    
345
    return mIndices;
346
    }
347

    
348
///////////////////////////////////////////////////////////////////////////////////////////////////
349

    
350
  public static ObjectList getObject(int ordinal)
351
    {
352
    return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal] : CUBE;
353
    }
354

    
355
///////////////////////////////////////////////////////////////////////////////////////////////////
356

    
357
  public static int pack(int object, int sizeIndex)
358
    {
359
    int ret = 0;
360
    for(int i=0; i<object; i++) ret += objects[i].mObjectSizes.length;
361

    
362
    return ret+sizeIndex;
363
    }
364

    
365
///////////////////////////////////////////////////////////////////////////////////////////////////
366

    
367
  public static int unpackSizeIndex(int number)
368
    {
369
    int num;
370

    
371
    for(int i=0; i<NUM_OBJECTS; i++)
372
      {
373
      num = objects[i].mObjectSizes.length;
374
      if( number<num ) return number;
375
      number -= num;
376
      }
377

    
378
    return -1;
379
    }
380

    
381
///////////////////////////////////////////////////////////////////////////////////////////////////
382

    
383
  public static int unpackObject(int number)
384
    {
385
    int num;
386

    
387
    for(int i=0; i<NUM_OBJECTS; i++)
388
      {
389
      num = objects[i].mObjectSizes.length;
390
      if( number<num ) return i;
391
      number -= num;
392
      }
393

    
394
    return -1;
395
    }
396

    
397
///////////////////////////////////////////////////////////////////////////////////////////////////
398

    
399
  public static int unpackObjectFromString(String obj)
400
    {
401
    int u = obj.indexOf('_');
402
    int l = obj.length();
403

    
404
    if( u>0 )
405
      {
406
      String name = obj.substring(0,u);
407
      int size = Integer.parseInt( obj.substring(u+1,l) );
408

    
409
      for(int i=0; i<NUM_OBJECTS; i++)
410
        {
411
        if( objects[i].name().equals(name) )
412
          {
413
          int sizeIndex = getSizeIndex(i,size);
414
          return pack(i,sizeIndex);
415
          }
416
        }
417
      }
418

    
419
    return -1;
420
    }
421

    
422
///////////////////////////////////////////////////////////////////////////////////////////////////
423

    
424
  public static String getObjectList()
425
    {
426
    String name;
427
    StringBuilder list = new StringBuilder();
428
    int len;
429
    int[] sizes;
430

    
431
    for(int i=0; i<NUM_OBJECTS; i++)
432
      {
433
      sizes = objects[i].mObjectSizes;
434
      len   = sizes.length;
435
      name  = objects[i].name();
436

    
437
      for(int j=0; j<len; j++)
438
        {
439
        if( i>0 || j>0 ) list.append(',');
440
        list.append(name);
441
        list.append('_');
442
        list.append(sizes[j]);
443
        }
444
      }
445

    
446
    return list.toString();
447
    }
448

    
449
///////////////////////////////////////////////////////////////////////////////////////////////////
450

    
451
  public static int getTotal()
452
    {
453
    return mNumAll;
454
    }
455

    
456
///////////////////////////////////////////////////////////////////////////////////////////////////
457

    
458
  public static int getMaxLevel(int ordinal, int sizeIndex)
459
    {
460
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
461
      {
462
      int num = objects[ordinal].mObjectSizes.length;
463
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mMaxLevels[sizeIndex] : 0;
464
      }
465

    
466
    return 0;
467
    }
468

    
469
///////////////////////////////////////////////////////////////////////////////////////////////////
470

    
471
  public static int getOrdinal(String name)
472
    {
473
    for(int i=0; i<NUM_OBJECTS; i++)
474
      {
475
      if(objects[i].name().equals(name)) return i;
476
      }
477

    
478
    return -1;
479
    }
480

    
481
///////////////////////////////////////////////////////////////////////////////////////////////////
482

    
483
  public static int getSizeIndex(int ordinal, int size)
484
    {
485
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
486
      {
487
      int[] sizes = objects[ordinal].getSizes();
488
      int len = sizes.length;
489

    
490
      for(int i=0; i<len; i++)
491
        {
492
        if( sizes[i]==size ) return i;
493
        }
494
      }
495

    
496
    return -1;
497
    }
498

    
499
///////////////////////////////////////////////////////////////////////////////////////////////////
500

    
501
  public static int[] retFaceColors(ObjectList object)
502
    {
503
    Field field;
504
    int[] faceColors=null;
505

    
506
    try
507
      {
508
      field = object.mObjectClass.getDeclaredField("FACE_COLORS");
509
      field.setAccessible(true);
510
      Object obj = field.get(null);
511
      faceColors = (int[]) obj;
512
      }
513
    catch(NoSuchFieldException ex)
514
      {
515
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": no such field exception getting field: "+ex.getMessage());
516
      }
517
    catch(IllegalAccessException ex)
518
      {
519
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": illegal access exception getting field: "+ex.getMessage());
520
      }
521

    
522
    return faceColors;
523
    }
524

    
525
///////////////////////////////////////////////////////////////////////////////////////////////////
526

    
527
  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
528
    {
529
    mNumSizes = info.length;
530

    
531
    mObjectSizes  = new int[mNumSizes];
532
    mMaxLevels    = new int[mNumSizes];
533
    mResourceIDs  = new int[mNumSizes];
534
    mSmallIconIDs = new int[mNumSizes];
535
    mMediumIconIDs= new int[mNumSizes];
536
    mBigIconIDs   = new int[mNumSizes];
537
    mHugeIconIDs  = new int[mNumSizes];
538

    
539
    for(int i=0; i<mNumSizes; i++)
540
      {
541
      mObjectSizes[i]  = info[i][0];
542
      mMaxLevels[i]    = info[i][1];
543
      mResourceIDs[i]  = info[i][2];
544
      mSmallIconIDs[i] = info[i][3];
545
      mMediumIconIDs[i]= info[i][4];
546
      mBigIconIDs[i]   = info[i][5];
547
      mHugeIconIDs[i]  = info[i][6];
548
      }
549

    
550
    mObjectClass         = object;
551
    mObjectMovementClass = movement;
552
    mRow                 = row;
553
    mFOV                 = fov;
554
    }
555

    
556
///////////////////////////////////////////////////////////////////////////////////////////////////
557

    
558
  public int[] getSizes()
559
    {
560
    return mObjectSizes;
561
    }
562

    
563
///////////////////////////////////////////////////////////////////////////////////////////////////
564

    
565
  public int[] getMaxLevels()
566
    {
567
    return mMaxLevels;
568
    }
569

    
570
///////////////////////////////////////////////////////////////////////////////////////////////////
571

    
572
  public int getFOV()
573
    {
574
    return mFOV;
575
    }
576

    
577
///////////////////////////////////////////////////////////////////////////////////////////////////
578

    
579
  public int[] getIconIDs()
580
    {
581
    int size = RubikActivity.getDrawableSize();
582

    
583
    switch(size)
584
      {
585
      case 0 : return mSmallIconIDs;
586
      case 1 : return mMediumIconIDs;
587
      case 2 : return mBigIconIDs;
588
      default: return mHugeIconIDs;
589
      }
590
    }
591

    
592
///////////////////////////////////////////////////////////////////////////////////////////////////
593

    
594
  public int[] getResourceIDs()
595
    {
596
    return mResourceIDs;
597
    }
598

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

    
601
  public int getNumVariants()
602
    {
603
    return mObjectSizes.length;
604
    }
605

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

    
608
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
609
    {
610
    DistortedTexture texture = new DistortedTexture();
611
    DistortedEffects effects = new DistortedEffects();
612
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
613

    
614
    switch(ordinal())
615
      {
616
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
617
      case  1: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
618
      case  2: return new TwistyUltimate      (size, quat, texture, mesh, effects, moves, res, scrWidth);
619
      case  3: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
620
      case  4: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
621
      case  5: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
622
      case  6: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
623
      case  7: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
624
      case  8: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
625
      case  9: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
626
      case 10: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
627
      case 11: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
628
      case 12: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
629
      case 13: return new TwistyBandaged2Bar  (size, quat, texture, mesh, effects, moves, res, scrWidth);
630
      case 14: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
631
      case 15: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
632
      case 16: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
633
      case 17: return new TwistySquare1       (size, quat, texture, mesh, effects, moves, res, scrWidth);
634
      case 18: return new TwistySquare2       (size, quat, texture, mesh, effects, moves, res, scrWidth);
635
      }
636

    
637
    return null;
638
    }
639

    
640
///////////////////////////////////////////////////////////////////////////////////////////////////
641

    
642
  public Movement getObjectMovementClass()
643
    {
644
    return mObjectMovementClass;
645
    }
646
  }
(15-15/39)