Project

General

Profile

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

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

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