Project

General

Profile

Download (15.6 KB) Statistics
| Branch: | Revision:

distorted-objectlib / src / main / java / org / distorted / objectlib / objects / TwistyIvy.java @ ccd8a6f2

1 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 6133be67 Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objectlib.objects;
11
12 c9c71c3f Leszek Koltunski
import static org.distorted.objectlib.touchcontrol.TouchControl.TYPE_SPLIT_CORNER;
13
import static org.distorted.objectlib.touchcontrol.TouchControl.TC_HEXAHEDRON;
14 29b82486 Leszek Koltunski
15 82eb152a Leszek Koltunski
import java.io.InputStream;
16 29b82486 Leszek Koltunski
17
import org.distorted.library.type.Static3D;
18
import org.distorted.library.type.Static4D;
19
20 84a17011 Leszek Koltunski
import org.distorted.objectlib.helpers.FactoryCubit;
21 3ee1d662 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectFaceShape;
22 1d581993 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectSignature;
23 84a17011 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectVertexEffects;
24 2dffaf22 Leszek Koltunski
import org.distorted.objectlib.main.ObjectSignatures;
25 9ba7f3f6 Leszek Koltunski
import org.distorted.objectlib.scrambling.ScrambleEdgeGenerator;
26 a8295031 Leszek Koltunski
import org.distorted.objectlib.main.InitData;
27 c9c71c3f Leszek Koltunski
import org.distorted.objectlib.touchcontrol.TouchControlHexahedron;
28 8005e762 Leszek Koltunski
import org.distorted.objectlib.main.ObjectType;
29 198c5bf0 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectShape;
30 b31249d6 Leszek Koltunski
import org.distorted.objectlib.shape.ShapeHexahedron;
31 29b82486 Leszek Koltunski
32
///////////////////////////////////////////////////////////////////////////////////////////////////
33
34 386af988 Leszek Koltunski
public class TwistyIvy extends ShapeHexahedron
35 29b82486 Leszek Koltunski
{
36 ccd8a6f2 Leszek Koltunski
  static final Static3D[] ROT_AXIS = new Static3D[]
37 29b82486 Leszek Koltunski
         {
38 84a17011 Leszek Koltunski
           new Static3D( SQ3/3, SQ3/3, SQ3/3),
39
           new Static3D( SQ3/3, SQ3/3,-SQ3/3),
40
           new Static3D( SQ3/3,-SQ3/3, SQ3/3),
41
           new Static3D( SQ3/3,-SQ3/3,-SQ3/3)
42 29b82486 Leszek Koltunski
         };
43
44
  public static final float IVY_D = 0.006f;
45
  private static final int  IVY_N = 8;
46
47 9ba7f3f6 Leszek Koltunski
  private int[][] mEdges;
48 beee90ab Leszek Koltunski
  private int[][] mBasicAngle;
49 29b82486 Leszek Koltunski
  private float[][] mCuts;
50 802fe251 Leszek Koltunski
  private int[] mQuatIndex;
51 29b82486 Leszek Koltunski
52
///////////////////////////////////////////////////////////////////////////////////////////////////
53
54 a8295031 Leszek Koltunski
  public TwistyIvy(InitData data, int meshState, int iconMode, Static4D quat, Static3D move, float scale, InputStream stream)
55 29b82486 Leszek Koltunski
    {
56 a8295031 Leszek Koltunski
    super(data, meshState, iconMode, data.getNumLayers()[0], quat, move, scale, stream);
57 29b82486 Leszek Koltunski
    }
58
59 ed0988c0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
60
// ditto, manually provide the sticker coordinates.
61
62
  @Override
63
  public void adjustStickerCoords()
64
    {
65 0275f61f Leszek Koltunski
    float B = 1.08f;
66
    float A1 = B*0.41f;
67
    float A2 = B*0.46f;
68
69 ed0988c0 Leszek Koltunski
    mStickerCoords = new float[][]
70
          {
71
            { 0.29258922f, -0.5f, 0.29258922f, 0.29258922f, -0.5f, 0.29258922f },
72 0275f61f Leszek Koltunski
            { -A1,A1,A2,-A2 }
73 ed0988c0 Leszek Koltunski
          };
74
    }
75
76 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
77
78 9ba7f3f6 Leszek Koltunski
  public int[][] getScrambleEdges()
79 29b82486 Leszek Koltunski
    {
80 9ba7f3f6 Leszek Koltunski
    if( mEdges==null ) mEdges = ScrambleEdgeGenerator.getScrambleEdgesSingle(mBasicAngle);
81
    return mEdges;
82 29b82486 Leszek Koltunski
    }
83
84
///////////////////////////////////////////////////////////////////////////////////////////////////
85
86 7bbfc84f Leszek Koltunski
  public float[][] getCuts(int[] numLayers)
87 29b82486 Leszek Koltunski
    {
88
    if( mCuts==null )
89
      {
90
      float[] cut = new float[] {0.0f};
91
      mCuts = new float[][] { cut,cut,cut,cut };
92
      }
93
94
    return mCuts;
95
    }
96
97
///////////////////////////////////////////////////////////////////////////////////////////////////
98
99 59c20632 Leszek Koltunski
  public boolean[][] getLayerRotatable(int[] numLayers)
100 29b82486 Leszek Koltunski
    {
101 59c20632 Leszek Koltunski
    int numAxis = ROT_AXIS.length;
102
    boolean[][] layerRotatable = new boolean[numAxis][];
103 a57e6870 Leszek Koltunski
104 59c20632 Leszek Koltunski
    for(int i=0; i<numAxis; i++)
105
      {
106
      layerRotatable[i] = new boolean[numLayers[i]];
107
      for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true;
108 29b82486 Leszek Koltunski
      }
109 59c20632 Leszek Koltunski
110
    return layerRotatable;
111
    }
112
113
///////////////////////////////////////////////////////////////////////////////////////////////////
114
115 11fa413d Leszek Koltunski
  public int getTouchControlType()
116 59c20632 Leszek Koltunski
    {
117 c9c71c3f Leszek Koltunski
    return TC_HEXAHEDRON;
118 59c20632 Leszek Koltunski
    }
119
120
///////////////////////////////////////////////////////////////////////////////////////////////////
121
122 11fa413d Leszek Koltunski
  public int getTouchControlSplit()
123 59c20632 Leszek Koltunski
    {
124
    return TYPE_SPLIT_CORNER;
125
    }
126
127
///////////////////////////////////////////////////////////////////////////////////////////////////
128
129
  public int[][][] getEnabled()
130
    {
131
    return new int[][][]
132
      {
133
          {{0},{3},{3},{0}},
134
          {{2},{1},{1},{2}},
135
          {{2},{0},{0},{2}},
136
          {{1},{3},{3},{1}},
137
          {{0},{0},{1},{1}},
138
          {{2},{2},{3},{3}},
139
      };
140
    }
141
142
///////////////////////////////////////////////////////////////////////////////////////////////////
143
144
  public float[] getDist3D(int[] numLayers)
145
    {
146 4c9ca251 Leszek Koltunski
    return TouchControlHexahedron.D3D;
147
    }
148
149
///////////////////////////////////////////////////////////////////////////////////////////////////
150
151
  public Static3D[] getFaceAxis()
152
    {
153
    return TouchControlHexahedron.FACE_AXIS;
154 29b82486 Leszek Koltunski
    }
155
156
///////////////////////////////////////////////////////////////////////////////////////////////////
157
158 7b832206 Leszek Koltunski
  public float[][] getCubitPositions(int[] numLayers)
159 29b82486 Leszek Koltunski
    {
160 a57e6870 Leszek Koltunski
    final float DIST_CORNER = numLayers[0]-1;
161
    final float DIST_CENTER = numLayers[0]-1;
162 29b82486 Leszek Koltunski
163 802fe251 Leszek Koltunski
    return new float[][]
164
      {
165
        { DIST_CORNER, DIST_CORNER, DIST_CORNER },
166
        {-DIST_CORNER, DIST_CORNER,-DIST_CORNER },
167
        {-DIST_CORNER,-DIST_CORNER, DIST_CORNER },
168
        { DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
169 0b9d97b5 Leszek Koltunski
        { DIST_CENTER,           0,           0 },
170
        {-DIST_CENTER,           0,           0 },
171 74b5e124 Leszek Koltunski
        {           0, DIST_CENTER,           0 },
172
        {           0,-DIST_CENTER,           0 },
173
        {           0,           0, DIST_CENTER },
174
        {           0,           0,-DIST_CENTER },
175 802fe251 Leszek Koltunski
      };
176 29b82486 Leszek Koltunski
    }
177
178 d0e6cf7f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
179
180
  public Static4D getCubitQuats(int cubit, int[] numLayers)
181
    {
182 0b9d97b5 Leszek Koltunski
    if( mQuatIndex==null ) mQuatIndex = new int[] { 0,11,10, 9,
183 74b5e124 Leszek Koltunski
                                                    5, 8, 7, 6, 0, 11
184 0b9d97b5 Leszek Koltunski
                                                  };
185 802fe251 Leszek Koltunski
    return mObjectQuats[mQuatIndex[cubit]];
186 d0e6cf7f Leszek Koltunski
    }
187
188 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
189
190 84a17011 Leszek Koltunski
  private float[][] getVertices(int variant)
191 29b82486 Leszek Koltunski
    {
192 84a17011 Leszek Koltunski
    final float angle = (float)Math.PI/(2*IVY_N);
193
    final float CORR  = 1-2*IVY_D;
194
195 29b82486 Leszek Koltunski
    if( variant==0 )
196
      {
197 0275f61f Leszek Koltunski
      final float A = 0.3f;
198 84a17011 Leszek Koltunski
      final int N1 = 4;
199
      final int N2 = N1 + IVY_N + 1;
200
      final int N3 = N2 + IVY_N + 1;
201 0275f61f Leszek Koltunski
      float[][] vertices= new float[3*(IVY_N+1)+5][3];
202
203
      vertices[3*(IVY_N+1)+4][0] = -A;
204
      vertices[3*(IVY_N+1)+4][1] = -A;
205
      vertices[3*(IVY_N+1)+4][2] = -A;
206 29b82486 Leszek Koltunski
207 57ef6378 Leszek Koltunski
      vertices[0][0] = 0;
208
      vertices[0][1] = 0;
209
      vertices[0][2] = 0;
210
      vertices[1][0] =-2;
211
      vertices[1][1] = 0;
212
      vertices[1][2] = 0;
213
      vertices[2][0] = 0;
214
      vertices[2][1] =-2;
215
      vertices[2][2] = 0;
216
      vertices[3][0] = 0;
217
      vertices[3][1] = 0;
218
      vertices[3][2] =-2;
219 29b82486 Leszek Koltunski
220
      for(int i=0; i<=IVY_N; i++)
221
        {
222 57ef6378 Leszek Koltunski
        float cos1 = (float)Math.cos((IVY_N-i)*angle);
223
        float sin1 = (float)Math.sin((IVY_N-i)*angle);
224
        float cos2 = (float)Math.cos((      i)*angle);
225
        float sin2 = (float)Math.sin((      i)*angle);
226 29b82486 Leszek Koltunski
227 57ef6378 Leszek Koltunski
        vertices[N1+i][0] = CORR*(2*cos1-1) - 1;
228
        vertices[N1+i][1] = CORR*(2*sin1-1) - 1;
229
        vertices[N1+i][2] = 0;
230 29b82486 Leszek Koltunski
231 57ef6378 Leszek Koltunski
        vertices[N2+i][0] = 0;
232
        vertices[N2+i][1] = CORR*(2*sin2-1) - 1;
233
        vertices[N2+i][2] = CORR*(2*cos2-1) - 1;
234 29b82486 Leszek Koltunski
235 57ef6378 Leszek Koltunski
        vertices[N3+i][0] = CORR*(2*cos2-1) - 1;
236
        vertices[N3+i][1] = 0;
237
        vertices[N3+i][2] = CORR*(2*sin2-1) - 1;
238 0275f61f Leszek Koltunski
        }
239
240 84a17011 Leszek Koltunski
      return vertices;
241 29b82486 Leszek Koltunski
      }
242
    else
243
      {
244 0275f61f Leszek Koltunski
      float[][] vertices= new float[2*IVY_N+1][3];
245 29b82486 Leszek Koltunski
246
      for(int i=0; i<IVY_N; i++)
247
        {
248 57ef6378 Leszek Koltunski
        float sin = (float)Math.sin(i*angle);
249
        float cos = (float)Math.cos(i*angle);
250 29b82486 Leszek Koltunski
251 57ef6378 Leszek Koltunski
        vertices[i      ][0] = CORR*(1-2*cos);
252
        vertices[i      ][1] = CORR*(1-2*sin);
253 29b82486 Leszek Koltunski
        vertices[i      ][2] = 0;
254 57ef6378 Leszek Koltunski
        vertices[i+IVY_N][0] = CORR*(2*cos-1);
255
        vertices[i+IVY_N][1] = CORR*(2*sin-1);
256 29b82486 Leszek Koltunski
        vertices[i+IVY_N][2] = 0;
257
        }
258
259 0275f61f Leszek Koltunski
      vertices[2*IVY_N][0] = 0.0f;
260
      vertices[2*IVY_N][1] = 0.0f;
261
      vertices[2*IVY_N][2] =-0.1f;
262
263 84a17011 Leszek Koltunski
      return vertices;
264
      }
265
    }
266
267
///////////////////////////////////////////////////////////////////////////////////////////////////
268
269
  public ObjectShape getObjectShape(int variant)
270
    {
271
    if( variant==0 )
272
      {
273
      int[][] indices = new int[3*IVY_N+3][];
274
275
      indices[0] = new int[IVY_N+4];
276
      indices[1] = new int[IVY_N+4];
277
      indices[2] = new int[IVY_N+4];
278
279
      indices[0][0] = 2;
280
      indices[0][1] = 0;
281
      indices[0][2] = 1;
282
      indices[1][0] = 3;
283
      indices[1][1] = 0;
284
      indices[1][2] = 2;
285
      indices[2][0] = 1;
286
      indices[2][1] = 0;
287
      indices[2][2] = 3;
288
289
      int N1 = 4;
290
      int N2 = N1 + IVY_N + 1;
291
      int N3 = N2 + IVY_N + 1;
292
293
      for(int i=0; i<=IVY_N; i++)
294
        {
295
        indices[0][i+3] = N1 + i;
296
        indices[1][i+3] = N2 + i;
297
        indices[2][i+3] = N3 + i;
298
        }
299
300
      for(int i=0; i<IVY_N; i++)
301
        {
302
        indices[3*i+3] = new int[] { N1+i+1, N1+i, 3*(IVY_N+1)+4 };
303
        indices[3*i+4] = new int[] { N2+i+1, N2+i, 3*(IVY_N+1)+4 };
304
        indices[3*i+5] = new int[] { N3+i+1, N3+i, 3*(IVY_N+1)+4 };
305
        }
306
307
      return new ObjectShape(getVertices(variant), indices);
308
      }
309
    else
310
      {
311
      int[][] indices= new int[2*IVY_N+1][];
312
313 0275f61f Leszek Koltunski
      indices[0] = new int[2*IVY_N+1];
314 29b82486 Leszek Koltunski
      for(int i=0; i<2*IVY_N; i++)
315
        {
316 ac97ecc0 Leszek Koltunski
        indices[0][i] = i;
317 0275f61f Leszek Koltunski
        indices[i+1]  = new int[] {i+1,i,2*IVY_N};
318 29b82486 Leszek Koltunski
        }
319 0275f61f Leszek Koltunski
      indices[2*IVY_N][0] = 0;
320 29b82486 Leszek Koltunski
321 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
322 3ee1d662 Leszek Koltunski
      }
323
    }
324
325
///////////////////////////////////////////////////////////////////////////////////////////////////
326
327
  public ObjectFaceShape getObjectFaceShape(int variant)
328
    {
329
    if( variant==0 )
330
      {
331 3bf19410 Leszek Koltunski
      float height = isInIconMode() ? 0.001f : 0.015f;
332 84a17011 Leszek Koltunski
      float[][] bands = { {height,20,0.2f,0.5f,7,1,2}, {0.001f,1,0.2f,0.0f,2,0,0} };
333
334
      int[] indices   = new int[3*(IVY_N+1)];
335
      for(int i=0; i<3*(IVY_N+1); i++) indices[i] = 1;
336
      indices[0] = indices[1] = indices[2] = 0;
337
338
      float C = 1-SQ2/2;
339
      float[] convexCenter = {-C,-C,-C};
340
      return new ObjectFaceShape(bands,indices,convexCenter);
341
      }
342
    else
343
      {
344
      float h1 = isInIconMode() ? 0.001f : 0.03f;
345
      float h2 = isInIconMode() ? 0.001f : 0.01f;
346
      float[][] bands = { { h1,35,0.5f,0.5f,5,0,0}, {h2,1,0.5f,0.8f,2,0,0} };
347
348
      int[] indices= new int[2*IVY_N+1];
349
      for(int i=0; i<2*IVY_N+1; i++) indices[i] = 1;
350
      indices[0] = 0;
351
352
      return new ObjectFaceShape(bands,indices,null);
353
      }
354
    }
355
356
///////////////////////////////////////////////////////////////////////////////////////////////////
357
358
  public ObjectVertexEffects getVertexEffects(int variant)
359
    {
360
    if( variant==0 )
361
      {
362 3ee1d662 Leszek Koltunski
      float[][] centers  = { {-1.0f,-1.0f,-1.0f} };
363 0275f61f Leszek Koltunski
      float[][] corners  = { {0.04f,0.20f}, {0.03f,0.20f} };
364 3ee1d662 Leszek Koltunski
365 0275f61f Leszek Koltunski
      int[] cornerIndices= new int[3*(IVY_N+1)+5];
366
      int[] centerIndices= new int[3*(IVY_N+1)+5];
367 4e9f2df5 Leszek Koltunski
368 3ee1d662 Leszek Koltunski
      for(int i=0; i<3*(IVY_N+1); i++)
369 29b82486 Leszek Koltunski
        {
370 3ee1d662 Leszek Koltunski
        cornerIndices[i+4] = -1;
371
        centerIndices[i+4] = -1;
372 29b82486 Leszek Koltunski
        }
373
374 0275f61f Leszek Koltunski
      cornerIndices[3*(IVY_N+1)+4] = -1;
375
      centerIndices[3*(IVY_N+1)+4] = -1;
376
377 3ee1d662 Leszek Koltunski
      cornerIndices[0] = 1;
378
      cornerIndices[1] = 0;
379
      cornerIndices[2] = 0;
380
      cornerIndices[3] = 0;
381
382
      centerIndices[0] = 0;
383
      centerIndices[1] = 0;
384
      centerIndices[2] = 0;
385
      centerIndices[3] = 0;
386
387 84a17011 Leszek Koltunski
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,cornerIndices,centers,centerIndices);
388 3ee1d662 Leszek Koltunski
      }
389
    else
390
      {
391 0275f61f Leszek Koltunski
      float[][] corners= { {0.04f,0.20f} };
392 4e9f2df5 Leszek Koltunski
      float[][] centers= { {-0.0f,-0.0f,-1.0f} };
393 84a17011 Leszek Koltunski
      int[] indices = new int[2*IVY_N+1];
394
      for(int i=0; i<2*IVY_N+1; i++) indices[i] = -1;
395
      indices[0] = indices[IVY_N] = 0;
396
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
397 29b82486 Leszek Koltunski
      }
398
    }
399
400
///////////////////////////////////////////////////////////////////////////////////////////////////
401
402 e30c522a Leszek Koltunski
  public int getNumCubitVariants(int[] numLayers)
403 29b82486 Leszek Koltunski
    {
404
    return 2;
405
    }
406
407
///////////////////////////////////////////////////////////////////////////////////////////////////
408
409 e30c522a Leszek Koltunski
  public int getCubitVariant(int cubit, int[] numLayers)
410 29b82486 Leszek Koltunski
    {
411
    return cubit<4 ? 0:1;
412
    }
413
414 00f4980d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
415
416 d53fb890 Leszek Koltunski
  public float getStickerRadius()
417 00f4980d Leszek Koltunski
    {
418
    return 0.19f;
419
    }
420
421
///////////////////////////////////////////////////////////////////////////////////////////////////
422
423 d53fb890 Leszek Koltunski
  public float getStickerStroke()
424 00f4980d Leszek Koltunski
    {
425 3bf19410 Leszek Koltunski
    return isInIconMode() ? 0.16f : 0.12f;
426 00f4980d Leszek Koltunski
    }
427
428
///////////////////////////////////////////////////////////////////////////////////////////////////
429
430 d53fb890 Leszek Koltunski
  public float[][] getStickerAngles()
431 00f4980d Leszek Koltunski
    {
432
    float D = (float)(Math.PI/4);
433 cc70f525 Leszek Koltunski
    return new float[][] { { 0,0,-D },{ D,D } };
434 00f4980d Leszek Koltunski
    }
435
436 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
437
// PUBLIC API
438
439
  public Static3D[] getRotationAxis()
440
    {
441
    return ROT_AXIS;
442
    }
443
444
///////////////////////////////////////////////////////////////////////////////////////////////////
445
446 beee90ab Leszek Koltunski
  public int[][] getBasicAngles()
447 29b82486 Leszek Koltunski
    {
448 beee90ab Leszek Koltunski
    if( mBasicAngle ==null )
449
      {
450
      int num = getNumLayers()[0];
451
      int[] tmp = new int[num];
452
      for(int i=0; i<num; i++) tmp[i] = 3;
453
      mBasicAngle = new int[][] { tmp,tmp,tmp,tmp };
454
      }
455
456 29b82486 Leszek Koltunski
    return mBasicAngle;
457
    }
458
459 61aa85e4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
460
461 5f54927b Leszek Koltunski
  public String getShortName()
462 61aa85e4 Leszek Koltunski
    {
463 5f54927b Leszek Koltunski
    return ObjectType.IVY_2.name();
464
    }
465
466
///////////////////////////////////////////////////////////////////////////////////////////////////
467
468 1d581993 Leszek Koltunski
  public ObjectSignature getSignature()
469 5f54927b Leszek Koltunski
    {
470 2dffaf22 Leszek Koltunski
    return new ObjectSignature(ObjectSignatures.IVY_2);
471 61aa85e4 Leszek Koltunski
    }
472
473 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
474
475 e26eb4e7 Leszek Koltunski
  public String getObjectName()
476 29b82486 Leszek Koltunski
    {
477 e26eb4e7 Leszek Koltunski
    return "Ivy Cube";
478 29b82486 Leszek Koltunski
    }
479
480
///////////////////////////////////////////////////////////////////////////////////////////////////
481
482 e26eb4e7 Leszek Koltunski
  public String getInventor()
483 29b82486 Leszek Koltunski
    {
484 e26eb4e7 Leszek Koltunski
    return "Eitan Cher";
485 29b82486 Leszek Koltunski
    }
486
487 59c20632 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
488
489 e26eb4e7 Leszek Koltunski
  public int getYearOfInvention()
490 59c20632 Leszek Koltunski
    {
491
    return 2009;
492
    }
493
494 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
495
496 e26eb4e7 Leszek Koltunski
  public int getComplexity()
497 29b82486 Leszek Koltunski
    {
498 b4223a92 Leszek Koltunski
    return 0;
499 29b82486 Leszek Koltunski
    }
500 052e0362 Leszek Koltunski
501
///////////////////////////////////////////////////////////////////////////////////////////////////
502
503
  public String[][] getTutorials()
504
    {
505
    return new String[][]{
506
                          {"gb","QMzeJobSu1M","How to Solve the Ivy Cube","Z3"},
507
                          {"es","2-Gf2cmEJDs","Resolver Ivy Cube","Cuby"},
508
                          {"ru","pbkfOCnnfsA","Как собрать Иви куб","Алексей Ярыгин"},
509
                          {"fr","mn7YTnYu3Uc","Comment résoudre le Ivy Cube","ValentinoCube"},
510
                          {"de","vaW5fSUG_O8","Ivy Cube","ThomasStadler"},
511
                          {"pl","8s_0VxNvFA8","Jak ułożyć Ivy Cube","DubiCube"},
512
                          {"kr","TmSPgjtSFac","15분만에 아이비큐브 완전정복하기!","초등취미생활"},
513 a399e91b Leszek Koltunski
                          {"vn","Ktx9KQr_8qo","Tutorial N.29 - Ivy Cube","Duy Thích Rubik"},
514 052e0362 Leszek Koltunski
                         };
515
    }
516 29b82486 Leszek Koltunski
}