Project

General

Profile

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

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

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 db875721 Leszek Koltunski
         0,
48
         60
49 4c0cd600 Leszek Koltunski
       ),
50
51 df9739f8 Leszek Koltunski
  JING (
52 4c0cd600 Leszek Koltunski
         new int[][] {
53 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} ,
54 4c0cd600 Leszek Koltunski
                     },
55 df9739f8 Leszek Koltunski
         TwistyJing.class,
56 db875721 Leszek Koltunski
         1,
57
         30
58 4c0cd600 Leszek Koltunski
       ),
59 418aa554 Leszek Koltunski
60 df9739f8 Leszek Koltunski
  PYRA (
61 ece1b58d Leszek Koltunski
         new int[][] {
62 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} ,
63
                       {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} ,
64
                       {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}
65 ece1b58d Leszek Koltunski
                     },
66 df9739f8 Leszek Koltunski
         TwistyPyraminx.class,
67 db875721 Leszek Koltunski
         1,
68 bc649d9a Leszek Koltunski
         30
69 ece1b58d Leszek Koltunski
       ),
70
71 a207be5b Leszek Koltunski
  KILO (
72
         new int[][] {
73 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} ,
74
                       {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} ,
75 a207be5b Leszek Koltunski
                     },
76
         TwistyKilominx.class,
77
         2,
78
         30
79
       ),
80
81
  MEGA (
82
         new int[][] {
83 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} ,
84
                       {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} ,
85 a207be5b Leszek Koltunski
                     },
86
         TwistyMegaminx.class,
87
         2,
88
         30
89
       ),
90
91 8de56b9d Leszek Koltunski
  ULTI (
92
         new int[][] {
93
                       {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} ,
94
                     },
95
         TwistyUltimate.class,
96
         3,
97
         30
98
       ),
99
100
  DIAM (
101
         new int[][] {
102
                       {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} ,
103
                       {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} ,
104 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} ,
105 8de56b9d Leszek Koltunski
                     },
106
         TwistyDiamond.class,
107
         3,
108
         60
109
       ),
110
111 418aa554 Leszek Koltunski
  DINO (
112
         new int[][] {
113 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} ,
114 418aa554 Leszek Koltunski
                     },
115 9c2f0c91 Leszek Koltunski
         TwistyDino6.class,
116 8de56b9d Leszek Koltunski
         4,
117 db875721 Leszek Koltunski
         60
118 eaee1ddc Leszek Koltunski
       ),
119
120
  DIN4 (
121
         new int[][] {
122 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} ,
123 eaee1ddc Leszek Koltunski
                     },
124 9c2f0c91 Leszek Koltunski
         TwistyDino4.class,
125 8de56b9d Leszek Koltunski
         4,
126 db875721 Leszek Koltunski
         60
127 418aa554 Leszek Koltunski
       ),
128 fb52fae9 Leszek Koltunski
129 b96a79ff Leszek Koltunski
  REDI (
130 ee35e63c Leszek Koltunski
         new int[][] {
131 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} ,
132 ee35e63c Leszek Koltunski
                     },
133 b96a79ff Leszek Koltunski
         TwistyRedi.class,
134 8de56b9d Leszek Koltunski
         4,
135 db875721 Leszek Koltunski
         60
136 ee35e63c Leszek Koltunski
       ),
137 68f6046c Leszek Koltunski
138 b96a79ff Leszek Koltunski
  HELI (
139 68f6046c Leszek Koltunski
         new int[][] {
140 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} ,
141 68f6046c Leszek Koltunski
                     },
142 b96a79ff Leszek Koltunski
         TwistyHelicopter.class,
143 8de56b9d Leszek Koltunski
         4,
144 db875721 Leszek Koltunski
         60
145 3f3ff476 Leszek Koltunski
       ),
146
147
  SKEW (
148
         new int[][] {
149 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} ,
150
                       {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} ,
151 3f3ff476 Leszek Koltunski
                     },
152
         TwistySkewb.class,
153 8de56b9d Leszek Koltunski
         5,
154 db875721 Leszek Koltunski
         60
155 68f6046c Leszek Koltunski
       ),
156 49cd8581 Leszek Koltunski
157 bbc6da6c Leszek Koltunski
  IVY  (
158 49cd8581 Leszek Koltunski
         new int[][] {
159 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} ,
160 49cd8581 Leszek Koltunski
                     },
161
         TwistyIvy.class,
162 8de56b9d Leszek Koltunski
         5,
163 db875721 Leszek Koltunski
         60
164 49cd8581 Leszek Koltunski
       ),
165 59b87d56 Leszek Koltunski
166 bbc6da6c Leszek Koltunski
  REX  (
167 59b87d56 Leszek Koltunski
         new int[][] {
168 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} ,
169 59b87d56 Leszek Koltunski
                     },
170
         TwistyRex.class,
171 8de56b9d Leszek Koltunski
         5,
172 a207be5b Leszek Koltunski
         60
173 bbc6da6c Leszek Koltunski
       ),
174 4c0a6d97 Leszek Koltunski
175
  BAN1 (
176
         new int[][] {
177 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} ,
178 4c0a6d97 Leszek Koltunski
                     },
179
         TwistyBandagedFused.class,
180 8de56b9d Leszek Koltunski
         6,
181 4c0a6d97 Leszek Koltunski
         60
182
       ),
183 538ee7a6 Leszek Koltunski
184
  BAN2 (
185
         new int[][] {
186 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} ,
187 538ee7a6 Leszek Koltunski
                     },
188
         TwistyBandaged2Bar.class,
189 8de56b9d Leszek Koltunski
         6,
190 538ee7a6 Leszek Koltunski
         60
191
       ),
192
193
  BAN3 (
194
         new int[][] {
195 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} ,
196 538ee7a6 Leszek Koltunski
                     },
197
         TwistyBandaged3Plate.class,
198 8de56b9d Leszek Koltunski
         6,
199 538ee7a6 Leszek Koltunski
         60
200
       ),
201
202
  BAN4 (
203
         new int[][] {
204 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} ,
205 538ee7a6 Leszek Koltunski
                     },
206
         TwistyBandagedEvil.class,
207 bc649d9a Leszek Koltunski
         6,
208
         60
209
       ),
210 834b2618 Leszek Koltunski
211
  SQU1 (
212
         new int[][] {
213 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} ,
214 834b2618 Leszek Koltunski
                     },
215
         TwistySquare1.class,
216 8de56b9d Leszek Koltunski
         7,
217 834b2618 Leszek Koltunski
         60
218
       ),
219 e2b9e87e Leszek Koltunski
220
  SQU2 (
221
         new int[][] {
222 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} ,
223 e2b9e87e Leszek Koltunski
                     },
224
         TwistySquare2.class,
225 8de56b9d Leszek Koltunski
         7,
226 e2b9e87e Leszek Koltunski
         60
227
       ),
228 df9739f8 Leszek Koltunski
229 abf36986 Leszek Koltunski
  MIRR (
230
         new int[][] {
231 0e505360 Leszek Koltunski
                       {2 , 12, 12, R.raw.mirr2, R.drawable.ui_small_mirr2, R.drawable.ui_medium_mirr2, R.drawable.ui_big_mirr2, R.drawable.ui_huge_mirr2} ,
232
                       {3 , 16, 17, R.raw.mirr3, R.drawable.ui_small_mirr3, R.drawable.ui_medium_mirr3, R.drawable.ui_big_mirr3, R.drawable.ui_huge_mirr3} ,
233 abf36986 Leszek Koltunski
                     },
234
         TwistyMirror.class,
235
         7,
236
         60
237
       ),
238 27a70eae Leszek Koltunski
  ;
239
240 4888e97c Leszek Koltunski
  public static final int NUM_OBJECTS = values().length;
241 8cccfb10 Leszek Koltunski
  public static final int MAX_NUM_OBJECTS;
242 8e3898c8 Leszek Koltunski
  public static final int MAX_LEVEL;
243 0a7aa15b Leszek Koltunski
  public static final int MAX_SCRAMBLE;
244 8cccfb10 Leszek Koltunski
  public static final int MAX_OBJECT_SIZE;
245 4888e97c Leszek Koltunski
246 0a7aa15b Leszek Koltunski
  private final int[] mObjectSizes, mDBLevels, mNumScrambles, mSmallIconIDs, mMediumIconIDs, mBigIconIDs, mHugeIconIDs, mResourceIDs;
247 9c2f0c91 Leszek Koltunski
  private final Class<? extends TwistyObject> mObjectClass;
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 e9a87113 Leszek Koltunski
  ObjectList(int[][] info, Class<? extends TwistyObject> object , 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 e9a87113 Leszek Koltunski
    mObjectClass= object;
572
    mRow        = row;
573
    mFOV        = fov;
574 27a70eae Leszek Koltunski
    }
575
576
///////////////////////////////////////////////////////////////////////////////////////////////////
577
578 8e3898c8 Leszek Koltunski
  public int[] getSizes()
579 27a70eae Leszek Koltunski
    {
580 8e3898c8 Leszek Koltunski
    return mObjectSizes;
581 27a70eae Leszek Koltunski
    }
582
583
///////////////////////////////////////////////////////////////////////////////////////////////////
584
585 0a7aa15b Leszek Koltunski
  public int[] getDBLevels()
586
    {
587
    return mDBLevels;
588
    }
589
590
///////////////////////////////////////////////////////////////////////////////////////////////////
591
592
  public int[] getNumScrambles()
593 4888e97c Leszek Koltunski
    {
594 0a7aa15b Leszek Koltunski
    return mNumScrambles;
595 8e3898c8 Leszek Koltunski
    }
596
597 db875721 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
598
599
  public int getFOV()
600
    {
601
    return mFOV;
602
    }
603
604 8e3898c8 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
605
606
  public int[] getIconIDs()
607
    {
608 f6a9c538 Leszek Koltunski
    int size = RubikActivity.getDrawableSize();
609
610
    switch(size)
611
      {
612
      case 0 : return mSmallIconIDs;
613
      case 1 : return mMediumIconIDs;
614 31a9f38d Leszek Koltunski
      case 2 : return mBigIconIDs;
615
      default: return mHugeIconIDs;
616 f6a9c538 Leszek Koltunski
      }
617 4888e97c Leszek Koltunski
    }
618
619
///////////////////////////////////////////////////////////////////////////////////////////////////
620
621 ccf9fec5 Leszek Koltunski
  public int[] getResourceIDs()
622
    {
623
    return mResourceIDs;
624
    }
625
626 fbca0033 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
627
628
  public int getNumVariants()
629
    {
630
    return mObjectSizes.length;
631
    }
632
633 ccf9fec5 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
634
635 9c2f0c91 Leszek Koltunski
  public TwistyObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
636 27a70eae Leszek Koltunski
    {
637 5974d2ae Leszek Koltunski
    DistortedTexture texture = new DistortedTexture();
638 36273130 Leszek Koltunski
    DistortedEffects effects = new DistortedEffects();
639 fb52fae9 Leszek Koltunski
    MeshSquare mesh          = new MeshSquare(20,20);   // mesh of the node, not of the cubits
640 74686c71 Leszek Koltunski
641 4888e97c Leszek Koltunski
    switch(ordinal())
642
      {
643 538ee7a6 Leszek Koltunski
      case  0: return new TwistyCube          (size, quat, texture, mesh, effects, moves, res, scrWidth);
644 df9739f8 Leszek Koltunski
      case  1: return new TwistyJing          (size, quat, texture, mesh, effects, moves, res, scrWidth);
645
      case  2: return new TwistyPyraminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
646 53e7de7e Leszek Koltunski
      case  3: return new TwistyKilominx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
647
      case  4: return new TwistyMegaminx      (size, quat, texture, mesh, effects, moves, res, scrWidth);
648 8de56b9d Leszek Koltunski
      case  5: return new TwistyUltimate      (size, quat, texture, mesh, effects, moves, res, scrWidth);
649
      case  6: return new TwistyDiamond       (size, quat, texture, mesh, effects, moves, res, scrWidth);
650
      case  7: return new TwistyDino6         (size, quat, texture, mesh, effects, moves, res, scrWidth);
651
      case  8: return new TwistyDino4         (size, quat, texture, mesh, effects, moves, res, scrWidth);
652
      case  9: return new TwistyRedi          (size, quat, texture, mesh, effects, moves, res, scrWidth);
653
      case 10: return new TwistyHelicopter    (size, quat, texture, mesh, effects, moves, res, scrWidth);
654
      case 11: return new TwistySkewb         (size, quat, texture, mesh, effects, moves, res, scrWidth);
655
      case 12: return new TwistyIvy           (size, quat, texture, mesh, effects, moves, res, scrWidth);
656
      case 13: return new TwistyRex           (size, quat, texture, mesh, effects, moves, res, scrWidth);
657
      case 14: return new TwistyBandagedFused (size, quat, texture, mesh, effects, moves, res, scrWidth);
658
      case 15: return new TwistyBandaged2Bar  (size, quat, texture, mesh, effects, moves, res, scrWidth);
659
      case 16: return new TwistyBandaged3Plate(size, quat, texture, mesh, effects, moves, res, scrWidth);
660
      case 17: return new TwistyBandagedEvil  (size, quat, texture, mesh, effects, moves, res, scrWidth);
661
      case 18: return new TwistySquare1       (size, quat, texture, mesh, effects, moves, res, scrWidth);
662
      case 19: return new TwistySquare2       (size, quat, texture, mesh, effects, moves, res, scrWidth);
663 abf36986 Leszek Koltunski
      case 20: return new TwistyMirror        (size, quat, texture, mesh, effects, moves, res, scrWidth);
664 4888e97c Leszek Koltunski
      }
665
666
    return null;
667 27a70eae Leszek Koltunski
    }
668
  }