Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / TwistyRedi.java @ 588ace55

1 68f6046c 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
package org.distorted.objects;
21
22 588ace55 Leszek Koltunski
import static org.distorted.objectlib.Movement.TYPE_SPLIT_CORNER;
23 967c1d17 Leszek Koltunski
24 68f6046c Leszek Koltunski
import android.content.res.Resources;
25
26 588ace55 Leszek Koltunski
import org.distorted.objectlib.ObjectShape;
27
import org.distorted.objectlib.ObjectSticker;
28
import org.distorted.objectlib.ScrambleState;
29 68f6046c Leszek Koltunski
import org.distorted.library.main.DistortedEffects;
30
import org.distorted.library.main.DistortedTexture;
31
import org.distorted.library.mesh.MeshSquare;
32
import org.distorted.library.type.Static3D;
33
import org.distorted.library.type.Static4D;
34 6fd4a72c Leszek Koltunski
import org.distorted.main.R;
35 588ace55 Leszek Koltunski
import org.distorted.objectlib.Movement;
36
import org.distorted.objectlib.Movement6;
37
import org.distorted.objectlib.ObjectList;
38
import org.distorted.objectlib.Twisty6;
39 68f6046c Leszek Koltunski
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41
42 efa81f0c Leszek Koltunski
public class TwistyRedi extends Twisty6
43 68f6046c Leszek Koltunski
{
44
  static final Static3D[] ROT_AXIS = new Static3D[]
45
         {
46
           new Static3D(+SQ3/3,+SQ3/3,+SQ3/3),
47
           new Static3D(+SQ3/3,+SQ3/3,-SQ3/3),
48
           new Static3D(+SQ3/3,-SQ3/3,+SQ3/3),
49
           new Static3D(+SQ3/3,-SQ3/3,-SQ3/3)
50
         };
51
52 967c1d17 Leszek Koltunski
  private static final int[][][] ENABLED = new int[][][]
53
      {
54
          {{0,1},{3,1},{2,3},{0,2}},
55
          {{2,3},{3,1},{0,1},{0,2}},
56
          {{1,2},{0,1},{0,3},{2,3}},
57
          {{1,2},{2,3},{0,3},{0,1}},
58
          {{0,3},{0,2},{1,2},{1,3}},
59
          {{1,2},{0,2},{0,3},{1,3}},
60
      };
61
62 91792184 Leszek Koltunski
  private ScrambleState[] mStates;
63 1dd8d3af Leszek Koltunski
  private int[] mBasicAngle;
64
  private Static4D[] mQuats;
65 ef018c1b Leszek Koltunski
  private float[][] mCuts;
66
  private boolean[][] mLayerRotatable;
67 1dd8d3af Leszek Koltunski
  private float[][] mCenters;
68
  private int[][] mFaceMap;
69
  private ObjectSticker[] mStickers;
70 e9a87113 Leszek Koltunski
  private Movement mMovement;
71 cda32fc1 Leszek Koltunski
72 68f6046c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
73
74 bdbbb4c5 Leszek Koltunski
  public TwistyRedi(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
75
                    DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
76 68f6046c Leszek Koltunski
    {
77 db875721 Leszek Koltunski
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.REDI, res, scrWidth);
78 91792184 Leszek Koltunski
    }
79 cda32fc1 Leszek Koltunski
80 91792184 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
81
82 bdbbb4c5 Leszek Koltunski
  protected ScrambleState[] getScrambleStates()
83 91792184 Leszek Koltunski
    {
84
    if( mStates==null )
85 cda32fc1 Leszek Koltunski
      {
86 91792184 Leszek Koltunski
      mStates = new ScrambleState[]
87
        {
88
        new ScrambleState( new int[][] { {0,1,1,0,-1,1, 2,1,2,2,-1,2},{0,1,3,0,-1,3, 2,1,4,2,-1,4},{0,1,5,0,-1,5, 2,1,6,2,-1,6},{0,1,7,0,-1,7, 2,1,8,2,-1,8} } ),
89
        new ScrambleState( new int[][] { {                          },{0,1,3,0,-1,3              },{0,1,5,0,-1,5,             },{              2,1,8,2,-1,8} } ),
90
        new ScrambleState( new int[][] { {                          },{              2,1,4,2,-1,4},{              2,1,6,2,-1,6},{0,1,7,0,-1,7              } } ),
91
        new ScrambleState( new int[][] { {0,1,1,0,-1,1              },{                          },{              2,1,6,2,-1,6},{0,1,7,0,-1,7              } } ),
92
        new ScrambleState( new int[][] { {              2,1,2,2,-1,2},{                          },{0,1,5,0,-1,5,             },{              2,1,8,2,-1,8} } ),
93
        new ScrambleState( new int[][] { {0,1,1,0,-1,1              },{              2,1,4,2,-1,4},{                          },{0,1,7,0,-1,7              } } ),
94
        new ScrambleState( new int[][] { {              2,1,2,2,-1,2},{0,1,3,0,-1,3              },{                          },{              2,1,8,2,-1,8} } ),
95
        new ScrambleState( new int[][] { {              2,1,2,2,-1,2},{0,1,3,0,-1,3              },{0,1,5,0,-1,5,             },{                          } } ),
96
        new ScrambleState( new int[][] { {0,1,1,0,-1,1              },{              2,1,4,2,-1,4},{              2,1,6,2,-1,6},{                          } } ),
97
        };
98
      }
99
100
    return mStates;
101 68f6046c Leszek Koltunski
    }
102
103 1dd8d3af Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
104
105
  private void initializeQuats()
106
    {
107
    mQuats = new Static4D[]
108
         {
109
         new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),
110
         new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
111
         new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
112
         new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
113
114
         new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),
115
         new Static4D(  0.5f,  0.5f,  0.5f, -0.5f ),
116
         new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
117
         new Static4D(  0.5f,  0.5f, -0.5f, -0.5f ),
118
         new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
119
         new Static4D(  0.5f, -0.5f,  0.5f, -0.5f ),
120
         new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
121
         new Static4D(  0.5f, -0.5f, -0.5f, -0.5f )
122
         };
123
    }
124
125 a480ee80 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
126
127 bdbbb4c5 Leszek Koltunski
  protected int[] getSolvedQuats(int cubit, int numLayers)
128 a480ee80 Leszek Koltunski
    {
129 1dd8d3af Leszek Koltunski
    if( mQuats==null ) initializeQuats();
130 a480ee80 Leszek Koltunski
    int status = retCubitSolvedStatus(cubit,numLayers);
131 967c1d17 Leszek Koltunski
    return status<0 ? null : buildSolvedQuats(Movement6.FACE_AXIS[status],mQuats);
132 a480ee80 Leszek Koltunski
    }
133
134 68f6046c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
135
136 bdbbb4c5 Leszek Koltunski
  protected Static4D[] getQuats()
137 68f6046c Leszek Koltunski
    {
138 1dd8d3af Leszek Koltunski
    if( mQuats==null ) initializeQuats();
139
    return mQuats;
140 68f6046c Leszek Koltunski
    }
141
142 169219a7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
143
144 bdbbb4c5 Leszek Koltunski
  protected int getSolvedFunctionIndex()
145 169219a7 Leszek Koltunski
    {
146
    return 0;
147
    }
148
149 68f6046c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
150
151 bdbbb4c5 Leszek Koltunski
  protected int getNumStickerTypes(int numLayers)
152 68f6046c Leszek Koltunski
    {
153 1dd8d3af Leszek Koltunski
    return 2;
154 68f6046c Leszek Koltunski
    }
155
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157
158 bdbbb4c5 Leszek Koltunski
  protected float[][] getCuts(int size)
159 68f6046c Leszek Koltunski
    {
160 ef018c1b Leszek Koltunski
    if( mCuts==null )
161
      {
162
      float C = +SQ3/3 +0.05f;
163
      float[] cut = new float[] {-C,+C};
164
      mCuts = new float[][] { cut,cut,cut,cut };
165
      }
166
167
    return mCuts;
168
    }
169
170
///////////////////////////////////////////////////////////////////////////////////////////////////
171
172
  private void getLayerRotatable(int numLayers)
173
    {
174
    if( mLayerRotatable==null )
175
      {
176
      int numAxis = ROT_AXIS.length;
177
      boolean[] tmp = new boolean[] {true,false,true};
178
      mLayerRotatable = new boolean[numAxis][];
179
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
180
      }
181 68f6046c Leszek Koltunski
    }
182
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184
185 bdbbb4c5 Leszek Koltunski
  protected int getNumCubitFaces()
186 68f6046c Leszek Koltunski
    {
187 efa81f0c Leszek Koltunski
    return 9;
188 68f6046c Leszek Koltunski
    }
189
190
///////////////////////////////////////////////////////////////////////////////////////////////////
191
192 bdbbb4c5 Leszek Koltunski
  protected float[][] getCubitPositions(int size)
193 68f6046c Leszek Koltunski
    {
194 1dd8d3af Leszek Koltunski
    if( mCenters==null )
195
      {
196
      final float DIST_CORNER = 1.0f;
197
      final float DIST_EDGE   = 1.5f;
198
199
      mCenters = new float[][]
200
         {
201
             { DIST_CORNER, DIST_CORNER, DIST_CORNER },
202
             { DIST_CORNER, DIST_CORNER,-DIST_CORNER },
203
             { DIST_CORNER,-DIST_CORNER, DIST_CORNER },
204
             { DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
205
             {-DIST_CORNER, DIST_CORNER, DIST_CORNER },
206
             {-DIST_CORNER, DIST_CORNER,-DIST_CORNER },
207
             {-DIST_CORNER,-DIST_CORNER, DIST_CORNER },
208
             {-DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
209
210
             {      0.0f, DIST_EDGE, DIST_EDGE },
211
             { DIST_EDGE,      0.0f, DIST_EDGE },
212
             {      0.0f,-DIST_EDGE, DIST_EDGE },
213
             {-DIST_EDGE,      0.0f, DIST_EDGE },
214
             { DIST_EDGE, DIST_EDGE,      0.0f },
215
             { DIST_EDGE,-DIST_EDGE,      0.0f },
216
             {-DIST_EDGE,-DIST_EDGE,      0.0f },
217
             {-DIST_EDGE, DIST_EDGE,      0.0f },
218
             {      0.0f, DIST_EDGE,-DIST_EDGE },
219
             { DIST_EDGE,      0.0f,-DIST_EDGE },
220
             {      0.0f,-DIST_EDGE,-DIST_EDGE },
221
             {-DIST_EDGE,      0.0f,-DIST_EDGE }
222
         };
223
      }
224
225
    return mCenters;
226 68f6046c Leszek Koltunski
    }
227
228
///////////////////////////////////////////////////////////////////////////////////////////////////
229
230 bdbbb4c5 Leszek Koltunski
  protected ObjectShape getObjectShape(int cubit, int numLayers)
231 2077dd18 Leszek Koltunski
    {
232
    int variant = getCubitVariant(cubit,numLayers);
233
234
    if( variant==0 )
235
      {
236 1dd8d3af Leszek Koltunski
      double[][] vertices = new double[][]
237
          {
238
             { 0.0f, 0.0f, 0.0f },
239
             {-0.5f, 0.5f, 0.5f },
240
             {-0.5f,-0.5f, 0.5f },
241
             { 0.5f, 0.5f, 0.5f },
242
             { 0.5f,-0.5f, 0.5f },
243
             { 0.5f, 0.5f,-0.5f },
244
             { 0.5f,-0.5f,-0.5f },
245
             {-0.5f, 0.5f,-0.5f },
246
          };
247
248
      int[][] vert_indices = new int[][]
249
          {
250
             { 2,4,3,1 },
251
             { 1,3,5,7 },
252
             { 4,6,5,3 },
253
254
             { 2,4,0 },
255
             { 5,7,0 },
256
             { 4,6,0 },
257
             { 7,1,0 },
258
             { 1,2,0 },
259
             { 6,5,0 }
260
          };
261
262 668423be Leszek Koltunski
      float[][] bands     = new float[][] { {0.06f,35,0.5f,0.7f,5,2,2}, {0.01f,35,0.2f,0.4f,5,2,2} };
263 2077dd18 Leszek Koltunski
      int[] bandIndices   = new int[] { 0,0,0,1,1,1,1,1,1 };
264
      float[][] corners   = new float[][] { {0.06f,0.12f} };
265
      int[] cornerIndices = new int[]  { -1,0,-1,0,0,0,-1,-1 };
266
      float[][] centers   = new float[][] { { 0.0f, 0.0f, 0.0f} };
267
      int[] centerIndices = new int[] { -1,0,-1,0,0,0,-1,-1 };
268 1dd8d3af Leszek Koltunski
      return new ObjectShape(vertices,vert_indices,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
269 2077dd18 Leszek Koltunski
      }
270
    else
271
      {
272 1dd8d3af Leszek Koltunski
      double[][] vertices = new double[][]
273
          {
274
             {-0.5f, 0.0f, 0.0f},
275
             { 0.5f, 0.0f, 0.0f},
276
             {-0.5f,-1.0f, 0.0f},
277
             { 0.5f,-1.0f, 0.0f},
278
             { 0.0f,-1.5f, 0.0f},
279
             {-0.5f, 0.0f,-1.0f},
280
             { 0.5f, 0.0f,-1.0f},
281
             { 0.0f, 0.0f,-1.5f},
282
          };
283
284
      int[][] vert_indices = new int[][]
285
          {
286
             { 0,2,4,3,1 },
287
             { 0,1,6,7,5 },
288
             { 1,3,6 },
289
             { 0,2,5 },
290
             { 4,7,6,3 },
291
             { 4,7,5,2 }
292
          };
293
294 668423be Leszek Koltunski
      float[][] bands     = new float[][] { {0.038f,35,0.250f,0.7f,7,2,2}, {0.020f,35,0.125f,0.2f,3,1,2}, {0.020f,35,0.125f,0.2f,3,1,1} };
295 2077dd18 Leszek Koltunski
      int[] bandIndices   = new int[] { 0,0,1,1,2,2 };
296
      float[][] corners   = new float[][] { {0.06f,0.20f} };
297
      int[] cornerIndices = new int[] { 0,0,-1,-1,-1,-1,-1,-1 };
298
      float[][] centers   = new float[][] { { 0.0f,-0.75f,-0.75f} };
299
      int[] centerIndices = new int[] { 0,0,-1,-1,-1,-1,-1,-1 };
300 1dd8d3af Leszek Koltunski
      return new ObjectShape(vertices,vert_indices,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
301 2077dd18 Leszek Koltunski
      }
302
    }
303
304
///////////////////////////////////////////////////////////////////////////////////////////////////
305
306 bdbbb4c5 Leszek Koltunski
  protected Static4D getQuat(int cubit, int numLayers)
307 68f6046c Leszek Koltunski
    {
308 1dd8d3af Leszek Koltunski
    if( mQuats==null ) initializeQuats();
309
310 68f6046c Leszek Koltunski
    switch(cubit)
311
      {
312 1dd8d3af Leszek Koltunski
      case  0: return mQuats[0];                         //  unit quat
313 68f6046c Leszek Koltunski
      case  1: return new Static4D( SQ2/2,0,0,SQ2/2);    //  90 along X
314
      case  2: return new Static4D(-SQ2/2,0,0,SQ2/2);    // -90 along X
315 1dd8d3af Leszek Koltunski
      case  3: return mQuats[1];                         // 180 along X
316 68f6046c Leszek Koltunski
      case  4: return new Static4D(0, SQ2/2,0,SQ2/2);    //  90 along Y
317 1dd8d3af Leszek Koltunski
      case  5: return mQuats[2];                         // 180 along Y
318
      case  6: return mQuats[3];                         // 180 along Z
319 68f6046c Leszek Koltunski
      case  7: return new Static4D(SQ2/2,0,-SQ2/2,0);    // 180 along (SQ2/2,0,-SQ2/2)
320
321 1dd8d3af Leszek Koltunski
      case  8: return mQuats[0];
322
      case  9: return mQuats[5];
323
      case 10: return mQuats[3];
324
      case 11: return mQuats[11];
325
      case 12: return mQuats[4];
326
      case 13: return mQuats[7];
327
      case 14: return mQuats[9];
328
      case 15: return mQuats[10];
329
      case 16: return mQuats[2];
330
      case 17: return mQuats[8];
331
      case 18: return mQuats[1];
332
      case 19: return mQuats[6];
333 68f6046c Leszek Koltunski
      }
334
335
    return null;
336
    }
337
338 2077dd18 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
339
340 bdbbb4c5 Leszek Koltunski
  protected int getNumCubitVariants(int numLayers)
341 2077dd18 Leszek Koltunski
    {
342
    return 2;
343
    }
344
345
///////////////////////////////////////////////////////////////////////////////////////////////////
346
347 bdbbb4c5 Leszek Koltunski
  protected int getCubitVariant(int cubit, int numLayers)
348 2077dd18 Leszek Koltunski
    {
349
    return cubit<8 ? 0:1;
350
    }
351
352 68f6046c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
353
354 bdbbb4c5 Leszek Koltunski
  protected int getFaceColor(int cubit, int cubitface, int size)
355 68f6046c Leszek Koltunski
    {
356 1dd8d3af Leszek Koltunski
    if( mFaceMap==null )
357
      {
358
      // Colors of the faces of cubits.
359
      // YELLOW 0 WHITE 1 BLUE 2 GREEN 3 RED 4  ORANGE 5
360
      // YELLOW 6 WHITE 7 BLUE 8 GREEN 9 RED 10 ORANGE 11
361
      mFaceMap = new int[][]
362
         {
363
           {  4, 2, 0 },
364
           {  2, 5, 0 },
365
           {  3, 4, 0 },
366
           {  5, 3, 0 },
367
           {  1, 2, 4 },
368
           {  5, 2, 1 },
369
           {  4, 3, 1 },
370
           {  1, 3, 5 },
371
372
           { 10, 8,12 },
373
           {  6,10,12 },
374
           { 10, 9,12 },
375
           {  7,10,12 },
376
           {  8, 6,12 },
377
           {  9, 6,12 },
378
           {  9, 7,12 },
379
           {  8, 7,12 },
380
           { 11, 8,12 },
381
           {  6,11,12 },
382
           { 11, 9,12 },
383
           {  7,11,12 },
384
         };
385
      }
386
387
    return cubitface<3 ? mFaceMap[cubit][cubitface] : NUM_TEXTURES;
388 68f6046c Leszek Koltunski
    }
389
390 9c06394a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
391
392 bdbbb4c5 Leszek Koltunski
  protected ObjectSticker retSticker(int face)
393 9c06394a Leszek Koltunski
    {
394 1dd8d3af Leszek Koltunski
    if( mStickers==null )
395
      {
396
      float[][] STICKERS = new float[][]
397
          {
398
             { -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f },
399
             { -0.3125f, 0.4375f, -0.3125f, -0.1875f, 0.0f, -0.5f, 0.3125f, -0.1875f, 0.3125f, 0.4375f }
400
          };
401
402
      final float R0 = 0.09f;
403
      final float R1 = 0.06f;
404
      final float[][] radii = { {R0,R0,R0,R0},{R1,R1,R1,R1,R1} };
405
      final float[] strokes = { 0.09f,0.06f };
406
407
      mStickers = new ObjectSticker[STICKERS.length];
408
409
      for(int s=0; s<STICKERS.length; s++)
410
        {
411
        mStickers[s] = new ObjectSticker(STICKERS[s],null,radii[s],strokes[s]);
412
        }
413
      }
414
415 abf36986 Leszek Koltunski
    return mStickers[face/NUM_FACE_COLORS];
416 68f6046c Leszek Koltunski
    }
417
418 4c737817 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
419 cda32fc1 Leszek Koltunski
// PUBLIC API
420 4c737817 Leszek Koltunski
421 cda32fc1 Leszek Koltunski
  public Static3D[] getRotationAxis()
422
    {
423
    return ROT_AXIS;
424 0812242b Leszek Koltunski
    }
425
426 e9a87113 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
427
428
  public Movement getMovement()
429
    {
430 ef018c1b Leszek Koltunski
    if( mMovement==null )
431
      {
432
      int numLayers = getNumLayers();
433
      if( mCuts==null ) getCuts(numLayers);
434
      getLayerRotatable(numLayers);
435 7ee89540 Leszek Koltunski
      mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers,TYPE_SPLIT_CORNER,ENABLED);
436 ef018c1b Leszek Koltunski
      }
437 e9a87113 Leszek Koltunski
    return mMovement;
438
    }
439
440 68f6046c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
441
442 cda32fc1 Leszek Koltunski
  public int[] getBasicAngle()
443 68f6046c Leszek Koltunski
    {
444 1dd8d3af Leszek Koltunski
    if( mBasicAngle ==null ) mBasicAngle = new int[] { 3,3,3,3 };
445
    return mBasicAngle;
446 68f6046c Leszek Koltunski
    }
447
448 6fd4a72c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
449
450
  public int getObjectName(int numLayers)
451
    {
452
    return R.string.redi2;
453
    }
454
455
///////////////////////////////////////////////////////////////////////////////////////////////////
456
457
  public int getInventor(int numLayers)
458
    {
459
    return R.string.redi2_inventor;
460
    }
461
462
///////////////////////////////////////////////////////////////////////////////////////////////////
463
464
  public int getComplexity(int numLayers)
465
    {
466
    return 4;
467
    }
468 68f6046c Leszek Koltunski
}