Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 4da63d67

1 27a70eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
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 1f9772f3 Leszek Koltunski
package org.distorted.objects;
21 27a70eae Leszek Koltunski
22 ccf9fec5 Leszek Koltunski
import android.content.res.Resources;
23
24 27a70eae Leszek Koltunski
import org.distorted.library.main.DistortedEffects;
25
import org.distorted.library.main.DistortedTexture;
26 efa8aa48 Leszek Koltunski
import org.distorted.library.mesh.MeshSquare;
27 27a70eae Leszek Koltunski
import org.distorted.library.type.Static4D;
28 1f9772f3 Leszek Koltunski
import org.distorted.main.R;
29 f6a9c538 Leszek Koltunski
import org.distorted.main.RubikActivity;
30 27a70eae Leszek Koltunski
31 20931cf6 Leszek Koltunski
import java.lang.reflect.Field;
32
33 27a70eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
34
35 9c2f0c91 Leszek Koltunski
public enum ObjectList
36 27a70eae Leszek Koltunski
  {
37 4c0cd600 Leszek Koltunski
  CUBE (
38
         new int[][] {
39 31a9f38d Leszek Koltunski
                       {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 4c0cd600 Leszek Koltunski
                     },
44 9c2f0c91 Leszek Koltunski
         TwistyCube.class,
45 ca3300c3 Leszek Koltunski
         new MovementCube(),
46 db875721 Leszek Koltunski
         0,
47
         60
48 4c0cd600 Leszek Koltunski
       ),
49
50
  PYRA (
51
         new int[][] {
52 31a9f38d Leszek Koltunski
                       {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 4c0cd600 Leszek Koltunski
                     },
56 9c2f0c91 Leszek Koltunski
         TwistyPyraminx.class,
57 ca3300c3 Leszek Koltunski
         new MovementPyraminx(),
58 db875721 Leszek Koltunski
         1,
59
         30
60 4c0cd600 Leszek Koltunski
       ),
61 418aa554 Leszek Koltunski
62 ece1b58d Leszek Koltunski
  DIAM (
63
         new int[][] {
64 30fdccf8 Leszek Koltunski
                       {2 , 10, R.raw.diamond, R.drawable.ui_small_diam, R.drawable.ui_medium_diam, R.drawable.ui_big_diam, R.drawable.ui_huge_diam} ,
65 ece1b58d Leszek Koltunski
                     },
66 9c2f0c91 Leszek Koltunski
         TwistyDiamond.class,
67 ca3300c3 Leszek Koltunski
         new MovementDiamond(),
68 db875721 Leszek Koltunski
         1,
69
         60
70 ece1b58d Leszek Koltunski
       ),
71
72 418aa554 Leszek Koltunski
  DINO (
73
         new int[][] {
74 f05807f7 Leszek Koltunski
                       {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} ,
75 418aa554 Leszek Koltunski
                     },
76 9c2f0c91 Leszek Koltunski
         TwistyDino6.class,
77 ca3300c3 Leszek Koltunski
         new MovementDino(),
78 db875721 Leszek Koltunski
         2,
79
         60
80 eaee1ddc Leszek Koltunski
       ),
81
82
  DIN4 (
83
         new int[][] {
84
                       {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} ,
85
                     },
86 9c2f0c91 Leszek Koltunski
         TwistyDino4.class,
87 ca3300c3 Leszek Koltunski
         new MovementDino(),
88 db875721 Leszek Koltunski
         2,
89
         60
90 418aa554 Leszek Koltunski
       ),
91 fb52fae9 Leszek Koltunski
92 b96a79ff Leszek Koltunski
  REDI (
93 ee35e63c Leszek Koltunski
         new int[][] {
94 b96a79ff Leszek Koltunski
                       {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} ,
95 ee35e63c Leszek Koltunski
                     },
96 b96a79ff Leszek Koltunski
         TwistyRedi.class,
97
         new MovementRedi(),
98 db875721 Leszek Koltunski
         2,
99
         60
100 ee35e63c Leszek Koltunski
       ),
101 68f6046c Leszek Koltunski
102 b96a79ff Leszek Koltunski
  HELI (
103 68f6046c Leszek Koltunski
         new int[][] {
104 b96a79ff Leszek Koltunski
                       {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} ,
105 68f6046c Leszek Koltunski
                     },
106 b96a79ff Leszek Koltunski
         TwistyHelicopter.class,
107
         new MovementHelicopter(),
108 db875721 Leszek Koltunski
         2,
109
         60
110 3f3ff476 Leszek Koltunski
       ),
111
112
  SKEW (
113
         new int[][] {
114
                       {2 , 11, R.raw.skewb, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
115 e51599f4 Leszek Koltunski
                       {3 , 17, R.raw.skewm, R.drawable.ui_small_skewm, R.drawable.ui_medium_skewm, R.drawable.ui_big_skewm, R.drawable.ui_huge_skewm} ,
116 3f3ff476 Leszek Koltunski
                     },
117
         TwistySkewb.class,
118
         new MovementSkewb(),
119 db875721 Leszek Koltunski
         3,
120
         60
121 68f6046c Leszek Koltunski
       ),
122 49cd8581 Leszek Koltunski
123 bbc6da6c Leszek Koltunski
  IVY  (
124 49cd8581 Leszek Koltunski
         new int[][] {
125 d73de3db Leszek Koltunski
                       {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} ,
126 49cd8581 Leszek Koltunski
                     },
127
         TwistyIvy.class,
128
         new MovementIvy(),
129 db875721 Leszek Koltunski
         3,
130
         60
131 49cd8581 Leszek Koltunski
       ),
132 59b87d56 Leszek Koltunski
133 bbc6da6c Leszek Koltunski
  REX  (
134 59b87d56 Leszek Koltunski
         new int[][] {
135 03aa05d5 Leszek Koltunski
                       {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} ,
136 59b87d56 Leszek Koltunski
                     },
137
         TwistyRex.class,
138
         new MovementRex(),
139 db875721 Leszek Koltunski
         3,
140
         60
141 59b87d56 Leszek Koltunski
       ),
142 bbc6da6c Leszek Koltunski
143 14fe8a07 Leszek Koltunski
  KILO (
144 bbc6da6c Leszek Koltunski
         new int[][] {
145 fa806818 Leszek Koltunski
                       {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} ,
146 bbc6da6c Leszek Koltunski
                     },
147 fa806818 Leszek Koltunski
         TwistyKilominx.class,
148 a64e07d0 Leszek Koltunski
         new MovementMinx(),
149 db875721 Leszek Koltunski
         4,
150
         30
151 a64e07d0 Leszek Koltunski
       ),
152
153
  MEGA (
154
         new int[][] {
155 1e6fb034 Leszek Koltunski
                       {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} ,
156 00af5060 Leszek Koltunski
                       {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} ,
157 a64e07d0 Leszek Koltunski
                     },
158
         TwistyMegaminx.class,
159
         new MovementMinx(),
160 db875721 Leszek Koltunski
         4,
161
         30
162 bbc6da6c Leszek Koltunski
       ),
163 4c0a6d97 Leszek Koltunski
164
  BAN1 (
165
         new int[][] {
166 4da63d67 Leszek Koltunski
                       {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} ,
167 4c0a6d97 Leszek Koltunski
                     },
168
         TwistyBandagedFused.class,
169
         new MovementCube(),
170
         5,
171
         60
172
       ),
173 538ee7a6 Leszek Koltunski
174
  BAN2 (
175
         new int[][] {
176 4da63d67 Leszek Koltunski
                       {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} ,
177 538ee7a6 Leszek Koltunski
                     },
178
         TwistyBandaged2Bar.class,
179
         new MovementCube(),
180
         5,
181
         60
182
       ),
183
184
  BAN3 (
185
         new int[][] {
186 4da63d67 Leszek Koltunski
                       {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} ,
187 538ee7a6 Leszek Koltunski
                     },
188
         TwistyBandaged3Plate.class,
189
         new MovementCube(),
190
         5,
191
         60
192
       ),
193
194
  BAN4 (
195
         new int[][] {
196 4da63d67 Leszek Koltunski
                       {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} ,
197 538ee7a6 Leszek Koltunski
                     },
198
         TwistyBandagedEvil.class,
199
         new MovementCube(),
200
         5,
201
         60
202
       ),
203 27a70eae Leszek Koltunski
  ;
204
205 4888e97c Leszek Koltunski
  public static final int NUM_OBJECTS = values().length;
206 8cccfb10 Leszek Koltunski
  public static final int MAX_NUM_OBJECTS;
207 8e3898c8 Leszek Koltunski
  public static final int MAX_LEVEL;
208 8cccfb10 Leszek Koltunski
  public static final int MAX_OBJECT_SIZE;
209 4888e97c Leszek Koltunski
210 31a9f38d Leszek Koltunski
  private final int[] mObjectSizes, mMaxLevels, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
211 9c2f0c91 Leszek Koltunski
  private final Class<? extends TwistyObject> mObjectClass;
212 ca3300c3 Leszek Koltunski
  private final Movement mObjectMovementClass;
213 0501a4b8 Leszek Koltunski
  private final int mRow, mNumSizes;
214 db875721 Leszek Koltunski
  private final int mFOV;
215 fa679111 Leszek Koltunski
216 9c2f0c91 Leszek Koltunski
  private static final ObjectList[] objects;
217 4888e97c Leszek Koltunski
  private static int mNumAll;
218 e07c48a2 Leszek Koltunski
  private static int[] mIndices;
219 fa679111 Leszek Koltunski
  private static int mColCount, mRowCount;
220 27a70eae Leszek Koltunski
221
  static
222
    {
223 4888e97c Leszek Koltunski
    mNumAll = 0;
224 8cccfb10 Leszek Koltunski
    int num, i = 0;
225 9c2f0c91 Leszek Koltunski
    objects = new ObjectList[NUM_OBJECTS];
226 8cccfb10 Leszek Koltunski
    int maxNum  = Integer.MIN_VALUE;
227
    int maxLevel= Integer.MIN_VALUE;
228
    int maxSize = Integer.MIN_VALUE;
229 27a70eae Leszek Koltunski
230 9c2f0c91 Leszek Koltunski
    for(ObjectList object: ObjectList.values())
231 27a70eae Leszek Koltunski
      {
232 4888e97c Leszek Koltunski
      objects[i] = object;
233 27a70eae Leszek Koltunski
      i++;
234 8cccfb10 Leszek Koltunski
      num = object.mObjectSizes.length;
235
      mNumAll += num;
236
      if( num> maxNum ) maxNum = num;
237 8e3898c8 Leszek Koltunski
238 8cccfb10 Leszek Koltunski
      for(int j=0; j<num; j++)
239 8e3898c8 Leszek Koltunski
        {
240
        if( object.mMaxLevels[j] > maxLevel ) maxLevel = object.mMaxLevels[j];
241 8cccfb10 Leszek Koltunski
        if( object.mObjectSizes[j] > maxSize) maxSize  = object.mObjectSizes[j];
242 8e3898c8 Leszek Koltunski
        }
243 27a70eae Leszek Koltunski
      }
244 4888e97c Leszek Koltunski
245 8cccfb10 Leszek Koltunski
    MAX_NUM_OBJECTS = maxNum;
246
    MAX_LEVEL       = maxLevel;
247
    MAX_OBJECT_SIZE = maxSize;
248 27a70eae Leszek Koltunski
    }
249
250 e07c48a2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
251 fa679111 Leszek Koltunski
252
  private static void setUpColAndRow()
253
    {
254
    mIndices = new int[NUM_OBJECTS];
255 0501a4b8 Leszek Koltunski
    mRowCount= 0;
256 fa679111 Leszek Koltunski
257
    for(int obj=0; obj<NUM_OBJECTS; obj++)
258
      {
259 0501a4b8 Leszek Koltunski
      mIndices[obj] = objects[obj].mRow;
260
      if( mIndices[obj]>=mRowCount ) mRowCount = mIndices[obj]+1;
261 fa679111 Leszek Koltunski
      }
262
263 0501a4b8 Leszek Koltunski
    mColCount = 0;
264 fa679111 Leszek Koltunski
265 0501a4b8 Leszek Koltunski
    for(int row=0; row<mRowCount; row++)
266 fa679111 Leszek Koltunski
      {
267 0501a4b8 Leszek Koltunski
      int numObjects = computeNumObjectsInRow(row);
268
      if( numObjects>mColCount ) mColCount = numObjects;
269 fa679111 Leszek Koltunski
      }
270
    }
271
272
///////////////////////////////////////////////////////////////////////////////////////////////////
273
274 0501a4b8 Leszek Koltunski
  private static int computeNumObjectsInRow(int row)
275 fa679111 Leszek Koltunski
    {
276
    int num=0;
277
278
    for(int object=0; object<NUM_OBJECTS; object++)
279
      {
280 0501a4b8 Leszek Koltunski
      if( objects[object].mRow == row )
281 fa679111 Leszek Koltunski
        {
282
        num += objects[object].mNumSizes;
283
        }
284
      }
285
286
    return num;
287
    }
288
289
///////////////////////////////////////////////////////////////////////////////////////////////////
290
291 e07c48a2 Leszek Koltunski
  public static int getColumnCount()
292
    {
293 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
294
295
    return mColCount;
296 e07c48a2 Leszek Koltunski
    }
297
298
///////////////////////////////////////////////////////////////////////////////////////////////////
299 fa679111 Leszek Koltunski
300 e07c48a2 Leszek Koltunski
  public static int getRowCount()
301
    {
302 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
303
304
    return mRowCount;
305 e07c48a2 Leszek Koltunski
    }
306
307
///////////////////////////////////////////////////////////////////////////////////////////////////
308 fa679111 Leszek Koltunski
309 e07c48a2 Leszek Koltunski
  public static int[] getIndices()
310
    {
311 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
312
313 e07c48a2 Leszek Koltunski
    return mIndices;
314
    }
315
316 27a70eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
317
318 9c2f0c91 Leszek Koltunski
  public static ObjectList getObject(int ordinal)
319 27a70eae Leszek Koltunski
    {
320 7ec268b1 Leszek Koltunski
    return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal] : CUBE;
321 27a70eae Leszek Koltunski
    }
322
323
///////////////////////////////////////////////////////////////////////////////////////////////////
324
325 b498f3f6 Leszek Koltunski
  public static int pack(int object, int sizeIndex)
326 4888e97c Leszek Koltunski
    {
327
    int ret = 0;
328
    for(int i=0; i<object; i++) ret += objects[i].mObjectSizes.length;
329
330 b498f3f6 Leszek Koltunski
    return ret+sizeIndex;
331 4888e97c Leszek Koltunski
    }
332
333
///////////////////////////////////////////////////////////////////////////////////////////////////
334
335 8e3898c8 Leszek Koltunski
  public static int unpackSizeIndex(int number)
336 4888e97c Leszek Koltunski
    {
337
    int num;
338
339
    for(int i=0; i<NUM_OBJECTS; i++)
340
      {
341
      num = objects[i].mObjectSizes.length;
342
      if( number<num ) return number;
343
      number -= num;
344
      }
345
346
    return -1;
347
    }
348
349
///////////////////////////////////////////////////////////////////////////////////////////////////
350
351
  public static int unpackObject(int number)
352 27a70eae Leszek Koltunski
    {
353 4888e97c Leszek Koltunski
    int num;
354
355
    for(int i=0; i<NUM_OBJECTS; i++)
356
      {
357
      num = objects[i].mObjectSizes.length;
358
      if( number<num ) return i;
359
      number -= num;
360
      }
361
362
    return -1;
363
    }
364
365 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
366
367
  public static int unpackObjectFromString(String obj)
368
    {
369
    int u = obj.indexOf('_');
370
    int l = obj.length();
371
372
    if( u>0 )
373
      {
374
      String name = obj.substring(0,u);
375
      int size = Integer.parseInt( obj.substring(u+1,l) );
376
377
      for(int i=0; i<NUM_OBJECTS; i++)
378
        {
379
        if( objects[i].name().equals(name) )
380
          {
381 53f23b64 Leszek Koltunski
          int sizeIndex = getSizeIndex(i,size);
382
          return pack(i,sizeIndex);
383 286d73ae Leszek Koltunski
          }
384
        }
385
      }
386
387
    return -1;
388
    }
389
390
///////////////////////////////////////////////////////////////////////////////////////////////////
391
392
  public static String getObjectList()
393
    {
394
    String name;
395
    StringBuilder list = new StringBuilder();
396
    int len;
397
    int[] sizes;
398
399
    for(int i=0; i<NUM_OBJECTS; i++)
400
      {
401
      sizes = objects[i].mObjectSizes;
402
      len   = sizes.length;
403
      name  = objects[i].name();
404
405
      for(int j=0; j<len; j++)
406
        {
407
        if( i>0 || j>0 ) list.append(',');
408
        list.append(name);
409
        list.append('_');
410
        list.append(sizes[j]);
411
        }
412
      }
413
414
    return list.toString();
415
    }
416
417 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
418
419
  public static int getTotal()
420
    {
421
    return mNumAll;
422
    }
423
424 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
425
426
  public static int getMaxLevel(int ordinal, int sizeIndex)
427
    {
428
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
429
      {
430
      int num = objects[ordinal].mObjectSizes.length;
431
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mMaxLevels[sizeIndex] : 0;
432
      }
433
434
    return 0;
435
    }
436
437 c86f9f1f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
438
439
  public static int getOrdinal(String name)
440
    {
441
    for(int i=0; i<NUM_OBJECTS; i++)
442
      {
443
      if(objects[i].name().equals(name)) return i;
444
      }
445
446
    return -1;
447
    }
448
449
///////////////////////////////////////////////////////////////////////////////////////////////////
450
451 53f23b64 Leszek Koltunski
  public static int getSizeIndex(int ordinal, int size)
452 c86f9f1f Leszek Koltunski
    {
453 7ec268b1 Leszek Koltunski
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
454 c86f9f1f Leszek Koltunski
      {
455 7ec268b1 Leszek Koltunski
      int[] sizes = objects[ordinal].getSizes();
456
      int len = sizes.length;
457
458
      for(int i=0; i<len; i++)
459
        {
460
        if( sizes[i]==size ) return i;
461
        }
462 c86f9f1f Leszek Koltunski
      }
463
464
    return -1;
465
    }
466
467 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
468
469 9c2f0c91 Leszek Koltunski
  public static int[] retFaceColors(ObjectList object)
470 20931cf6 Leszek Koltunski
    {
471
    Field field;
472
    int[] faceColors=null;
473
474
    try
475
      {
476
      field = object.mObjectClass.getDeclaredField("FACE_COLORS");
477
      field.setAccessible(true);
478
      Object obj = field.get(null);
479
      faceColors = (int[]) obj;
480
      }
481
    catch(NoSuchFieldException ex)
482
      {
483
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": no such field exception getting field: "+ex.getMessage());
484
      }
485
    catch(IllegalAccessException ex)
486
      {
487
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": illegal access exception getting field: "+ex.getMessage());
488
      }
489
490
    return faceColors;
491
    }
492
493
///////////////////////////////////////////////////////////////////////////////////////////////////
494
495 0501a4b8 Leszek Koltunski
  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
496 4888e97c Leszek Koltunski
    {
497 fa679111 Leszek Koltunski
    mNumSizes = info.length;
498 ea6ee91b Leszek Koltunski
499 fa679111 Leszek Koltunski
    mObjectSizes  = new int[mNumSizes];
500
    mMaxLevels    = new int[mNumSizes];
501
    mResourceIDs  = new int[mNumSizes];
502
    mSmallIconIDs = new int[mNumSizes];
503
    mMediumIconIDs= new int[mNumSizes];
504
    mBigIconIDs   = new int[mNumSizes];
505
    mHugeIconIDs  = new int[mNumSizes];
506 ea6ee91b Leszek Koltunski
507 fa679111 Leszek Koltunski
    for(int i=0; i<mNumSizes; i++)
508 ea6ee91b Leszek Koltunski
      {
509 f6a9c538 Leszek Koltunski
      mObjectSizes[i]  = info[i][0];
510
      mMaxLevels[i]    = info[i][1];
511
      mResourceIDs[i]  = info[i][2];
512
      mSmallIconIDs[i] = info[i][3];
513
      mMediumIconIDs[i]= info[i][4];
514
      mBigIconIDs[i]   = info[i][5];
515 31a9f38d Leszek Koltunski
      mHugeIconIDs[i]  = info[i][6];
516 ea6ee91b Leszek Koltunski
      }
517
518 20931cf6 Leszek Koltunski
    mObjectClass         = object;
519 27a70eae Leszek Koltunski
    mObjectMovementClass = movement;
520 0501a4b8 Leszek Koltunski
    mRow                 = row;
521 db875721 Leszek Koltunski
    mFOV                 = fov;
522 27a70eae Leszek Koltunski
    }
523
524
///////////////////////////////////////////////////////////////////////////////////////////////////
525
526 8e3898c8 Leszek Koltunski
  public int[] getSizes()
527 27a70eae Leszek Koltunski
    {
528 8e3898c8 Leszek Koltunski
    return mObjectSizes;
529 27a70eae Leszek Koltunski
    }
530
531
///////////////////////////////////////////////////////////////////////////////////////////////////
532
533 8e3898c8 Leszek Koltunski
  public int[] getMaxLevels()
534 4888e97c Leszek Koltunski
    {
535 8e3898c8 Leszek Koltunski
    return mMaxLevels;
536
    }
537
538 db875721 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
539
540
  public int getFOV()
541
    {
542
    return mFOV;
543
    }
544
545 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
546
547
  public int[] getIconIDs()
548
    {
549 f6a9c538 Leszek Koltunski
    int size = RubikActivity.getDrawableSize();
550
551
    switch(size)
552
      {
553
      case 0 : return mSmallIconIDs;
554
      case 1 : return mMediumIconIDs;
555 31a9f38d Leszek Koltunski
      case 2 : return mBigIconIDs;
556
      default: return mHugeIconIDs;
557 f6a9c538 Leszek Koltunski
      }
558 4888e97c Leszek Koltunski
    }
559
560
///////////////////////////////////////////////////////////////////////////////////////////////////
561
562 ccf9fec5 Leszek Koltunski
  public int[] getResourceIDs()
563
    {
564
    return mResourceIDs;
565
    }
566
567 fbca0033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
568
569
  public int getNumVariants()
570
    {
571
    return mObjectSizes.length;
572
    }
573
574 ccf9fec5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
575
576 9c2f0c91 Leszek Koltunski
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
577 27a70eae Leszek Koltunski
    {
578 5974d2ae Leszek Koltunski
    DistortedTexture texture = new DistortedTexture();
579 36273130 Leszek Koltunski
    DistortedEffects effects = new DistortedEffects();
580 fb52fae9 Leszek Koltunski
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
581 74686c71 Leszek Koltunski
582 4888e97c Leszek Koltunski
    switch(ordinal())
583
      {
584 538ee7a6 Leszek Koltunski
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
585
      case  1: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
586
      case  2: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
587
      case  3: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
588
      case  4: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
589
      case  5: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
590
      case  6: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
591
      case  7: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
592
      case  8: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
593
      case  9: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
594
      case 10: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
595
      case 11: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
596
      case 12: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
597
      case 13: return new TwistyBandaged2Bar(size, quat, texture, mesh, effects, moves, res, scrWidth);
598
      case 14: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
599
      case 15: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
600 4888e97c Leszek Koltunski
      }
601
602
    return null;
603 27a70eae Leszek Koltunski
    }
604
605
///////////////////////////////////////////////////////////////////////////////////////////////////
606
607 ca3300c3 Leszek Koltunski
  public Movement getObjectMovementClass()
608 27a70eae Leszek Koltunski
    {
609 4888e97c Leszek Koltunski
    return mObjectMovementClass;
610 27a70eae Leszek Koltunski
    }
611
  }