Project

General

Profile

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

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

1 49cd8581 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 49cd8581 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 49cd8581 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 49cd8581 Leszek Koltunski
40
///////////////////////////////////////////////////////////////////////////////////////////////////
41
42 efa81f0c Leszek Koltunski
public class TwistyIvy extends Twisty6
43 49cd8581 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},{3},{3},{0}},
55
          {{2},{1},{1},{2}},
56
          {{2},{0},{0},{2}},
57
          {{1},{3},{3},{1}},
58
          {{0},{0},{1},{1}},
59
          {{2},{2},{3},{3}},
60
      };
61
62 e01fa67a Leszek Koltunski
  private static final int NUM_STICKERS = 2;
63 4d27a99b Leszek Koltunski
  public static final float IVY_D = 0.006f;
64 e01fa67a Leszek Koltunski
  private static final int  IVY_N = 8;
65 9c06394a Leszek Koltunski
66 91792184 Leszek Koltunski
  private ScrambleState[] mStates;
67 e01fa67a Leszek Koltunski
  private int[] mBasicAngle;
68
  private Static4D[] mQuats;
69 ef018c1b Leszek Koltunski
  private float[][] mCuts;
70
  private boolean[][] mLayerRotatable;
71 e01fa67a Leszek Koltunski
  private int[][] mFaceMap;
72
  private ObjectSticker[] mStickers;
73 e9a87113 Leszek Koltunski
  private Movement mMovement;
74 0ad6b867 Leszek Koltunski
75 49cd8581 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
76
77 bdbbb4c5 Leszek Koltunski
  public TwistyIvy(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
78
                   DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
79 49cd8581 Leszek Koltunski
    {
80 db875721 Leszek Koltunski
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.IVY, res, scrWidth);
81 49cd8581 Leszek Koltunski
    }
82
83 91792184 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
84
85 bdbbb4c5 Leszek Koltunski
  protected ScrambleState[] getScrambleStates()
86 91792184 Leszek Koltunski
    {
87
    if( mStates==null )
88
      {
89
      int[] tmp = {0,-1,0, 0,1,0, 1,-1,0, 1,1,0 };
90
91
      mStates = new ScrambleState[]
92
        {
93
        new ScrambleState( new int[][] {tmp,tmp,tmp,tmp} )
94
        };
95
      }
96
97
    return mStates;
98
    }
99
100 e01fa67a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
101
102
  private void initializeQuats()
103
    {
104
    mQuats = new Static4D[]
105
         {
106
         new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),
107
         new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
108
         new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
109
         new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
110
111
         new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),
112
         new Static4D(  0.5f,  0.5f,  0.5f, -0.5f ),
113
         new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
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
         };
120
    }
121
122 a480ee80 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
123
124 bdbbb4c5 Leszek Koltunski
  protected int[] getSolvedQuats(int cubit, int numLayers)
125 a480ee80 Leszek Koltunski
    {
126 e01fa67a Leszek Koltunski
    if( mQuats==null ) initializeQuats();
127 a480ee80 Leszek Koltunski
    int status = retCubitSolvedStatus(cubit,numLayers);
128 967c1d17 Leszek Koltunski
    return status<0 ? null : buildSolvedQuats(Movement6.FACE_AXIS[status],mQuats);
129 a480ee80 Leszek Koltunski
    }
130
131 49cd8581 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
132
133 bdbbb4c5 Leszek Koltunski
  protected Static4D[] getQuats()
134 49cd8581 Leszek Koltunski
    {
135 e01fa67a Leszek Koltunski
    if( mQuats==null ) initializeQuats();
136
    return mQuats;
137 49cd8581 Leszek Koltunski
    }
138
139 169219a7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
140
141 bdbbb4c5 Leszek Koltunski
  protected int getSolvedFunctionIndex()
142 169219a7 Leszek Koltunski
    {
143
    return 0;
144
    }
145
146 49cd8581 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
147
148 bdbbb4c5 Leszek Koltunski
  protected int getNumStickerTypes(int numLayers)
149 49cd8581 Leszek Koltunski
    {
150 9c06394a Leszek Koltunski
    return NUM_STICKERS;
151 49cd8581 Leszek Koltunski
    }
152
153
///////////////////////////////////////////////////////////////////////////////////////////////////
154
155 bdbbb4c5 Leszek Koltunski
  protected float[][] getCuts(int numLayers)
156 49cd8581 Leszek Koltunski
    {
157 ef018c1b Leszek Koltunski
    if( mCuts==null )
158
      {
159
      float[] cut = new float[] {0.0f};
160
      mCuts = new float[][] { cut,cut,cut,cut };
161
      }
162
163
    return mCuts;
164
    }
165
166
///////////////////////////////////////////////////////////////////////////////////////////////////
167
168
  private void getLayerRotatable(int numLayers)
169
    {
170
    if( mLayerRotatable==null )
171
      {
172
      int numAxis = ROT_AXIS.length;
173
      boolean[] tmp = new boolean[numLayers];
174
      for(int i=0; i<numLayers; i++) tmp[i] = true;
175
      mLayerRotatable = new boolean[numAxis][];
176
      for(int i=0; i<numAxis; i++) mLayerRotatable[i] = tmp;
177
      }
178 49cd8581 Leszek Koltunski
    }
179
180
///////////////////////////////////////////////////////////////////////////////////////////////////
181
182 bdbbb4c5 Leszek Koltunski
  protected int getNumCubitFaces()
183 49cd8581 Leszek Koltunski
    {
184 efa81f0c Leszek Koltunski
    return 6;
185 49cd8581 Leszek Koltunski
    }
186
187
///////////////////////////////////////////////////////////////////////////////////////////////////
188
189 bdbbb4c5 Leszek Koltunski
  protected float[][] getCubitPositions(int numLayers)
190 49cd8581 Leszek Koltunski
    {
191 4d27a99b Leszek Koltunski
    final float DIST_CORNER = numLayers-1;
192
    final float DIST_CENTER = numLayers-1;
193 49cd8581 Leszek Koltunski
194 e6cf7283 Leszek Koltunski
    final float[][] CENTERS = new float[10][];
195
196
    CENTERS[0] = new float[] { DIST_CORNER, DIST_CORNER, DIST_CORNER };
197
    CENTERS[1] = new float[] {-DIST_CORNER, DIST_CORNER,-DIST_CORNER };
198
    CENTERS[2] = new float[] {-DIST_CORNER,-DIST_CORNER, DIST_CORNER };
199
    CENTERS[3] = new float[] { DIST_CORNER,-DIST_CORNER,-DIST_CORNER };
200
    CENTERS[4] = new float[] { DIST_CENTER,           0,           0 };
201
    CENTERS[5] = new float[] {-DIST_CENTER,           0,           0 };
202
    CENTERS[6] = new float[] {           0, DIST_CENTER,           0 };
203
    CENTERS[7] = new float[] {           0,-DIST_CENTER,           0 };
204
    CENTERS[8] = new float[] {           0,           0, DIST_CENTER };
205
    CENTERS[9] = new float[] {           0,           0,-DIST_CENTER };
206 49cd8581 Leszek Koltunski
207
    return CENTERS;
208
    }
209
210
///////////////////////////////////////////////////////////////////////////////////////////////////
211
212 bdbbb4c5 Leszek Koltunski
  protected ObjectShape getObjectShape(int cubit, int numLayers)
213 49cd8581 Leszek Koltunski
    {
214 a2a4df1b Leszek Koltunski
    int variant = getCubitVariant(cubit,numLayers);
215
216
    if( variant==0 )
217 49cd8581 Leszek Koltunski
      {
218 a2a4df1b Leszek Koltunski
      final float angle = (float)Math.PI/(2*IVY_N);
219
      final float CORR  = 1.0f - 2*IVY_D;
220
221 4d27a99b Leszek Koltunski
      float[][] centers= new float[][] { {-1.0f,-1.0f,-1.0f} };
222
      float[][] corners= new float[][] { {0.05f,0.20f}, {0.04f,0.20f} };
223 a2a4df1b Leszek Koltunski
      int[] cornerIndices= new int[3*(IVY_N+1)+4];
224
      int[] centerIndices= new int[3*(IVY_N+1)+4];
225
      double[][] vertices= new double[3*(IVY_N+1)+4][3];
226
      int[][] vertIndices= new int[6][IVY_N+4];
227
      int[] bandIndices  = new int[] { 0,0,0,1,1,1 };
228
229
      float[][] bands =
230
        {
231
          {+0.015f,20,0.2f,0.5f,7,1,2},
232
          {-0.100f,20,0.2f,0.0f,2,1,2}
233
        };
234
235
      for(int i=0; i<3*(IVY_N+1); i++)
236
        {
237
        cornerIndices[i+4] = -1;
238
        centerIndices[i+4] = -1;
239
        }
240
241
      cornerIndices[0] = 1;
242
      cornerIndices[1] = 0;
243
      cornerIndices[2] = 0;
244
      cornerIndices[3] = 0;
245
246
      centerIndices[0] = 0;
247
      centerIndices[1] = 0;
248
      centerIndices[2] = 0;
249
      centerIndices[3] = 0;
250
251
      vertices[0][0] = 0.0;
252
      vertices[0][1] = 0.0;
253
      vertices[0][2] = 0.0;
254 4d27a99b Leszek Koltunski
      vertices[1][0] =-2.0;
255 a2a4df1b Leszek Koltunski
      vertices[1][1] = 0.0;
256
      vertices[1][2] = 0.0;
257
      vertices[2][0] = 0.0;
258 4d27a99b Leszek Koltunski
      vertices[2][1] =-2.0;
259 a2a4df1b Leszek Koltunski
      vertices[2][2] = 0.0;
260
      vertices[3][0] = 0.0;
261
      vertices[3][1] = 0.0;
262 4d27a99b Leszek Koltunski
      vertices[3][2] =-2.0;
263 a2a4df1b Leszek Koltunski
264
      vertIndices[0][0] = 2;
265
      vertIndices[0][1] = 0;
266
      vertIndices[0][2] = 1;
267
      vertIndices[3][0] = 2;
268
      vertIndices[3][1] = 0;
269
      vertIndices[3][2] = 1;
270
271
      vertIndices[1][0] = 3;
272
      vertIndices[1][1] = 0;
273
      vertIndices[1][2] = 2;
274
      vertIndices[4][0] = 3;
275
      vertIndices[4][1] = 0;
276
      vertIndices[4][2] = 2;
277
278
      vertIndices[2][0] = 1;
279
      vertIndices[2][1] = 0;
280
      vertIndices[2][2] = 3;
281
      vertIndices[5][0] = 1;
282
      vertIndices[5][1] = 0;
283
      vertIndices[5][2] = 3;
284
285
      int N1 = 4;
286
      int N2 = N1 + IVY_N + 1;
287
      int N3 = N2 + IVY_N + 1;
288
289
      for(int i=0; i<=IVY_N; i++)
290
        {
291
        double cos1 = Math.cos((IVY_N-i)*angle);
292
        double sin1 = Math.sin((IVY_N-i)*angle);
293
        double cos2 = Math.cos((      i)*angle);
294
        double sin2 = Math.sin((      i)*angle);
295
296 4d27a99b Leszek Koltunski
        vertices[N1+i][0] = CORR*(2*cos1-1.0) - 1.0;
297
        vertices[N1+i][1] = CORR*(2*sin1-1.0) - 1.0;
298 a2a4df1b Leszek Koltunski
        vertices[N1+i][2] = 0.0;
299
300
        vertices[N2+i][0] = 0.0;
301 4d27a99b Leszek Koltunski
        vertices[N2+i][1] = CORR*(2*sin2-1.0) - 1.0;
302
        vertices[N2+i][2] = CORR*(2*cos2-1.0) - 1.0;
303 a2a4df1b Leszek Koltunski
304 4d27a99b Leszek Koltunski
        vertices[N3+i][0] = CORR*(2*cos2-1.0) - 1.0;
305 a2a4df1b Leszek Koltunski
        vertices[N3+i][1] = 0.0;
306 4d27a99b Leszek Koltunski
        vertices[N3+i][2] = CORR*(2*sin2-1.0) - 1.0;
307 a2a4df1b Leszek Koltunski
308
        vertIndices[0][i+3] = N1 + i;
309
        vertIndices[1][i+3] = N2 + i;
310
        vertIndices[2][i+3] = N3 + i;
311
        vertIndices[3][i+3] = N1 + i;
312
        vertIndices[4][i+3] = N2 + i;
313
        vertIndices[5][i+3] = N3 + i;
314
        }
315
316 4d27a99b Leszek Koltunski
      float C = 1.0f - SQ2/2;
317 a2a4df1b Leszek Koltunski
      float[] convexCenter = new float[] {-C,-C,-C};
318
      return new ObjectShape(vertices,vertIndices,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), convexCenter);
319 49cd8581 Leszek Koltunski
      }
320 a2a4df1b Leszek Koltunski
    else
321
      {
322
      final float angle = (float)Math.PI/(2*IVY_N);
323
      final float CORR  = 1.0f - 2*IVY_D;
324
      double[][] vertices = new double[2*IVY_N][3];
325
      int[][] vert_indices = new int[2][2*IVY_N];
326
327
      int[] bandIndices= new int[] { 0,1 };
328
      int[] indexes    = new int[2*IVY_N];
329 4d27a99b Leszek Koltunski
      float[][] corners= new float[][] { {0.05f,0.20f} };
330
      float[][] centers= new float[][] { {-0.0f,-0.0f,-1.0f} };
331 49cd8581 Leszek Koltunski
332 a2a4df1b Leszek Koltunski
      for(int i=0; i<IVY_N; i++)
333
        {
334
        double sin = Math.sin(i*angle);
335
        double cos = Math.cos(i*angle);
336
337 4d27a99b Leszek Koltunski
        vertices[i      ][0] = CORR*(1.0f-2*cos);
338
        vertices[i      ][1] = CORR*(1.0f-2*sin);
339 a2a4df1b Leszek Koltunski
        vertices[i      ][2] = 0;
340 4d27a99b Leszek Koltunski
        vertices[i+IVY_N][0] = CORR*(2*cos-1.0f);
341
        vertices[i+IVY_N][1] = CORR*(2*sin-1.0f);
342 a2a4df1b Leszek Koltunski
        vertices[i+IVY_N][2] = 0;
343
        }
344
345
      for(int i=0; i<2*IVY_N; i++)
346
        {
347
        vert_indices[0][i] = i;
348
        vert_indices[1][i] = 2*IVY_N-1-i;
349
        }
350
351
      for(int i=0; i<2*IVY_N; i++)
352
        {
353
        indexes[i] = -1;
354
        }
355
      indexes[0] = indexes[IVY_N] = 0;
356
357
      float[][] bands =
358
        {
359
          {+0.03f,35,0.5f,0.5f,5,0,0},
360
          {+0.10f,45,0.5f,0.0f,2,0,0}
361
        };
362
363
      return new ObjectShape(vertices,vert_indices,bands,bandIndices,corners,indexes,centers,indexes,getNumCubitFaces(), null);
364
      }
365 49cd8581 Leszek Koltunski
    }
366
367
///////////////////////////////////////////////////////////////////////////////////////////////////
368
369 bdbbb4c5 Leszek Koltunski
  protected Static4D getQuat(int cubit, int numLayers)
370 49cd8581 Leszek Koltunski
    {
371 e01fa67a Leszek Koltunski
    if( mQuats==null ) initializeQuats();
372
373 a2a4df1b Leszek Koltunski
    switch(cubit)
374 a0b48da6 Leszek Koltunski
      {
375 e01fa67a Leszek Koltunski
      case  0: return mQuats[0];
376
      case  1: return mQuats[2];
377
      case  2: return mQuats[3];
378
      case  3: return mQuats[1];
379
380
      case  4: return mQuats[8];
381
      case  5: return mQuats[11];
382
      case  6: return mQuats[10];
383
      case  7: return mQuats[9];
384
      case  8: return mQuats[0];
385
      case  9: return mQuats[2];
386 a0b48da6 Leszek Koltunski
      }
387
388 e01fa67a Leszek Koltunski
    return mQuats[0];
389 a2a4df1b Leszek Koltunski
    }
390 49cd8581 Leszek Koltunski
391 a2a4df1b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
392 47d98cd5 Leszek Koltunski
393 bdbbb4c5 Leszek Koltunski
  protected int getNumCubitVariants(int numLayers)
394 a2a4df1b Leszek Koltunski
    {
395
    return 2;
396
    }
397 47d98cd5 Leszek Koltunski
398 a2a4df1b Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
399 47d98cd5 Leszek Koltunski
400 bdbbb4c5 Leszek Koltunski
  protected int getCubitVariant(int cubit, int numLayers)
401 a2a4df1b Leszek Koltunski
    {
402
    return cubit<4 ? 0:1;
403
    }
404 47d98cd5 Leszek Koltunski
405 49cd8581 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
406
407 bdbbb4c5 Leszek Koltunski
  protected int getFaceColor(int cubit, int cubitface, int numLayers)
408 49cd8581 Leszek Koltunski
    {
409 e01fa67a Leszek Koltunski
    if( mFaceMap==null )
410
      {
411
      mFaceMap = new int[][]
412
         {
413
           {  4, 0, 2, 12,12,12 },
414
           {  5, 1, 2, 12,12,12 },
415
           {  4, 1, 3, 12,12,12 },
416
           {  5, 0, 3, 12,12,12 },
417
418
           {  6, 12,12,12,12,12 },
419
           {  7, 12,12,12,12,12 },
420
           {  8, 12,12,12,12,12 },
421
           {  9, 12,12,12,12,12 },
422
           { 10, 12,12,12,12,12 },
423
           { 11, 12,12,12,12,12 },
424
         };
425
      }
426
427 18a5f95f Leszek Koltunski
    return mFaceMap[cubit][cubitface];
428 49cd8581 Leszek Koltunski
    }
429
430 9c06394a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
431 9ce78850 Leszek Koltunski
432 bdbbb4c5 Leszek Koltunski
  protected ObjectSticker retSticker(int face)
433 9c06394a Leszek Koltunski
    {
434 e01fa67a Leszek Koltunski
    if( mStickers==null )
435
      {
436
      float[][] STICKERS = new float[][] { { 0.29258922f, -0.5f, 0.29258922f, 0.29258922f, -0.5f, 0.29258922f }, { -0.5f, 0.5f, 0.5f, -0.5f } };
437
      mStickers = new ObjectSticker[NUM_STICKERS];
438
      float D = (float)(Math.PI/4);
439
      final float[][] angles = { { 0,0,D },{ D,D } };
440
      final float[][] radii  = { { 0,0.04f,0 },{ 0.06f,0.06f } };
441
      final float[] strokes = { 0.03f, 0.08f };
442
      for(int s=0; s<NUM_STICKERS; s++) mStickers[s] = new ObjectSticker(STICKERS[s], angles[s],radii[s],strokes[s]);
443
      }
444
445 abf36986 Leszek Koltunski
    return mStickers[face/NUM_FACE_COLORS];
446 49cd8581 Leszek Koltunski
    }
447
448
///////////////////////////////////////////////////////////////////////////////////////////////////
449 e1dc3366 Leszek Koltunski
// PUBLIC API
450 49cd8581 Leszek Koltunski
451 e1dc3366 Leszek Koltunski
  public Static3D[] getRotationAxis()
452
    {
453
    return ROT_AXIS;
454
    }
455
456 e9a87113 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
457
458
  public Movement getMovement()
459
    {
460 ef018c1b Leszek Koltunski
    if( mMovement==null )
461
      {
462
      int numLayers = getNumLayers();
463
      if( mCuts==null ) getCuts(numLayers);
464
      getLayerRotatable(numLayers);
465 7ee89540 Leszek Koltunski
      mMovement = new Movement6(ROT_AXIS,mCuts,mLayerRotatable,numLayers,TYPE_SPLIT_CORNER,ENABLED);
466 ef018c1b Leszek Koltunski
      }
467 e9a87113 Leszek Koltunski
    return mMovement;
468
    }
469
470 e1dc3366 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
471
472
  public int[] getBasicAngle()
473
    {
474 e01fa67a Leszek Koltunski
    if( mBasicAngle ==null ) mBasicAngle = new int[] { 3,3,3,3 };
475
    return mBasicAngle;
476 e1dc3366 Leszek Koltunski
    }
477
478 6fd4a72c Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
479
480
  public int getObjectName(int numLayers)
481
    {
482
    return R.string.ivy2;
483
    }
484
485
///////////////////////////////////////////////////////////////////////////////////////////////////
486
487
  public int getInventor(int numLayers)
488
    {
489
    return R.string.ivy2_inventor;
490
    }
491
492
///////////////////////////////////////////////////////////////////////////////////////////////////
493
494
  public int getComplexity(int numLayers)
495
    {
496
    return 1;
497
    }
498 49cd8581 Leszek Koltunski
}