Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / TwistyHelicopter.java @ 967c1d17

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