Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / TwistyMinx.java @ 67b2d57b

1 a64e07d0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.objects;
21
22
import android.content.res.Resources;
23
24 5e06e92f Leszek Koltunski
import org.distorted.helpers.FactoryCubit;
25 a64e07d0 Leszek Koltunski
import org.distorted.library.main.DistortedEffects;
26
import org.distorted.library.main.DistortedTexture;
27 5e06e92f Leszek Koltunski
import org.distorted.library.mesh.MeshBase;
28 a64e07d0 Leszek Koltunski
import org.distorted.library.mesh.MeshSquare;
29
import org.distorted.library.type.Static3D;
30
import org.distorted.library.type.Static4D;
31
32
import java.util.Random;
33
34
///////////////////////////////////////////////////////////////////////////////////////////////////
35
36
abstract class TwistyMinx extends TwistyObject
37
{
38
  private static final int FACES_PER_CUBIT =6;
39
40 ead91342 Leszek Koltunski
  static final int NUM_CORNERS = 20;
41
  static final int NUM_CENTERS = 12;
42
  static final int NUM_EDGES   = 30;
43
44 bb11be2a Leszek Koltunski
  static final float C2       = (SQ5+3)/4;
45
  static final float LEN      = (float)(Math.sqrt(1.25f+0.5f*SQ5));
46
  static final float SIN54    = (SQ5+1)/4;
47
  static final float COS54    = (float)(Math.sqrt(10-2*SQ5)/4);
48
  static final float SIN18    = (SQ5-1)/4;
49
  static final float COS18    = (float)(0.25f*Math.sqrt(10.0f+2.0f*SQ5));
50
  static final float COS_HALFD= (float)(Math.sqrt(0.5f-0.1f*SQ5)); // cos(half the dihedral angle)
51
  static final float SIN_HALFD= (float)(Math.sqrt(0.5f+0.1f*SQ5)); // sin(half the dihedral angle)
52 a64e07d0 Leszek Koltunski
53
  // the six rotation axis of a Minx. Must be normalized.
54
  static final Static3D[] ROT_AXIS = new Static3D[]
55
         {
56 bb11be2a Leszek Koltunski
           new Static3D(    C2/LEN, SIN54/LEN,    0      ),
57
           new Static3D(   -C2/LEN, SIN54/LEN,    0      ),
58
           new Static3D( 0        ,    C2/LEN, SIN54/LEN ),
59
           new Static3D( 0        ,   -C2/LEN, SIN54/LEN ),
60
           new Static3D( SIN54/LEN,    0     ,    C2/LEN ),
61
           new Static3D( SIN54/LEN,    0     ,   -C2/LEN )
62 a64e07d0 Leszek Koltunski
         };
63
64
  private static final int MINX_LGREEN = 0xff53aa00;
65
  private static final int MINX_PINK   = 0xfffd7ab7;
66
  private static final int MINX_SANDY  = 0xffefd48b;
67
  private static final int MINX_LBLUE  = 0xff00a2d7;
68
  private static final int MINX_ORANGE = 0xffff6200;
69
  private static final int MINX_VIOLET = 0xff7d59a4;
70
  private static final int MINX_DGREEN = 0xff007a47;
71
  private static final int MINX_DRED   = 0xffbd0000;
72
  private static final int MINX_DBLUE  = 0xff1a29b2;
73
  private static final int MINX_DYELLOW= 0xffffc400;
74
  private static final int MINX_WHITE  = 0xffffffff;
75
  private static final int MINX_GREY   = 0xff727c7b;
76
77
  static final int[] FACE_COLORS = new int[]
78
         {
79
           MINX_LGREEN, MINX_PINK   , MINX_SANDY , MINX_LBLUE,
80
           MINX_ORANGE, MINX_VIOLET , MINX_DGREEN, MINX_DRED ,
81
           MINX_DBLUE , MINX_DYELLOW, MINX_WHITE , MINX_GREY
82
         };
83
84
  // All 60 legal rotation quats of a Minx
85
  static final Static4D[] QUATS = new Static4D[]
86
         {
87 7a606778 Leszek Koltunski
           new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),  //0
88 a64e07d0 Leszek Koltunski
           new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
89
           new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
90
           new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
91
92 7a606778 Leszek Koltunski
           new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),  //4
93 a64e07d0 Leszek Koltunski
           new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
94
           new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
95
           new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
96
           new Static4D( -0.5f,  0.5f,  0.5f,  0.5f ),
97
           new Static4D( -0.5f,  0.5f, -0.5f,  0.5f ),
98
           new Static4D( -0.5f, -0.5f,  0.5f,  0.5f ),
99
           new Static4D( -0.5f, -0.5f, -0.5f,  0.5f ),
100
101 bb11be2a Leszek Koltunski
           new Static4D(  0.5f, SIN54, SIN18,  0.0f ), // 12
102
           new Static4D(  0.5f, SIN54,-SIN18,  0.0f ),
103
           new Static4D(  0.5f,-SIN54, SIN18,  0.0f ),
104
           new Static4D(  0.5f,-SIN54,-SIN18,  0.0f ),
105
           new Static4D( SIN18,  0.5f, SIN54,  0.0f ),
106
           new Static4D( SIN18,  0.5f,-SIN54,  0.0f ),
107
           new Static4D(-SIN18,  0.5f, SIN54,  0.0f ),
108
           new Static4D(-SIN18,  0.5f,-SIN54,  0.0f ),
109
           new Static4D( SIN54, SIN18,  0.5f,  0.0f ),
110
           new Static4D( SIN54,-SIN18,  0.5f,  0.0f ),
111
           new Static4D(-SIN54, SIN18,  0.5f,  0.0f ),
112
           new Static4D(-SIN54,-SIN18,  0.5f,  0.0f ),
113
114
           new Static4D(  0.0f, SIN18, SIN54,  0.5f ), //24
115
           new Static4D(  0.0f, SIN18,-SIN54,  0.5f ),
116
           new Static4D(  0.0f,-SIN18, SIN54,  0.5f ),
117
           new Static4D(  0.0f,-SIN18,-SIN54,  0.5f ),
118
           new Static4D( SIN18, SIN54,  0.0f,  0.5f ),
119
           new Static4D( SIN18,-SIN54,  0.0f,  0.5f ),
120
           new Static4D(-SIN18, SIN54,  0.0f,  0.5f ),
121
           new Static4D(-SIN18,-SIN54,  0.0f,  0.5f ),
122
           new Static4D( SIN54,  0.0f, SIN18,  0.5f ),
123
           new Static4D( SIN54,  0.0f,-SIN18,  0.5f ),
124
           new Static4D(-SIN54,  0.0f, SIN18,  0.5f ),
125
           new Static4D(-SIN54,  0.0f,-SIN18,  0.5f ),
126
127
           new Static4D(  0.0f, SIN54,  0.5f, SIN18 ), //36
128
           new Static4D(  0.0f, SIN54, -0.5f, SIN18 ),
129
           new Static4D(  0.0f,-SIN54,  0.5f, SIN18 ),
130
           new Static4D(  0.0f,-SIN54, -0.5f, SIN18 ),
131
           new Static4D(  0.5f,  0.0f, SIN54, SIN18 ),
132
           new Static4D(  0.5f,  0.0f,-SIN54, SIN18 ),
133
           new Static4D( -0.5f,  0.0f, SIN54, SIN18 ),
134
           new Static4D( -0.5f,  0.0f,-SIN54, SIN18 ),
135
           new Static4D( SIN54,  0.5f,  0.0f, SIN18 ),
136
           new Static4D( SIN54, -0.5f,  0.0f, SIN18 ),
137
           new Static4D(-SIN54,  0.5f,  0.0f, SIN18 ),
138
           new Static4D(-SIN54, -0.5f,  0.0f, SIN18 ),
139
140
           new Static4D(  0.0f,  0.5f, SIN18, SIN54 ), //48
141
           new Static4D(  0.0f,  0.5f,-SIN18, SIN54 ),
142
           new Static4D(  0.0f, -0.5f, SIN18, SIN54 ),
143
           new Static4D(  0.0f, -0.5f,-SIN18, SIN54 ),
144
           new Static4D(  0.5f, SIN18,  0.0f, SIN54 ),
145
           new Static4D(  0.5f,-SIN18,  0.0f, SIN54 ),
146
           new Static4D( -0.5f, SIN18,  0.0f, SIN54 ),
147
           new Static4D( -0.5f,-SIN18,  0.0f, SIN54 ),
148
           new Static4D( SIN18,  0.0f,  0.5f, SIN54 ),
149
           new Static4D( SIN18,  0.0f, -0.5f, SIN54 ),
150
           new Static4D(-SIN18,  0.0f,  0.5f, SIN54 ),
151
           new Static4D(-SIN18,  0.0f, -0.5f, SIN54 ),
152 a64e07d0 Leszek Koltunski
         };
153
154
  // Coordinates of all 20 corners of a Minx
155 e6cf7283 Leszek Koltunski
  static final float[][] CORNERS = new float[][]
156 a64e07d0 Leszek Koltunski
         {
157 bb11be2a Leszek Koltunski
             {  0.0f,  0.5f,    C2},
158
             {  0.0f,  0.5f,   -C2},
159
             {  0.0f, -0.5f,    C2},
160
             {  0.0f, -0.5f,   -C2},
161
             {    C2,  0.0f,  0.5f},
162
             {    C2,  0.0f, -0.5f},
163
             {   -C2,  0.0f,  0.5f},
164
             {   -C2,  0.0f, -0.5f},
165
             {  0.5f,    C2,  0.0f},
166
             {  0.5f,   -C2,  0.0f},
167
             { -0.5f,    C2,  0.0f},
168
             { -0.5f,   -C2,  0.0f},
169
             { SIN54, SIN54, SIN54},
170
             { SIN54, SIN54,-SIN54},
171
             { SIN54,-SIN54, SIN54},
172
             { SIN54,-SIN54,-SIN54},
173
             {-SIN54, SIN54, SIN54},
174
             {-SIN54, SIN54,-SIN54},
175
             {-SIN54,-SIN54, SIN54},
176
             {-SIN54,-SIN54,-SIN54},
177 a64e07d0 Leszek Koltunski
         };
178
179
  static final int[][] mCornerFaceMap =
180
         {
181
           {  0, 1, 8 },
182
           {  6, 5,10 },
183
           {  1, 0,11 },
184
           {  5, 6, 3 },
185
           {  0, 9, 4 },
186
           {  5, 4, 9 },
187
           {  7, 1, 2 },
188
           {  2, 6, 7 },
189
           { 10, 9, 8 },
190
           {  4, 3,11 },
191
           {  7,10, 8 },
192
           {  3, 2,11 },
193
           {  0, 8, 9 },
194
           {  9,10, 5 },
195
           {  0, 4,11 },
196
           {  4, 5, 3 },
197
           {  1, 7, 8 },
198
           {  7, 6,10 },
199
           {  2, 1,11 },
200
           {  6, 2, 3 },
201
         };
202
203 7764a67a Leszek Koltunski
  static final int[] QUAT_EDGE_INDICES =
204
      {
205 7a606778 Leszek Koltunski
        56, 40, 43, 59,  0, 19,  9, 54, 58, 49,
206
        48, 24, 52,  4, 16, 32, 20, 11, 21, 35 ,
207
        37, 30,  8, 28, 36, 44,  1, 46, 12, 47
208 7764a67a Leszek Koltunski
      };
209
210
211 e4bf4d02 Leszek Koltunski
  static final int[] QUAT_CORNER_INDICES =
212
      {
213 d38f1397 Leszek Koltunski
         0,  2,  3,  1, 40, 31, 41, 30, 39, 35,
214
        36, 34, 56, 32, 43, 21, 48, 28, 42, 23
215
      };
216
217 f2d04089 Leszek Koltunski
  static final boolean[][] OPPOSITE_ROWS =
218
      {
219
          {false,  true, false,  true, false, false},
220
          { true, false, false,  true,  true,  true},
221
          {false, false, false,  true, false,  true},
222
          { true,  true,  true, false, false,  true},
223
          {false,  true, false, false, false,  true},
224
          {false,  true,  true,  true,  true, false}
225
      };
226
227 16f34a98 Leszek Koltunski
  // the quadruple ( corner1, corner2, face1, face2 ) defining an edge.
228
  // In fact the 2 corners already define it, the faces only provide easy
229 ead91342 Leszek Koltunski
  // way to get to know the colors. Order: arbitrary. Face1 arbitrarily on
230 16f34a98 Leszek Koltunski
  // the 'left' or right of vector corner1 --> corner2, according to Quat.
231 ead91342 Leszek Koltunski
  static final int[][] mEdgeMap =
232
         {
233 7a606778 Leszek Koltunski
           {  0, 12,  0,  8}, //0
234 ead91342 Leszek Koltunski
           { 12,  4,  0,  9},
235
           {  4, 14,  0,  4},
236
           { 14,  2,  0, 11},
237
           {  2,  0,  0,  1},
238 7a606778 Leszek Koltunski
           { 14,  9, 11,  4}, //5
239
           {  9, 11, 11,  3},
240
           { 11, 18, 11,  2},
241
           { 18,  2, 11,  1},
242 ead91342 Leszek Koltunski
           { 18,  6,  1,  2},
243 7a606778 Leszek Koltunski
           {  6, 16,  1,  7}, //10
244
           { 16,  0,  1,  8},
245
           { 16, 10,  8,  7},
246
           { 10,  8,  8, 10},
247
           {  8, 12,  8,  9},
248
           {  8, 13,  9, 10}, //15
249 ead91342 Leszek Koltunski
           { 13,  5,  9,  5},
250
           {  5,  4,  9,  4},
251 7a606778 Leszek Koltunski
           {  5, 15,  4,  5},
252
           { 15,  9,  4,  3},
253
           { 11, 19,  2,  3}, //20
254 ead91342 Leszek Koltunski
           { 19,  7,  2,  6},
255
           {  7,  6,  2,  7},
256
           {  7, 17,  7,  6},
257
           { 17, 10,  7, 10},
258 7a606778 Leszek Koltunski
           { 17,  1, 10,  6}, //25
259 ead91342 Leszek Koltunski
           {  1,  3,  5,  6},
260
           {  3, 19,  3,  6},
261
           {  1, 13, 10,  5},
262 7a606778 Leszek Koltunski
           {  3, 15,  5,  3},
263 ead91342 Leszek Koltunski
         };
264
265
  // the five vertices that form a given face. Order: the same as colors
266
  // of the faces in TwistyMinx.
267
  static final int[][] mCenterMap =
268
         {
269
           { 0, 12,  4, 14,  2},
270
           { 0,  2, 18,  6, 16},
271
           { 6, 18, 11, 19,  7},
272
           { 3, 15,  9, 11, 19},
273
           { 4,  5, 15,  9, 14},
274
           { 1, 13,  5, 15,  3},
275
           { 1,  3, 19,  7, 17},
276
           {10, 16,  6,  7, 17},
277
           { 0, 12,  8, 10, 16},
278
           { 8, 13,  5,  4, 12},
279
           { 1, 13,  8, 10, 17},
280
           { 2, 14,  9, 11, 18},
281
         };
282
283
  static final float[][] mCenterCoords = new float[NUM_CENTERS][3];
284
285
  static
286
    {
287
    for(int center=0; center<NUM_CENTERS; center++)
288
      {
289
      int[] map = mCenterMap[center];
290
291
      float x = CORNERS[map[0]][0] +
292
                CORNERS[map[1]][0] +
293
                CORNERS[map[2]][0] +
294
                CORNERS[map[3]][0] +
295
                CORNERS[map[4]][0] ;
296
297
      float y = CORNERS[map[0]][1] +
298
                CORNERS[map[1]][1] +
299
                CORNERS[map[2]][1] +
300
                CORNERS[map[3]][1] +
301
                CORNERS[map[4]][1] ;
302
303
      float z = CORNERS[map[0]][2] +
304
                CORNERS[map[1]][2] +
305
                CORNERS[map[2]][2] +
306
                CORNERS[map[3]][2] +
307
                CORNERS[map[4]][2] ;
308
309
      mCenterCoords[center][0] = x/5;
310
      mCenterCoords[center][1] = y/5;
311
      mCenterCoords[center][2] = z/5;
312
      }
313
    }
314
315
  static final Static4D[] mBasicCornerV, mCurrCornerV;
316
317
  static
318
    {
319
    mBasicCornerV = new Static4D[3];
320
    mCurrCornerV  = new Static4D[3];
321
322
    mBasicCornerV[0] = new Static4D( (SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
323
    mBasicCornerV[1] = new Static4D(-(SQ5+1)*0.125f, (SQ5-1)*0.125f, -0.250f, 0.0f );
324
    mBasicCornerV[2] = new Static4D(              0,        -0.500f,    0.0f, 0.0f );
325
    }
326
327
328 a64e07d0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
329
330
  TwistyMinx(int numLayers, int realSize, Static4D quat, DistortedTexture texture, MeshSquare mesh,
331
             DistortedEffects effects, int[][] moves, ObjectList obj, Resources res, int scrWidth)
332
    {
333 db875721 Leszek Koltunski
    super(numLayers, realSize, quat, texture, mesh, effects, moves, obj, res, scrWidth);
334 a64e07d0 Leszek Koltunski
    }
335
336
///////////////////////////////////////////////////////////////////////////////////////////////////
337
338
  Static4D[] getQuats()
339
    {
340
    return QUATS;
341
    }
342
343
///////////////////////////////////////////////////////////////////////////////////////////////////
344
345
  int getNumFaces()
346
    {
347
    return FACE_COLORS.length;
348
    }
349
350
///////////////////////////////////////////////////////////////////////////////////////////////////
351
352
  boolean shouldResetTextureMaps()
353
    {
354
    return false;
355
    }
356
357
///////////////////////////////////////////////////////////////////////////////////////////////////
358
359
  int getNumCubitFaces()
360
    {
361
    return FACES_PER_CUBIT;
362
    }
363
364
///////////////////////////////////////////////////////////////////////////////////////////////////
365
366
  float returnMultiplier()
367
    {
368
    return 2.0f;
369
    }
370
371
///////////////////////////////////////////////////////////////////////////////////////////////////
372
373
  float[] getRowChances(int numLayers)
374
    {
375
    float[] chances = new float[numLayers];
376
    float denom = (float)(numLayers-1);
377
    int change  = (numLayers-1)/2;
378
379
    for(int i=     0; i<change   ; i++) chances[i] = (i+1)/denom;
380
    for(int i=change; i<numLayers; i++) chances[i] = (i  )/denom;
381
382
    return chances;
383
    }
384
385 5e06e92f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
386
387
  MeshBase createCornerMesh(int numLayers, float width)
388
    {
389
    float A = (2*SQ3/3)*SIN54;
390
    float B = 0.4f;
391
    int   N = numLayers==3 ? 5 : 3;
392 67b2d57b Leszek Koltunski
    int   E1= numLayers==3 ? 1 : 0;
393
    int   E2= numLayers==3 ? 3 : 0;
394 5e06e92f Leszek Koltunski
395
    double X = width*COS18*SIN_HALFD;
396
    double Y = width*SIN18;
397
    double Z = width*COS18*COS_HALFD;
398
399
    double[][] vertices = new double[][]
400
        {
401
            { 0.0, 0.0      , 0.0 },
402
            {   X,   Y      ,  -Z },
403
            { 0.0, 2*Y      ,-2*Z },
404
            {  -X,   Y      ,  -Z },
405
            { 0.0, 0.0-width, 0.0 },
406
            {   X,   Y-width,  -Z },
407
            { 0.0, 2*Y-width,-2*Z },
408
            {  -X,   Y-width,  -Z },
409
        };
410
411
    int[][] vertIndexes = new int[][]
412
        {
413
            {4,5,1,0},
414
            {7,4,0,3},
415
            {0,1,2,3},
416
            {4,5,6,7},
417
            {6,5,1,2},
418
            {7,6,2,3}
419
        };
420
421
    float[][] bands     = new float[][]
422
      {
423 67b2d57b Leszek Koltunski
         {0.04f,34,0.3f,0.2f, N, 1, E1},
424
         {0.00f, 0,0.0f,0.0f, 2, 1, E2}
425 5e06e92f Leszek Koltunski
      };
426
    int[] bandIndexes   = new int[] { 0,0,0,1,1,1};
427
    float[][] corners   = new float[][] { {0.04f,0.10f} };
428
    int[] cornerIndexes = new int[] { 0,-1,-1,-1,-1,-1,-1,-1 };
429
    float[][] centers   = new float[][] { {0.0f, -(float)Math.sqrt(1-A*A)*B,-A*B} };
430
    int[] centerIndexes = new int[] { 0,-1,-1,-1,-1,-1,-1,-1 };
431
432
    FactoryCubit factory = FactoryCubit.getInstance();
433
    factory.createNewFaceTransform(vertices,vertIndexes);
434
435
    return factory.createRoundedSolid(vertices, vertIndexes,
436
                                      bands, bandIndexes,
437
                                      corners, cornerIndexes,
438
                                      centers, centerIndexes,
439
                                      getNumCubitFaces() );
440
    }
441
442 a64e07d0 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
443
// PUBLIC API
444
445
  public Static3D[] getRotationAxis()
446
    {
447
    return ROT_AXIS;
448
    }
449
450
///////////////////////////////////////////////////////////////////////////////////////////////////
451
452
  public int getBasicAngle()
453
    {
454
    return 5;
455
    }
456
457
///////////////////////////////////////////////////////////////////////////////////////////////////
458
459 5043d5d0 Leszek Koltunski
  public void randomizeNewScramble(int[][] scramble, Random rnd, int num)
460 a64e07d0 Leszek Koltunski
    {
461 5043d5d0 Leszek Koltunski
    if( num==0 )
462 a64e07d0 Leszek Koltunski
      {
463 5043d5d0 Leszek Koltunski
      scramble[num][0] = rnd.nextInt(ROTATION_AXIS.length);
464 a64e07d0 Leszek Koltunski
      }
465
    else
466
      {
467 bbc6471c Leszek Koltunski
      int newVector = rnd.nextInt(ROTATION_AXIS.length-1);
468 5043d5d0 Leszek Koltunski
      scramble[num][0] = (newVector>=scramble[num-1][0] ? newVector+1 : newVector);
469 a64e07d0 Leszek Koltunski
      }
470
471 5043d5d0 Leszek Koltunski
    if( num==0 )
472 f2d04089 Leszek Koltunski
      {
473
      float rowFloat = rnd.nextFloat();
474 a64e07d0 Leszek Koltunski
475 f2d04089 Leszek Koltunski
      for(int row=0; row<mRowChances.length; row++)
476
        {
477 bbc6471c Leszek Koltunski
        if( rowFloat<=mRowChances[row] )
478
          {
479 5043d5d0 Leszek Koltunski
          scramble[num][1] = row;
480 bbc6471c Leszek Koltunski
          break;
481
          }
482 f2d04089 Leszek Koltunski
        }
483
      }
484
    else
485 a64e07d0 Leszek Koltunski
      {
486 f2d04089 Leszek Koltunski
      int size = mRowChances.length;
487 5043d5d0 Leszek Koltunski
      int nom = (size-1)/2;
488
      int row = rnd.nextInt(nom);
489
      boolean opposite = OPPOSITE_ROWS[scramble[num-1][0]][scramble[num][0]];
490
      boolean low = opposite^(scramble[num-1][1]<nom);
491
      scramble[num][1] = low ? row : size-1-row;
492 a64e07d0 Leszek Koltunski
      }
493 bbc6471c Leszek Koltunski
494 5043d5d0 Leszek Koltunski
    switch( rnd.nextInt(4) )
495
      {
496
      case 0: scramble[num][2] = -2; break;
497
      case 1: scramble[num][2] = -1; break;
498
      case 2: scramble[num][2] =  1; break;
499
      case 3: scramble[num][2] =  2; break;
500
      }
501 a64e07d0 Leszek Koltunski
    }
502
503
///////////////////////////////////////////////////////////////////////////////////////////////////
504
// only needed for solvers - there are no Minx solvers ATM)
505
506
  public String retObjectString()
507
    {
508
    return "";
509
    }
510
}