Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 516451c4

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
  PYRA (
53
         new int[][] {
54 0a7aa15b 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} ,
55
                       {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} ,
56
                       {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}
57 4c0cd600 Leszek Koltunski
                     },
58 9c2f0c91 Leszek Koltunski
         TwistyPyraminx.class,
59 ca3300c3 Leszek Koltunski
         new MovementPyraminx(),
60 db875721 Leszek Koltunski
         1,
61
         30
62 4c0cd600 Leszek Koltunski
       ),
63 418aa554 Leszek Koltunski
64 bc649d9a Leszek Koltunski
  ULTI (
65 ece1b58d Leszek Koltunski
         new int[][] {
66 0a7aa15b Leszek Koltunski
                       {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} ,
67 ece1b58d Leszek Koltunski
                     },
68 bc649d9a Leszek Koltunski
         TwistyUltimate.class,
69
         new MovementUltimate(),
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 27a70eae Leszek Koltunski
  ;
238
239 4888e97c Leszek Koltunski
  public static final int NUM_OBJECTS = values().length;
240 8cccfb10 Leszek Koltunski
  public static final int MAX_NUM_OBJECTS;
241 8e3898c8 Leszek Koltunski
  public static final int MAX_LEVEL;
242 0a7aa15b Leszek Koltunski
  public static final int MAX_SCRAMBLE;
243 8cccfb10 Leszek Koltunski
  public static final int MAX_OBJECT_SIZE;
244 4888e97c Leszek Koltunski
245 0a7aa15b Leszek Koltunski
  private final int[] mObjectSizes, mDBLevels, mNumScrambles, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
246 9c2f0c91 Leszek Koltunski
  private final Class<? extends TwistyObject> mObjectClass;
247 ca3300c3 Leszek Koltunski
  private final Movement mObjectMovementClass;
248 0501a4b8 Leszek Koltunski
  private final int mRow, mNumSizes;
249 db875721 Leszek Koltunski
  private final int mFOV;
250 fa679111 Leszek Koltunski
251 9c2f0c91 Leszek Koltunski
  private static final ObjectList[] objects;
252 4888e97c Leszek Koltunski
  private static int mNumAll;
253 e07c48a2 Leszek Koltunski
  private static int[] mIndices;
254 fa679111 Leszek Koltunski
  private static int mColCount, mRowCount;
255 27a70eae Leszek Koltunski
256
  static
257
    {
258 4888e97c Leszek Koltunski
    mNumAll = 0;
259 8cccfb10 Leszek Koltunski
    int num, i = 0;
260 9c2f0c91 Leszek Koltunski
    objects = new ObjectList[NUM_OBJECTS];
261 0a7aa15b Leszek Koltunski
    int maxNum     = Integer.MIN_VALUE;
262
    int maxLevel   = Integer.MIN_VALUE;
263
    int maxScramble= Integer.MIN_VALUE;
264
    int maxSize    = Integer.MIN_VALUE;
265 27a70eae Leszek Koltunski
266 9c2f0c91 Leszek Koltunski
    for(ObjectList object: ObjectList.values())
267 27a70eae Leszek Koltunski
      {
268 4888e97c Leszek Koltunski
      objects[i] = object;
269 27a70eae Leszek Koltunski
      i++;
270 8cccfb10 Leszek Koltunski
      num = object.mObjectSizes.length;
271
      mNumAll += num;
272
      if( num> maxNum ) maxNum = num;
273 8e3898c8 Leszek Koltunski
274 8cccfb10 Leszek Koltunski
      for(int j=0; j<num; j++)
275 8e3898c8 Leszek Koltunski
        {
276 0a7aa15b Leszek Koltunski
        if( object.mNumScrambles[j]> maxScramble ) maxScramble= object.mNumScrambles[j];
277
        if( object.mDBLevels[j]    > maxLevel    ) maxLevel   = object.mDBLevels[j];
278
        if( object.mObjectSizes[j] > maxSize     ) maxSize    = object.mObjectSizes[j];
279 8e3898c8 Leszek Koltunski
        }
280 27a70eae Leszek Koltunski
      }
281 4888e97c Leszek Koltunski
282 8cccfb10 Leszek Koltunski
    MAX_NUM_OBJECTS = maxNum;
283
    MAX_LEVEL       = maxLevel;
284 0a7aa15b Leszek Koltunski
    MAX_SCRAMBLE    = maxScramble;
285 8cccfb10 Leszek Koltunski
    MAX_OBJECT_SIZE = maxSize;
286 27a70eae Leszek Koltunski
    }
287
288 e07c48a2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
289 fa679111 Leszek Koltunski
290
  private static void setUpColAndRow()
291
    {
292
    mIndices = new int[NUM_OBJECTS];
293 0501a4b8 Leszek Koltunski
    mRowCount= 0;
294 fa679111 Leszek Koltunski
295
    for(int obj=0; obj<NUM_OBJECTS; obj++)
296
      {
297 0501a4b8 Leszek Koltunski
      mIndices[obj] = objects[obj].mRow;
298
      if( mIndices[obj]>=mRowCount ) mRowCount = mIndices[obj]+1;
299 fa679111 Leszek Koltunski
      }
300
301 0501a4b8 Leszek Koltunski
    mColCount = 0;
302 fa679111 Leszek Koltunski
303 0501a4b8 Leszek Koltunski
    for(int row=0; row<mRowCount; row++)
304 fa679111 Leszek Koltunski
      {
305 0501a4b8 Leszek Koltunski
      int numObjects = computeNumObjectsInRow(row);
306
      if( numObjects>mColCount ) mColCount = numObjects;
307 fa679111 Leszek Koltunski
      }
308
    }
309
310
///////////////////////////////////////////////////////////////////////////////////////////////////
311
312 0501a4b8 Leszek Koltunski
  private static int computeNumObjectsInRow(int row)
313 fa679111 Leszek Koltunski
    {
314
    int num=0;
315
316
    for(int object=0; object<NUM_OBJECTS; object++)
317
      {
318 0501a4b8 Leszek Koltunski
      if( objects[object].mRow == row )
319 fa679111 Leszek Koltunski
        {
320
        num += objects[object].mNumSizes;
321
        }
322
      }
323
324
    return num;
325
    }
326
327
///////////////////////////////////////////////////////////////////////////////////////////////////
328
329 e07c48a2 Leszek Koltunski
  public static int getColumnCount()
330
    {
331 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
332
333
    return mColCount;
334 e07c48a2 Leszek Koltunski
    }
335
336
///////////////////////////////////////////////////////////////////////////////////////////////////
337 fa679111 Leszek Koltunski
338 e07c48a2 Leszek Koltunski
  public static int getRowCount()
339
    {
340 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
341
342
    return mRowCount;
343 e07c48a2 Leszek Koltunski
    }
344
345
///////////////////////////////////////////////////////////////////////////////////////////////////
346 fa679111 Leszek Koltunski
347 e07c48a2 Leszek Koltunski
  public static int[] getIndices()
348
    {
349 fa679111 Leszek Koltunski
    if( mIndices==null ) setUpColAndRow();
350
351 e07c48a2 Leszek Koltunski
    return mIndices;
352
    }
353
354 27a70eae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
355
356 9c2f0c91 Leszek Koltunski
  public static ObjectList getObject(int ordinal)
357 27a70eae Leszek Koltunski
    {
358 7ec268b1 Leszek Koltunski
    return ordinal>=0 && ordinal<NUM_OBJECTS ? objects[ordinal] : CUBE;
359 27a70eae Leszek Koltunski
    }
360
361
///////////////////////////////////////////////////////////////////////////////////////////////////
362
363 b498f3f6 Leszek Koltunski
  public static int pack(int object, int sizeIndex)
364 4888e97c Leszek Koltunski
    {
365
    int ret = 0;
366
    for(int i=0; i<object; i++) ret += objects[i].mObjectSizes.length;
367
368 b498f3f6 Leszek Koltunski
    return ret+sizeIndex;
369 4888e97c Leszek Koltunski
    }
370
371
///////////////////////////////////////////////////////////////////////////////////////////////////
372
373 8e3898c8 Leszek Koltunski
  public static int unpackSizeIndex(int number)
374 4888e97c Leszek Koltunski
    {
375
    int num;
376
377
    for(int i=0; i<NUM_OBJECTS; i++)
378
      {
379
      num = objects[i].mObjectSizes.length;
380
      if( number<num ) return number;
381
      number -= num;
382
      }
383
384
    return -1;
385
    }
386
387
///////////////////////////////////////////////////////////////////////////////////////////////////
388
389
  public static int unpackObject(int number)
390 27a70eae Leszek Koltunski
    {
391 4888e97c Leszek Koltunski
    int num;
392
393
    for(int i=0; i<NUM_OBJECTS; i++)
394
      {
395
      num = objects[i].mObjectSizes.length;
396
      if( number<num ) return i;
397
      number -= num;
398
      }
399
400
    return -1;
401
    }
402
403 286d73ae Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
404
405
  public static int unpackObjectFromString(String obj)
406
    {
407
    int u = obj.indexOf('_');
408
    int l = obj.length();
409
410
    if( u>0 )
411
      {
412
      String name = obj.substring(0,u);
413
      int size = Integer.parseInt( obj.substring(u+1,l) );
414
415
      for(int i=0; i<NUM_OBJECTS; i++)
416
        {
417
        if( objects[i].name().equals(name) )
418
          {
419 53f23b64 Leszek Koltunski
          int sizeIndex = getSizeIndex(i,size);
420
          return pack(i,sizeIndex);
421 286d73ae Leszek Koltunski
          }
422
        }
423
      }
424
425
    return -1;
426
    }
427
428
///////////////////////////////////////////////////////////////////////////////////////////////////
429
430
  public static String getObjectList()
431
    {
432
    String name;
433
    StringBuilder list = new StringBuilder();
434
    int len;
435
    int[] sizes;
436
437
    for(int i=0; i<NUM_OBJECTS; i++)
438
      {
439
      sizes = objects[i].mObjectSizes;
440
      len   = sizes.length;
441
      name  = objects[i].name();
442
443
      for(int j=0; j<len; j++)
444
        {
445
        if( i>0 || j>0 ) list.append(',');
446
        list.append(name);
447
        list.append('_');
448
        list.append(sizes[j]);
449
        }
450
      }
451
452
    return list.toString();
453
    }
454
455 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
456
457
  public static int getTotal()
458
    {
459
    return mNumAll;
460
    }
461
462 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
463
464 0a7aa15b Leszek Koltunski
  public static int getDBLevel(int ordinal, int sizeIndex)
465 8e3898c8 Leszek Koltunski
    {
466
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
467
      {
468
      int num = objects[ordinal].mObjectSizes.length;
469 0a7aa15b Leszek Koltunski
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mDBLevels[sizeIndex] : 0;
470
      }
471
472
    return 0;
473
    }
474
475
///////////////////////////////////////////////////////////////////////////////////////////////////
476
477
  public static int getNumScramble(int ordinal, int sizeIndex)
478
    {
479
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
480
      {
481
      int num = objects[ordinal].mObjectSizes.length;
482
      return sizeIndex>=0 && sizeIndex<num ? objects[ordinal].mNumScrambles[sizeIndex] : 0;
483 8e3898c8 Leszek Koltunski
      }
484
485
    return 0;
486
    }
487
488 c86f9f1f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
489
490
  public static int getOrdinal(String name)
491
    {
492
    for(int i=0; i<NUM_OBJECTS; i++)
493
      {
494
      if(objects[i].name().equals(name)) return i;
495
      }
496
497
    return -1;
498
    }
499
500
///////////////////////////////////////////////////////////////////////////////////////////////////
501
502 53f23b64 Leszek Koltunski
  public static int getSizeIndex(int ordinal, int size)
503 c86f9f1f Leszek Koltunski
    {
504 7ec268b1 Leszek Koltunski
    if( ordinal>=0 && ordinal<NUM_OBJECTS )
505 c86f9f1f Leszek Koltunski
      {
506 7ec268b1 Leszek Koltunski
      int[] sizes = objects[ordinal].getSizes();
507
      int len = sizes.length;
508
509
      for(int i=0; i<len; i++)
510
        {
511
        if( sizes[i]==size ) return i;
512
        }
513 c86f9f1f Leszek Koltunski
      }
514
515
    return -1;
516
    }
517
518 4888e97c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
519
520 9c2f0c91 Leszek Koltunski
  public static int[] retFaceColors(ObjectList object)
521 20931cf6 Leszek Koltunski
    {
522
    Field field;
523
    int[] faceColors=null;
524
525
    try
526
      {
527
      field = object.mObjectClass.getDeclaredField("FACE_COLORS");
528
      field.setAccessible(true);
529
      Object obj = field.get(null);
530
      faceColors = (int[]) obj;
531
      }
532
    catch(NoSuchFieldException ex)
533
      {
534
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": no such field exception getting field: "+ex.getMessage());
535
      }
536
    catch(IllegalAccessException ex)
537
      {
538
      android.util.Log.e("RubikObjectList", object.mObjectClass.getSimpleName()+": illegal access exception getting field: "+ex.getMessage());
539
      }
540
541
    return faceColors;
542
    }
543
544
///////////////////////////////////////////////////////////////////////////////////////////////////
545
546 0501a4b8 Leszek Koltunski
  ObjectList(int[][] info, Class<? extends TwistyObject> object , Movement movement, int row, int fov)
547 4888e97c Leszek Koltunski
    {
548 fa679111 Leszek Koltunski
    mNumSizes = info.length;
549 ea6ee91b Leszek Koltunski
550 fa679111 Leszek Koltunski
    mObjectSizes  = new int[mNumSizes];
551 0a7aa15b Leszek Koltunski
    mDBLevels     = new int[mNumSizes];
552
    mNumScrambles = new int[mNumSizes];
553 fa679111 Leszek Koltunski
    mResourceIDs  = new int[mNumSizes];
554
    mSmallIconIDs = new int[mNumSizes];
555
    mMediumIconIDs= new int[mNumSizes];
556
    mBigIconIDs   = new int[mNumSizes];
557
    mHugeIconIDs  = new int[mNumSizes];
558 ea6ee91b Leszek Koltunski
559 fa679111 Leszek Koltunski
    for(int i=0; i<mNumSizes; i++)
560 ea6ee91b Leszek Koltunski
      {
561 f6a9c538 Leszek Koltunski
      mObjectSizes[i]  = info[i][0];
562 0a7aa15b Leszek Koltunski
      mDBLevels[i]     = info[i][1];
563
      mNumScrambles[i] = info[i][2];
564
      mResourceIDs[i]  = info[i][3];
565
      mSmallIconIDs[i] = info[i][4];
566
      mMediumIconIDs[i]= info[i][5];
567
      mBigIconIDs[i]   = info[i][6];
568
      mHugeIconIDs[i]  = info[i][7];
569 ea6ee91b Leszek Koltunski
      }
570
571 20931cf6 Leszek Koltunski
    mObjectClass         = object;
572 27a70eae Leszek Koltunski
    mObjectMovementClass = movement;
573 0501a4b8 Leszek Koltunski
    mRow                 = row;
574 db875721 Leszek Koltunski
    mFOV                 = fov;
575 27a70eae Leszek Koltunski
    }
576
577
///////////////////////////////////////////////////////////////////////////////////////////////////
578
579 8e3898c8 Leszek Koltunski
  public int[] getSizes()
580 27a70eae Leszek Koltunski
    {
581 8e3898c8 Leszek Koltunski
    return mObjectSizes;
582 27a70eae Leszek Koltunski
    }
583
584
///////////////////////////////////////////////////////////////////////////////////////////////////
585
586 0a7aa15b Leszek Koltunski
  public int[] getDBLevels()
587
    {
588
    return mDBLevels;
589
    }
590
591
///////////////////////////////////////////////////////////////////////////////////////////////////
592
593
  public int[] getNumScrambles()
594 4888e97c Leszek Koltunski
    {
595 0a7aa15b Leszek Koltunski
    return mNumScrambles;
596 8e3898c8 Leszek Koltunski
    }
597
598 db875721 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
599
600
  public int getFOV()
601
    {
602
    return mFOV;
603
    }
604
605 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
606
607
  public int[] getIconIDs()
608
    {
609 f6a9c538 Leszek Koltunski
    int size = RubikActivity.getDrawableSize();
610
611
    switch(size)
612
      {
613
      case 0 : return mSmallIconIDs;
614
      case 1 : return mMediumIconIDs;
615 31a9f38d Leszek Koltunski
      case 2 : return mBigIconIDs;
616
      default: return mHugeIconIDs;
617 f6a9c538 Leszek Koltunski
      }
618 4888e97c Leszek Koltunski
    }
619
620
///////////////////////////////////////////////////////////////////////////////////////////////////
621
622 ccf9fec5 Leszek Koltunski
  public int[] getResourceIDs()
623
    {
624
    return mResourceIDs;
625
    }
626
627 fbca0033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
628
629
  public int getNumVariants()
630
    {
631
    return mObjectSizes.length;
632
    }
633
634 ccf9fec5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
635
636 9c2f0c91 Leszek Koltunski
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
637 27a70eae Leszek Koltunski
    {
638 5974d2ae Leszek Koltunski
    DistortedTexture texture = new DistortedTexture();
639 36273130 Leszek Koltunski
    DistortedEffects effects = new DistortedEffects();
640 fb52fae9 Leszek Koltunski
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
641 74686c71 Leszek Koltunski
642 4888e97c Leszek Koltunski
    switch(ordinal())
643
      {
644 538ee7a6 Leszek Koltunski
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
645
      case  1: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
646 bc649d9a Leszek Koltunski
      case  2: return new TwistyUltimate      (size, quat, texture, mesh, effects, moves, res, scrWidth);
647 53e7de7e Leszek Koltunski
      case  3: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
648
      case  4: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
649
      case  5: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
650
      case  6: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
651
      case  7: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
652
      case  8: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
653
      case  9: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
654
      case 10: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
655
      case 11: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
656 538ee7a6 Leszek Koltunski
      case 12: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
657 bc649d9a Leszek Koltunski
      case 13: return new TwistyBandaged2Bar  (size, quat, texture, mesh, effects, moves, res, scrWidth);
658 538ee7a6 Leszek Koltunski
      case 14: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
659
      case 15: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
660 bc649d9a Leszek Koltunski
      case 16: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
661 834b2618 Leszek Koltunski
      case 17: return new TwistySquare1       (size, quat, texture, mesh, effects, moves, res, scrWidth);
662 e2b9e87e Leszek Koltunski
      case 18: return new TwistySquare2       (size, quat, texture, mesh, effects, moves, res, scrWidth);
663 4888e97c Leszek Koltunski
      }
664
665
    return null;
666 27a70eae Leszek Koltunski
    }
667
668
///////////////////////////////////////////////////////////////////////////////////////////////////
669
670 ca3300c3 Leszek Koltunski
  public Movement getObjectMovementClass()
671 27a70eae Leszek Koltunski
    {
672 4888e97c Leszek Koltunski
    return mObjectMovementClass;
673 27a70eae Leszek Koltunski
    }
674
  }