Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 15da2470

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