Project

General

Profile

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

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

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