Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 5b115c9b

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 e50d4668 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 e50d4668 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 e50d4668 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 e50d4668 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 e50d4668 Leszek Koltunski
                       {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
                       {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 e50d4668 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 5b115c9b Leszek Koltunski
                       {5 , 33, R.raw.kilo3, R.drawable.ui_small_kilo5, R.drawable.ui_medium_kilo5, R.drawable.ui_big_kilo5, R.drawable.ui_huge_kilo5} ,
147 bbc6da6c Leszek Koltunski
                     },
148 fa806818 Leszek Koltunski
         TwistyKilominx.class,
149 a64e07d0 Leszek Koltunski
         new MovementMinx(),
150 db875721 Leszek Koltunski
         4,
151
         30
152 a64e07d0 Leszek Koltunski
       ),
153
154
  MEGA (
155
         new int[][] {
156 e50d4668 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} ,
157 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} ,
158 a64e07d0 Leszek Koltunski
                     },
159
         TwistyMegaminx.class,
160
         new MovementMinx(),
161 db875721 Leszek Koltunski
         4,
162
         30
163 bbc6da6c Leszek Koltunski
       ),
164 4c0a6d97 Leszek Koltunski
165
  BAN1 (
166
         new int[][] {
167 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} ,
168 4c0a6d97 Leszek Koltunski
                     },
169
         TwistyBandagedFused.class,
170
         new MovementCube(),
171
         5,
172
         60
173
       ),
174 538ee7a6 Leszek Koltunski
175
  BAN2 (
176
         new int[][] {
177 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} ,
178 538ee7a6 Leszek Koltunski
                     },
179
         TwistyBandaged2Bar.class,
180
         new MovementCube(),
181
         5,
182
         60
183
       ),
184
185
  BAN3 (
186
         new int[][] {
187 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} ,
188 538ee7a6 Leszek Koltunski
                     },
189
         TwistyBandaged3Plate.class,
190
         new MovementCube(),
191
         5,
192
         60
193
       ),
194
195
  BAN4 (
196
         new int[][] {
197 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} ,
198 538ee7a6 Leszek Koltunski
                     },
199
         TwistyBandagedEvil.class,
200
         new MovementCube(),
201
         5,
202
         60
203
       ),
204 27a70eae Leszek Koltunski
  ;
205
206 4888e97c Leszek Koltunski
  public static final int NUM_OBJECTS = values().length;
207 8cccfb10 Leszek Koltunski
  public static final int MAX_NUM_OBJECTS;
208 8e3898c8 Leszek Koltunski
  public static final int MAX_LEVEL;
209 8cccfb10 Leszek Koltunski
  public static final int MAX_OBJECT_SIZE;
210 4888e97c Leszek Koltunski
211 31a9f38d Leszek Koltunski
  private final int[] mObjectSizes, mMaxLevels, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
212 9c2f0c91 Leszek Koltunski
  private final Class<? extends TwistyObject> mObjectClass;
213 ca3300c3 Leszek Koltunski
  private final Movement mObjectMovementClass;
214 0501a4b8 Leszek Koltunski
  private final int mRow, mNumSizes;
215 db875721 Leszek Koltunski
  private final int mFOV;
216 fa679111 Leszek Koltunski
217 9c2f0c91 Leszek Koltunski
  private static final ObjectList[] objects;
218 4888e97c Leszek Koltunski
  private static int mNumAll;
219 e07c48a2 Leszek Koltunski
  private static int[] mIndices;
220 fa679111 Leszek Koltunski
  private static int mColCount, mRowCount;
221 27a70eae Leszek Koltunski
222
  static
223
    {
224 4888e97c Leszek Koltunski
    mNumAll = 0;
225 8cccfb10 Leszek Koltunski
    int num, i = 0;
226 9c2f0c91 Leszek Koltunski
    objects = new ObjectList[NUM_OBJECTS];
227 8cccfb10 Leszek Koltunski
    int maxNum  = Integer.MIN_VALUE;
228
    int maxLevel= Integer.MIN_VALUE;
229
    int maxSize = Integer.MIN_VALUE;
230 27a70eae Leszek Koltunski
231 9c2f0c91 Leszek Koltunski
    for(ObjectList object: ObjectList.values())
232 27a70eae Leszek Koltunski
      {
233 4888e97c Leszek Koltunski
      objects[i] = object;
234 27a70eae Leszek Koltunski
      i++;
235 8cccfb10 Leszek Koltunski
      num = object.mObjectSizes.length;
236
      mNumAll += num;
237
      if( num> maxNum ) maxNum = num;
238 8e3898c8 Leszek Koltunski
239 8cccfb10 Leszek Koltunski
      for(int j=0; j<num; j++)
240 8e3898c8 Leszek Koltunski
        {
241
        if( object.mMaxLevels[j] > maxLevel ) maxLevel = object.mMaxLevels[j];
242 8cccfb10 Leszek Koltunski
        if( object.mObjectSizes[j] > maxSize) maxSize  = object.mObjectSizes[j];
243 8e3898c8 Leszek Koltunski
        }
244 27a70eae Leszek Koltunski
      }
245 4888e97c Leszek Koltunski
246 8cccfb10 Leszek Koltunski
    MAX_NUM_OBJECTS = maxNum;
247
    MAX_LEVEL       = maxLevel;
248
    MAX_OBJECT_SIZE = maxSize;
249 27a70eae Leszek Koltunski
    }
250
251 e07c48a2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
252 fa679111 Leszek Koltunski
253
  private static void setUpColAndRow()
254
    {
255
    mIndices = new int[NUM_OBJECTS];
256 0501a4b8 Leszek Koltunski
    mRowCount= 0;
257 fa679111 Leszek Koltunski
258
    for(int obj=0; obj<NUM_OBJECTS; obj++)
259
      {
260 0501a4b8 Leszek Koltunski
      mIndices[obj] = objects[obj].mRow;
261
      if( mIndices[obj]>=mRowCount ) mRowCount = mIndices[obj]+1;
262 fa679111 Leszek Koltunski
      }
263
264 0501a4b8 Leszek Koltunski
    mColCount = 0;
265 fa679111 Leszek Koltunski
266 0501a4b8 Leszek Koltunski
    for(int row=0; row<mRowCount; row++)
267 fa679111 Leszek Koltunski
      {
268 0501a4b8 Leszek Koltunski
      int numObjects = computeNumObjectsInRow(row);
269
      if( numObjects>mColCount ) mColCount = numObjects;
270 fa679111 Leszek Koltunski
      }
271
    }
272
273
///////////////////////////////////////////////////////////////////////////////////////////////////
274
275 0501a4b8 Leszek Koltunski
  private static int computeNumObjectsInRow(int row)
276 fa679111 Leszek Koltunski
    {
277
    int num=0;
278
279
    for(int object=0; object<NUM_OBJECTS; object++)
280
      {
281 0501a4b8 Leszek Koltunski
      if( objects[object].mRow == row )
282 fa679111 Leszek Koltunski
        {
283
        num += objects[object].mNumSizes;
284
        }
285
      }
286
287
    return num;
288
    }
289
290
///////////////////////////////////////////////////////////////////////////////////////////////////
291
292 e07c48a2 Leszek Koltunski
  public static int getColumnCount()
293
    {
294 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
295
296
    return mColCount;
297 e07c48a2 Leszek Koltunski
    }
298
299
///////////////////////////////////////////////////////////////////////////////////////////////////
300 fa679111 Leszek Koltunski
301 e07c48a2 Leszek Koltunski
  public static int getRowCount()
302
    {
303 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
304
305
    return mRowCount;
306 e07c48a2 Leszek Koltunski
    }
307
308
///////////////////////////////////////////////////////////////////////////////////////////////////
309 fa679111 Leszek Koltunski
310 e07c48a2 Leszek Koltunski
  public static int[] getIndices()
311
    {
312 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
313
314 e07c48a2 Leszek Koltunski
    return mIndices;
315
    }
316
317 27a70eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
318
319 9c2f0c91 Leszek Koltunski
  public static ObjectList getObject(int ordinal)
320 27a70eae Leszek Koltunski
    {
321 7ec268b1 Leszek Koltunski
    return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal] : CUBE;
322 27a70eae Leszek Koltunski
    }
323
324
///////////////////////////////////////////////////////////////////////////////////////////////////
325
326 b498f3f6 Leszek Koltunski
  public static int pack(int object, int sizeIndex)
327 4888e97c Leszek Koltunski
    {
328
    int ret = 0;
329
    for(int i=0; i<object; i++) ret += objects[i].mObjectSizes.length;
330
331 b498f3f6 Leszek Koltunski
    return ret+sizeIndex;
332 4888e97c Leszek Koltunski
    }
333
334
///////////////////////////////////////////////////////////////////////////////////////////////////
335
336 8e3898c8 Leszek Koltunski
  public static int unpackSizeIndex(int number)
337 4888e97c Leszek Koltunski
    {
338
    int num;
339
340
    for(int i=0; i<NUM_OBJECTS; i++)
341
      {
342
      num = objects[i].mObjectSizes.length;
343
      if( number<num ) return number;
344
      number -= num;
345
      }
346
347
    return -1;
348
    }
349
350
///////////////////////////////////////////////////////////////////////////////////////////////////
351
352
  public static int unpackObject(int number)
353 27a70eae Leszek Koltunski
    {
354 4888e97c Leszek Koltunski
    int num;
355
356
    for(int i=0; i<NUM_OBJECTS; i++)
357
      {
358
      num = objects[i].mObjectSizes.length;
359
      if( number<num ) return i;
360
      number -= num;
361
      }
362
363
    return -1;
364
    }
365
366 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
367
368
  public static int unpackObjectFromString(String obj)
369
    {
370
    int u = obj.indexOf('_');
371
    int l = obj.length();
372
373
    if( u>0 )
374
      {
375
      String name = obj.substring(0,u);
376
      int size = Integer.parseInt( obj.substring(u+1,l) );
377
378
      for(int i=0; i<NUM_OBJECTS; i++)
379
        {
380
        if( objects[i].name().equals(name) )
381
          {
382 53f23b64 Leszek Koltunski
          int sizeIndex = getSizeIndex(i,size);
383
          return pack(i,sizeIndex);
384 286d73ae Leszek Koltunski
          }
385
        }
386
      }
387
388
    return -1;
389
    }
390
391
///////////////////////////////////////////////////////////////////////////////////////////////////
392
393
  public static String getObjectList()
394
    {
395
    String name;
396
    StringBuilder list = new StringBuilder();
397
    int len;
398
    int[] sizes;
399
400
    for(int i=0; i<NUM_OBJECTS; i++)
401
      {
402
      sizes = objects[i].mObjectSizes;
403
      len   = sizes.length;
404
      name  = objects[i].name();
405
406
      for(int j=0; j<len; j++)
407
        {
408
        if( i>0 || j>0 ) list.append(',');
409
        list.append(name);
410
        list.append('_');
411
        list.append(sizes[j]);
412
        }
413
      }
414
415
    return list.toString();
416
    }
417
418 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
419
420
  public static int getTotal()
421
    {
422
    return mNumAll;
423
    }
424
425 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
426
427
  public static int getMaxLevel(int ordinal, int sizeIndex)
428
    {
429
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
430
      {
431
      int num = objects[ordinal].mObjectSizes.length;
432
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mMaxLevels[sizeIndex] : 0;
433
      }
434
435
    return 0;
436
    }
437
438 c86f9f1f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
439
440
  public static int getOrdinal(String name)
441
    {
442
    for(int i=0; i<NUM_OBJECTS; i++)
443
      {
444
      if(objects[i].name().equals(name)) return i;
445
      }
446
447
    return -1;
448
    }
449
450
///////////////////////////////////////////////////////////////////////////////////////////////////
451
452 53f23b64 Leszek Koltunski
  public static int getSizeIndex(int ordinal, int size)
453 c86f9f1f Leszek Koltunski
    {
454 7ec268b1 Leszek Koltunski
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
455 c86f9f1f Leszek Koltunski
      {
456 7ec268b1 Leszek Koltunski
      int[] sizes = objects[ordinal].getSizes();
457
      int len = sizes.length;
458
459
      for(int i=0; i<len; i++)
460
        {
461
        if( sizes[i]==size ) return i;
462
        }
463 c86f9f1f Leszek Koltunski
      }
464
465
    return -1;
466
    }
467
468 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
469
470 9c2f0c91 Leszek Koltunski
  public static int[] retFaceColors(ObjectList object)
471 20931cf6 Leszek Koltunski
    {
472
    Field field;
473
    int[] faceColors=null;
474
475
    try
476
      {
477
      field = object.mObjectClass.getDeclaredField("FACE_COLORS");
478
      field.setAccessible(true);
479
      Object obj = field.get(null);
480
      faceColors = (int[]) obj;
481
      }
482
    catch(NoSuchFieldException ex)
483
      {
484
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": no such field exception getting field: "+ex.getMessage());
485
      }
486
    catch(IllegalAccessException ex)
487
      {
488
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": illegal access exception getting field: "+ex.getMessage());
489
      }
490
491
    return faceColors;
492
    }
493
494
///////////////////////////////////////////////////////////////////////////////////////////////////
495
496 0501a4b8 Leszek Koltunski
  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
497 4888e97c Leszek Koltunski
    {
498 fa679111 Leszek Koltunski
    mNumSizes = info.length;
499 ea6ee91b Leszek Koltunski
500 fa679111 Leszek Koltunski
    mObjectSizes  = new int[mNumSizes];
501
    mMaxLevels    = new int[mNumSizes];
502
    mResourceIDs  = new int[mNumSizes];
503
    mSmallIconIDs = new int[mNumSizes];
504
    mMediumIconIDs= new int[mNumSizes];
505
    mBigIconIDs   = new int[mNumSizes];
506
    mHugeIconIDs  = new int[mNumSizes];
507 ea6ee91b Leszek Koltunski
508 fa679111 Leszek Koltunski
    for(int i=0; i<mNumSizes; i++)
509 ea6ee91b Leszek Koltunski
      {
510 f6a9c538 Leszek Koltunski
      mObjectSizes[i]  = info[i][0];
511
      mMaxLevels[i]    = info[i][1];
512
      mResourceIDs[i]  = info[i][2];
513
      mSmallIconIDs[i] = info[i][3];
514
      mMediumIconIDs[i]= info[i][4];
515
      mBigIconIDs[i]   = info[i][5];
516 31a9f38d Leszek Koltunski
      mHugeIconIDs[i]  = info[i][6];
517 ea6ee91b Leszek Koltunski
      }
518
519 20931cf6 Leszek Koltunski
    mObjectClass         = object;
520 27a70eae Leszek Koltunski
    mObjectMovementClass = movement;
521 0501a4b8 Leszek Koltunski
    mRow                 = row;
522 db875721 Leszek Koltunski
    mFOV                 = fov;
523 27a70eae Leszek Koltunski
    }
524
525
///////////////////////////////////////////////////////////////////////////////////////////////////
526
527 8e3898c8 Leszek Koltunski
  public int[] getSizes()
528 27a70eae Leszek Koltunski
    {
529 8e3898c8 Leszek Koltunski
    return mObjectSizes;
530 27a70eae Leszek Koltunski
    }
531
532
///////////////////////////////////////////////////////////////////////////////////////////////////
533
534 8e3898c8 Leszek Koltunski
  public int[] getMaxLevels()
535 4888e97c Leszek Koltunski
    {
536 8e3898c8 Leszek Koltunski
    return mMaxLevels;
537
    }
538
539 db875721 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
540
541
  public int getFOV()
542
    {
543
    return mFOV;
544
    }
545
546 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
547
548
  public int[] getIconIDs()
549
    {
550 f6a9c538 Leszek Koltunski
    int size = RubikActivity.getDrawableSize();
551
552
    switch(size)
553
      {
554
      case 0 : return mSmallIconIDs;
555
      case 1 : return mMediumIconIDs;
556 31a9f38d Leszek Koltunski
      case 2 : return mBigIconIDs;
557
      default: return mHugeIconIDs;
558 f6a9c538 Leszek Koltunski
      }
559 4888e97c Leszek Koltunski
    }
560
561
///////////////////////////////////////////////////////////////////////////////////////////////////
562
563 ccf9fec5 Leszek Koltunski
  public int[] getResourceIDs()
564
    {
565
    return mResourceIDs;
566
    }
567
568 fbca0033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
569
570
  public int getNumVariants()
571
    {
572
    return mObjectSizes.length;
573
    }
574
575 ccf9fec5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
576
577 9c2f0c91 Leszek Koltunski
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
578 27a70eae Leszek Koltunski
    {
579 5974d2ae Leszek Koltunski
    DistortedTexture texture = new DistortedTexture();
580 36273130 Leszek Koltunski
    DistortedEffects effects = new DistortedEffects();
581 fb52fae9 Leszek Koltunski
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
582 74686c71 Leszek Koltunski
583 4888e97c Leszek Koltunski
    switch(ordinal())
584
      {
585 538ee7a6 Leszek Koltunski
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
586
      case  1: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
587
      case  2: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
588
      case  3: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
589
      case  4: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
590
      case  5: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
591
      case  6: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
592
      case  7: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
593
      case  8: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
594
      case  9: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
595
      case 10: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
596
      case 11: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
597
      case 12: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
598
      case 13: return new TwistyBandaged2Bar(size, quat, texture, mesh, effects, moves, res, scrWidth);
599
      case 14: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
600
      case 15: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
601 4888e97c Leszek Koltunski
      }
602
603
    return null;
604 27a70eae Leszek Koltunski
    }
605
606
///////////////////////////////////////////////////////////////////////////////////////////////////
607
608 ca3300c3 Leszek Koltunski
  public Movement getObjectMovementClass()
609 27a70eae Leszek Koltunski
    {
610 4888e97c Leszek Koltunski
    return mObjectMovementClass;
611 27a70eae Leszek Koltunski
    }
612
  }