Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / objects / TwistyPyraminx.java @ b8519939

1 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2019 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.TC_TETRAHEDRON;
13
import static org.distorted.objectlib.touchcontrol.TouchControl.TYPE_NOT_SPLIT;
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 a8295031 Leszek Koltunski
import org.distorted.objectlib.main.InitData;
25 2dffaf22 Leszek Koltunski
import org.distorted.objectlib.main.ObjectSignatures;
26 c9c71c3f Leszek Koltunski
import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
27 8005e762 Leszek Koltunski
import org.distorted.objectlib.main.ObjectType;
28 198c5bf0 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectShape;
29 b31249d6 Leszek Koltunski
import org.distorted.objectlib.shape.ShapeTetrahedron;
30 29b82486 Leszek Koltunski
31
///////////////////////////////////////////////////////////////////////////////////////////////////
32
33 386af988 Leszek Koltunski
public class TwistyPyraminx extends ShapeTetrahedron
34 29b82486 Leszek Koltunski
{
35 b8519939 Leszek Koltunski
  public static final Static3D[] ROT_AXIS = new Static3D[]
36 29b82486 Leszek Koltunski
         {
37
           new Static3D(     0,-SQ3/3,-SQ6/3),
38 84a17011 Leszek Koltunski
           new Static3D(     0,-SQ3/3, SQ6/3),
39
           new Static3D( SQ6/3, SQ3/3,     0),
40
           new Static3D(-SQ6/3, SQ3/3,     0),
41 29b82486 Leszek Koltunski
         };
42
43 9ba7f3f6 Leszek Koltunski
  private int[][] mEdges;
44 beee90ab Leszek Koltunski
  private int[][] mBasicAngle;
45 29b82486 Leszek Koltunski
  private float[][] mCuts;
46
47
///////////////////////////////////////////////////////////////////////////////////////////////////
48
49 a8295031 Leszek Koltunski
  public TwistyPyraminx(InitData data, int meshState, int iconMode, Static4D quat, Static3D move, float scale, InputStream stream)
50 29b82486 Leszek Koltunski
    {
51 a8295031 Leszek Koltunski
    super(data, meshState, iconMode, data.getNumLayers()[0], quat, move, scale, stream);
52 29b82486 Leszek Koltunski
    }
53
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55 e649d99a Leszek Koltunski
// edge[i] is the state after moving layer i (0 is the largest)
56 29b82486 Leszek Koltunski
57 9ba7f3f6 Leszek Koltunski
  public int[][] getScrambleEdges()
58 29b82486 Leszek Koltunski
    {
59 9ba7f3f6 Leszek Koltunski
    if( mEdges==null )
60 29b82486 Leszek Koltunski
      {
61 e649d99a Leszek Koltunski
      int nL = getNumLayers()[0];
62
      mEdges = new int[nL][];
63
64
      for(int i=0; i<nL; i++)
65
        {
66
        int numEnabledMoves = 2*(nL-i);
67
        mEdges[i] = new int[4*2*numEnabledMoves];
68
69
        int index = 0;
70
        int startMove= 0;
71
        int offset = (i==nL-1 ? 2:0);  // if the last move was a tip, the only possible
72
                                       // next move is the second-to-largest layer.
73
        fillEdge(mEdges[i],index,startMove,offset,numEnabledMoves);
74
        index += (2*numEnabledMoves);
75
        startMove += (2*nL);
76
        fillEdge(mEdges[i],index,startMove,offset,numEnabledMoves);
77
        index += (2*numEnabledMoves);
78
        startMove += (2*nL);
79
        fillEdge(mEdges[i],index,startMove,offset,numEnabledMoves);
80
        index += (2*numEnabledMoves);
81
        startMove += (2*nL);
82
        fillEdge(mEdges[i],index,startMove,offset,numEnabledMoves);
83
        }
84 29b82486 Leszek Koltunski
      }
85
86 9ba7f3f6 Leszek Koltunski
    return mEdges;
87 29b82486 Leszek Koltunski
    }
88
89
///////////////////////////////////////////////////////////////////////////////////////////////////
90
91 e649d99a Leszek Koltunski
  private void fillEdge(int[] edge, int index, int move, int offset, int num)
92 29b82486 Leszek Koltunski
    {
93 e649d99a Leszek Koltunski
    for(int i=0; i<num; i++)
94 29b82486 Leszek Koltunski
      {
95 e649d99a Leszek Koltunski
      edge[index+2*i  ] = (move+offset);
96
      edge[index+2*i+1] = (i+offset)/2;
97
      move++;
98 29b82486 Leszek Koltunski
      }
99
    }
100
101
///////////////////////////////////////////////////////////////////////////////////////////////////
102
103
  private void addTetrahedralLattice(int size, int index, float[][] pos)
104
    {
105
    final float DX = 1.0f;
106
    final float DY = SQ2/2;
107
    final float DZ = 1.0f;
108
109
    float startX = 0.0f;
110
    float startY =-DY*(size-1)/2;
111
    float startZ = DZ*(size-1)/2;
112
113
    for(int layer=0; layer<size; layer++)
114
      {
115
      float currX = startX;
116
      float currY = startY;
117
118
      for(int x=0; x<layer+1; x++)
119
        {
120
        float currZ = startZ;
121
122
        for(int z=0; z<size-layer; z++)
123
          {
124
          pos[index] = new float[] {currX,currY,currZ};
125
          index++;
126
          currZ -= DZ;
127
          }
128
129
        currX += DX;
130
        }
131
132
      startX-=DX/2;
133
      startY+=DY;
134
      startZ-=DZ/2;
135
      }
136
    }
137
138
///////////////////////////////////////////////////////////////////////////////////////////////////
139
140 d0e6cf7f Leszek Koltunski
  private int getNumOctahedrons(int numLayers)
141 29b82486 Leszek Koltunski
    {
142 d0e6cf7f Leszek Koltunski
    return (numLayers-1)*numLayers*(numLayers+1)/6;
143
    }
144 29b82486 Leszek Koltunski
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146
147 7bbfc84f Leszek Koltunski
  public float[][] getCuts(int[] numLayers)
148 29b82486 Leszek Koltunski
    {
149
    if( mCuts==null )
150
      {
151 a57e6870 Leszek Koltunski
      int numL = numLayers[0];
152
      mCuts = new float[4][numL-1];
153 29b82486 Leszek Koltunski
154 a57e6870 Leszek Koltunski
      for(int i=0; i<numL-1; i++)
155 29b82486 Leszek Koltunski
        {
156 a57e6870 Leszek Koltunski
        float cut = (1.0f+i-numL/4.0f)*(SQ6/3);
157 29b82486 Leszek Koltunski
        mCuts[0][i] = cut;
158
        mCuts[1][i] = cut;
159
        mCuts[2][i] = cut;
160
        mCuts[3][i] = cut;
161
        }
162
      }
163
164
    return mCuts;
165
    }
166
167
///////////////////////////////////////////////////////////////////////////////////////////////////
168
169 59c20632 Leszek Koltunski
  public boolean[][] getLayerRotatable(int[] numLayers)
170 29b82486 Leszek Koltunski
    {
171 59c20632 Leszek Koltunski
    int numAxis = ROT_AXIS.length;
172
    boolean[][] layerRotatable = new boolean[numAxis][];
173 a57e6870 Leszek Koltunski
174 59c20632 Leszek Koltunski
    for(int i=0; i<numAxis; i++)
175
      {
176
      layerRotatable[i] = new boolean[numLayers[i]];
177
      for(int j=0; j<numLayers[i]; j++) layerRotatable[i][j] = true;
178 29b82486 Leszek Koltunski
      }
179 59c20632 Leszek Koltunski
180
    return layerRotatable;
181
    }
182
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184
185 11fa413d Leszek Koltunski
  public int getTouchControlType()
186 59c20632 Leszek Koltunski
    {
187 c9c71c3f Leszek Koltunski
    return TC_TETRAHEDRON;
188 59c20632 Leszek Koltunski
    }
189
190
///////////////////////////////////////////////////////////////////////////////////////////////////
191
192 11fa413d Leszek Koltunski
  public int getTouchControlSplit()
193 59c20632 Leszek Koltunski
    {
194
    return TYPE_NOT_SPLIT;
195
    }
196
197
///////////////////////////////////////////////////////////////////////////////////////////////////
198
199
  public int[][][] getEnabled()
200
    {
201
    return new int[][][] { {{1,2,3}},{{0,2,3}},{{0,1,3}},{{0,1,2}} };
202
    }
203
204
///////////////////////////////////////////////////////////////////////////////////////////////////
205
206
  public float[] getDist3D(int[] numLayers)
207
    {
208 4c9ca251 Leszek Koltunski
    return TouchControlTetrahedron.D3D;
209
    }
210
211
///////////////////////////////////////////////////////////////////////////////////////////////////
212
213
  public Static3D[] getFaceAxis()
214
    {
215
    return TouchControlTetrahedron.FACE_AXIS;
216 29b82486 Leszek Koltunski
    }
217
218
///////////////////////////////////////////////////////////////////////////////////////////////////
219 d0e6cf7f Leszek Koltunski
// there are (n^3-n)/6 octahedrons and ((n+1)^3 - (n+1))/6 tetrahedrons
220 29b82486 Leszek Koltunski
221 d0e6cf7f Leszek Koltunski
  public float[][] getCubitPositions(int[] numLayers)
222 29b82486 Leszek Koltunski
    {
223 d0e6cf7f Leszek Koltunski
    int numL = numLayers[0];
224
    int numOcta = (numL-1)*numL*(numL+1)/6;
225
    int numTetra= numL*(numL+1)*(numL+2)/6;
226
    float[][] ret = new float[numOcta+numTetra][];
227
228
    addTetrahedralLattice(numL-1,      0,ret);
229
    addTetrahedralLattice(numL  ,numOcta,ret);
230
231
    return ret;
232
    }
233
234
///////////////////////////////////////////////////////////////////////////////////////////////////
235
236
  public Static4D getCubitQuats(int cubit, int[] numLayers)
237
    {
238 802fe251 Leszek Koltunski
    return mObjectQuats[0];
239 29b82486 Leszek Koltunski
    }
240
241 84a17011 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
242
243
  private float[][] getVertices(int variant)
244
    {
245
    if( variant==0 )
246
      {
247
      return new float[][] { { 0.5f,0.0f,0.5f},{ 0.5f,0.0f,-0.5f},{-0.5f,0.0f,-0.5f},{-0.5f,0.0f,0.5f},{ 0.0f,SQ2/2,0.0f},{ 0.0f,-SQ2/2,0.0f} };
248
      }
249
    else
250
      {
251
      return new float[][] { {-0.5f, SQ2/4, 0.0f},{ 0.5f, SQ2/4, 0.0f},{ 0.0f,-SQ2/4, 0.5f},{ 0.0f,-SQ2/4,-0.5f} };
252
      }
253
    }
254
255 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
256
257 e30c522a Leszek Koltunski
  public ObjectShape getObjectShape(int variant)
258 29b82486 Leszek Koltunski
    {
259
    if( variant==0 )
260
      {
261 4e9f2df5 Leszek Koltunski
      int[][] indices   = { {3,0,4},{0,1,4},{1,2,4},{2,3,4},{5,0,3},{5,1,0},{5,2,1},{5,3,2} };
262 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
263 29b82486 Leszek Koltunski
      }
264
    else
265
      {
266 4e9f2df5 Leszek Koltunski
      int[][] indices   = { {2,1,0},{3,0,1},{3,2,0},{2,3,1} };
267 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
268 3ee1d662 Leszek Koltunski
      }
269
    }
270
271
///////////////////////////////////////////////////////////////////////////////////////////////////
272
273
  public ObjectFaceShape getObjectFaceShape(int variant)
274
    {
275
    int numL = getNumLayers()[0];
276 3bf19410 Leszek Koltunski
    float height = isInIconMode() ? 0.001f : 0.05f;
277 3ee1d662 Leszek Koltunski
278
    if( variant==0 )
279
      {
280
      int N = numL==3? 6 : 5;
281
      int E = numL==3? 2 : 1;
282 84a17011 Leszek Koltunski
      float[][] bands = { {height,20,0.5f,0.8f,N,E,E} };
283
      int[] indices   = { 0,0,0,0,0,0,0,0 };
284
      return new ObjectFaceShape(bands,indices,null);
285 3ee1d662 Leszek Koltunski
      }
286
    else
287
      {
288 a57e6870 Leszek Koltunski
      int N = numL==3? 6 : 5;
289
      int E = numL==3? 2 : 1;
290 84a17011 Leszek Koltunski
      float[][] bands = { {height,35,0.5f,0.8f,N,E,E} };
291
      int[] indices   = { 0,0,0,0 };
292
      return new ObjectFaceShape(bands,indices,null);
293
      }
294
    }
295
296
///////////////////////////////////////////////////////////////////////////////////////////////////
297
298
  public ObjectVertexEffects getVertexEffects(int variant)
299
    {
300
    if( variant==0 )
301
      {
302
      float[][] corners = { {0.04f,0.20f} };
303
      int[] indices     = { 0,0,0,0,0,0 };
304
      float[][] centers = { {0.0f, 0.0f, 0.0f} };
305
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
306
      }
307
    else
308
      {
309
      float[][] corners = { {0.06f,0.15f} };
310
      int[] indices     = { 0,0,0,0 };
311
      float[][] centers = { {0.0f, 0.0f, 0.0f} };
312
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
313 29b82486 Leszek Koltunski
      }
314
    }
315
316
///////////////////////////////////////////////////////////////////////////////////////////////////
317
318 e30c522a Leszek Koltunski
  public int getNumCubitVariants(int[] numLayers)
319 29b82486 Leszek Koltunski
    {
320
    return 2;
321
    }
322
323
///////////////////////////////////////////////////////////////////////////////////////////////////
324
325 e30c522a Leszek Koltunski
  public int getCubitVariant(int cubit, int[] numLayers)
326 29b82486 Leszek Koltunski
    {
327 a57e6870 Leszek Koltunski
    return cubit<getNumOctahedrons(numLayers[0]) ? 0:1;
328 29b82486 Leszek Koltunski
    }
329
330 053ffa02 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
331
332 d53fb890 Leszek Koltunski
  public float getStickerRadius()
333 053ffa02 Leszek Koltunski
    {
334 00f4980d Leszek Koltunski
    return 0.08f;
335 053ffa02 Leszek Koltunski
    }
336
337
///////////////////////////////////////////////////////////////////////////////////////////////////
338
339 d53fb890 Leszek Koltunski
  public float getStickerStroke()
340 053ffa02 Leszek Koltunski
    {
341
    float stroke = 0.08f;
342
343 3bf19410 Leszek Koltunski
    if( isInIconMode() )
344 053ffa02 Leszek Koltunski
      {
345
      int[] numLayers = getNumLayers();
346
347
      switch(numLayers[0])
348
        {
349
        case 2: stroke*=1.0f; break;
350
        case 3: stroke*=1.4f; break;
351
        case 4: stroke*=1.7f; break;
352
        default:stroke*=1.9f; break;
353 8592461c Leszek Koltunski
        }
354 053ffa02 Leszek Koltunski
      }
355 8592461c Leszek Koltunski
356 053ffa02 Leszek Koltunski
    return stroke;
357
    }
358
359 00f4980d Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
360
361 d53fb890 Leszek Koltunski
  public float[][] getStickerAngles()
362 00f4980d Leszek Koltunski
    {
363
    return null;
364
    }
365
366 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
367
// public API
368
369
  public Static3D[] getRotationAxis()
370
    {
371
    return ROT_AXIS;
372
    }
373
374
///////////////////////////////////////////////////////////////////////////////////////////////////
375
376 beee90ab Leszek Koltunski
  public int[][] getBasicAngles()
377 29b82486 Leszek Koltunski
    {
378 beee90ab Leszek Koltunski
    if( mBasicAngle ==null )
379
      {
380
      int num = getNumLayers()[0];
381
      int[] tmp = new int[num];
382
      for(int i=0; i<num; i++) tmp[i] = 3;
383
      mBasicAngle = new int[][] { tmp,tmp,tmp,tmp };
384
      }
385
386 29b82486 Leszek Koltunski
    return mBasicAngle;
387
    }
388
389 61aa85e4 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
390
391 5f54927b Leszek Koltunski
  public String getShortName()
392 61aa85e4 Leszek Koltunski
    {
393 5f54927b Leszek Koltunski
    switch(getNumLayers()[0])
394
      {
395
      case 3: return ObjectType.PYRA_3.name();
396
      case 4: return ObjectType.PYRA_4.name();
397
      case 5: return ObjectType.PYRA_5.name();
398
      }
399
400
    return ObjectType.PYRA_3.name();
401
    }
402
403
///////////////////////////////////////////////////////////////////////////////////////////////////
404
405 1d581993 Leszek Koltunski
  public ObjectSignature getSignature()
406 5f54927b Leszek Koltunski
    {
407
    switch(getNumLayers()[0])
408 61aa85e4 Leszek Koltunski
      {
409 2dffaf22 Leszek Koltunski
      case 3: return new ObjectSignature(ObjectSignatures.PYRA_3);
410
      case 4: return new ObjectSignature(ObjectSignatures.PYRA_4);
411
      case 5: return new ObjectSignature(ObjectSignatures.PYRA_5);
412 61aa85e4 Leszek Koltunski
      }
413
414 1d581993 Leszek Koltunski
    return null;
415 61aa85e4 Leszek Koltunski
    }
416
417 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
418
419 e26eb4e7 Leszek Koltunski
  public String getObjectName()
420 29b82486 Leszek Koltunski
    {
421 e26eb4e7 Leszek Koltunski
    switch(getNumLayers()[0])
422 29b82486 Leszek Koltunski
      {
423 e26eb4e7 Leszek Koltunski
      case 3: return "Pyraminx";
424
      case 4: return "Master Pyraminx";
425
      case 5: return "Professor's Pyraminx";
426 29b82486 Leszek Koltunski
      }
427 1d581993 Leszek Koltunski
    return null;
428 29b82486 Leszek Koltunski
    }
429
430
///////////////////////////////////////////////////////////////////////////////////////////////////
431
432 e26eb4e7 Leszek Koltunski
  public String getInventor()
433 29b82486 Leszek Koltunski
    {
434 e26eb4e7 Leszek Koltunski
    switch(getNumLayers()[0])
435 29b82486 Leszek Koltunski
      {
436 e26eb4e7 Leszek Koltunski
      case 3: return "Uwe Meffert";
437
      case 4: return "Katsuhiko Okamoto";
438
      case 5: return "Timur Evbatyrov";
439 29b82486 Leszek Koltunski
      }
440 1d581993 Leszek Koltunski
    return null;
441 29b82486 Leszek Koltunski
    }
442
443 59c20632 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
444
445 e26eb4e7 Leszek Koltunski
  public int getYearOfInvention()
446 59c20632 Leszek Koltunski
    {
447 e26eb4e7 Leszek Koltunski
    switch(getNumLayers()[0])
448 59c20632 Leszek Koltunski
      {
449
      case 3: return 1970;
450
      case 4: return 2002;
451
      case 5: return 2011;
452
      }
453
    return 1970;
454
    }
455
456 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
457
458 e26eb4e7 Leszek Koltunski
  public int getComplexity()
459 29b82486 Leszek Koltunski
    {
460 e26eb4e7 Leszek Koltunski
    switch(getNumLayers()[0])
461 29b82486 Leszek Koltunski
      {
462 b4223a92 Leszek Koltunski
      case 3: return 1;
463
      case 4: return 2;
464
      case 5: return 3;
465 29b82486 Leszek Koltunski
      }
466
    return 4;
467
    }
468 052e0362 Leszek Koltunski
469
///////////////////////////////////////////////////////////////////////////////////////////////////
470
471
  public String[][] getTutorials()
472
    {
473
    int[] numLayers = getNumLayers();
474
475
    switch(numLayers[0])
476
      {
477
      case 3: return new String[][] {
478
                          {"gb","xIQtn2qazvg","Pyraminx Layer By Layer","Z3"},
479
                          {"es","4cJJe9RAzAU","Resolver Pyraminx","Cuby"},
480
                          {"ru","F4_bhfWyVRQ","Как собрать ПИРАМИДКУ","Е Бондаренко"},
481
                          {"fr","Z2h1YI6jPes","Comment résoudre le Pyraminx","ValentinoCube"},
482
                          {"de","x_DMA8htJpY","Pyraminx lösen","Pezcraft"},
483
                          {"pl","uNpKpJfAa5I","Jak ułożyć: Pyraminx","DżoDżo"},
484
                          {"br","dtC0GNGyXqw","Como resolver o Pyraminx","Pedro Filho"},
485
                          {"kr","mO3excjvvoA","피라밍크스 맞추는 방법","iamzoone"},
486 a399e91b Leszek Koltunski
                          {"vn","p9LUWUW5iYg","Tutorial N.4 - Pyraminx","Duy Thích Rubik"},
487 052e0362 Leszek Koltunski
                    //    {"tw","YS3cDcP6Aro","金字塔方塊解法","1hrBLD"},
488
                         };
489
      case 4: return new String[][] {
490
                          {"gb","tGQDqDcSa6U","How to Solve the Master Pyraminx","Z3"},
491
                          {"es","74PIPm9-uPg","Resolver Master Pyraminx 4x4","Cuby"},
492
                          {"ru","-F_xJAwkobU","Как собрать Мастер Пираминкс"," Алексей Ярыгин"},
493
                          {"fr","F3gzBs7uvmw","Tuto: résoudre le Master Pyraminx","Spaghetti Cubing"},
494
                          {"de","3Q_bO7_FfAI","Master Pyraminx lösen","CubaroCubing"},
495
                          {"pl","EamwvhmHC7Q","4x4 (Master) Pyraminx PL","MrUk"},
496
                          {"br","cKql6YZ7yAg","Como resolver o Pyraminx 4x4 1/3","Rafael Cinoto"},
497
                          {"br","gtNQDPsN2Dg","Como resolver o Pyraminx 4x4 2/3","Rafael Cinoto"},
498
                          {"br","j8_-s4rd8mw","Como resolver o Pyraminx 4x4 3/3","Rafael Cinoto"},
499
                          {"kr","JlmBKaHESyY","마스터 피라밍크스 해법","주누후누"},
500 a399e91b Leszek Koltunski
                          {"vn","AMCll82WcJY","Tutorial N.13 - Master Pyraminx","Duy Thích Rubik"},
501 052e0362 Leszek Koltunski
                         };
502
      case 5: return new String[][] {
503
                          {"gb","2nsPEECDdN0","Professor Pyraminx Solve","RedKB"},
504
                          {"es","cSDj8OQK3TU","Tutorial del Professor Pyraminx","QBAndo"},
505
                          {"ru","gMp1tbDyDWg","Как собрать Professor Pyraminx","RBcuber"},
506
                          {"de","pCHx9bVMSgI","Professor Pyraminx Teil 1","Arvid Bollmann"},
507
                          {"de","iiNXJMVNmCM","Professor Pyraminx Teil 2","Arvid Bollmann"},
508
                          {"br","t2QJSSjNxPw","Resolver o Professor Pyraminx 1/4","Rafael Cinoto"},
509
                          {"br","mI6W6IFyVv0","Resolver o Professor Pyraminx 2/4","Rafael Cinoto"},
510
                          {"br","0HoOp6JlLSs","Resolver o Professor Pyraminx 3/4","Rafael Cinoto"},
511
                          {"br","Xg1jnCRsw_I","Resolver o Professor Pyraminx 4/4","Rafael Cinoto"},
512 a399e91b Leszek Koltunski
                          {"vn","OHwPqp3kQdE","Professor Pyraminx làm chậm","TRẦN QUANG HÙNG"},
513 052e0362 Leszek Koltunski
                         };
514
      }
515
    return null;
516
    }
517 29b82486 Leszek Koltunski
}