Project

General

Profile

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

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

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