Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / ObjectList.java @ 0e505360

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