Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / TwistyHelicopter.java @ 41c8d4d8

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