Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / objects / TwistyMixup.java @ 2f7b42cf

1
///////////////////////////////////////////////////////////////////////////////////////////////////
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
import org.distorted.library.type.Static3D;
23
import org.distorted.library.type.Static4D;
24
import org.distorted.objectlib.helpers.ObjectFaceShape;
25
import org.distorted.objectlib.helpers.ObjectShape;
26
import org.distorted.objectlib.helpers.ObjectSignature;
27
import org.distorted.objectlib.main.ObjectType;
28
import org.distorted.objectlib.main.ShapeHexahedron;
29
import org.distorted.objectlib.scrambling.ScrambleState;
30
import org.distorted.objectlib.touchcontrol.TouchControlHexahedron;
31

    
32
import java.io.InputStream;
33

    
34
import static org.distorted.objectlib.touchcontrol.TouchControl.TC_HEXAHEDRON;
35
import static org.distorted.objectlib.touchcontrol.TouchControl.TYPE_NOT_SPLIT;
36

    
37
///////////////////////////////////////////////////////////////////////////////////////////////////
38

    
39
public class TwistyMixup extends ShapeHexahedron
40
{
41
  static final Static3D[] ROT_AXIS = new Static3D[]
42
         {
43
           new Static3D(1,0,0),
44
           new Static3D(0,1,0),
45
           new Static3D(0,0,1)
46
         };
47

    
48
  private ScrambleState[] mStates;
49
  private int[][] mBasicAngle;
50
  private float[][] mCuts;
51
  private float[][] mPosition;
52
  private int[] mQuatIndex;
53

    
54
///////////////////////////////////////////////////////////////////////////////////////////////////
55

    
56
  public TwistyMixup(int[] numL, int meshState, int iconMode, Static4D quat, Static3D move, float scale, InputStream stream)
57
    {
58
    super(numL, meshState, iconMode, numL[0], quat, move, scale, stream);
59
    }
60

    
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62
// We need to explicitly provide the quaternions because here they do not even make a group!
63
// (we can move the front center by X and Y [ X=(1,0,0)45deg, Y=(0,1,0)45deg ] but not by XY)
64

    
65
  @Override
66
  public Static4D[] getQuats()
67
    {
68
    return new Static4D[]
69
      {
70
      new Static4D ( 0.00000000f, 0.00000000f, 0.00000000f, 1.00000000f), // 0
71
      new Static4D ( 0.00000000f, 0.00000000f, 1.00000000f, 0.00000000f), // 1
72
      new Static4D ( 0.00000000f, 1.00000000f, 0.00000000f, 0.00000000f), // 2
73
      new Static4D ( 1.00000000f, 0.00000000f, 0.00000000f, 0.00000000f), // 3
74

    
75
      new Static4D ( 0.00000000f, 0.00000000f, 0.70710677f, 0.70710677f), // 4
76
      new Static4D ( 0.00000000f, 0.00000000f, 0.70710677f,-0.70710677f), // 5
77
      new Static4D ( 0.00000000f, 0.70710677f, 0.00000000f, 0.70710677f), // 6
78
      new Static4D ( 0.00000000f, 0.70710677f, 0.00000000f,-0.70710677f), // 7
79
      new Static4D ( 0.00000000f, 0.70710677f,-0.70710677f, 0.00000000f), // 8
80
      new Static4D ( 0.00000000f, 0.70710677f, 0.70710677f, 0.00000000f),
81
      new Static4D ( 0.70710677f, 0.00000000f, 0.00000000f, 0.70710677f), // 10
82
      new Static4D ( 0.70710677f, 0.00000000f, 0.00000000f,-0.70710677f), // 11
83
      new Static4D ( 0.70710677f, 0.00000000f, 0.70710677f, 0.00000000f), // 12
84
      new Static4D ( 0.70710677f, 0.00000000f,-0.70710677f, 0.00000000f), // 13
85
      new Static4D ( 0.70710677f,-0.70710677f, 0.00000000f, 0.00000000f),
86
      new Static4D ( 0.70710677f, 0.70710677f, 0.00000000f, 0.00000000f),
87

    
88
      new Static4D ( 0.50000000f, 0.50000000f, 0.50000000f, 0.50000000f),
89
      new Static4D ( 0.50000000f, 0.50000000f, 0.50000000f,-0.50000000f),
90
      new Static4D ( 0.50000000f, 0.50000000f,-0.50000000f, 0.50000000f), // 18
91
      new Static4D ( 0.50000000f, 0.50000000f,-0.50000000f,-0.50000000f),
92
      new Static4D ( 0.50000000f,-0.50000000f, 0.50000000f, 0.50000000f), // 20
93
      new Static4D ( 0.50000000f,-0.50000000f, 0.50000000f,-0.50000000f),
94
      new Static4D ( 0.50000000f,-0.50000000f,-0.50000000f, 0.50000000f),
95
      new Static4D ( 0.50000000f,-0.50000000f,-0.50000000f,-0.50000000f),
96

    
97
// 24 quats ( 0,0, 0.3826, 0.9238 )
98

    
99
      new Static4D ( 0.00000000f, 0.00000000f, 0.38268343f, 0.92387950f),
100
      new Static4D ( 0.00000000f, 0.00000000f, 0.38268343f,-0.92387950f),
101
      new Static4D ( 0.00000000f, 0.00000000f, 0.92387950f, 0.38268343f),
102
      new Static4D ( 0.00000000f, 0.00000000f, 0.92387950f,-0.38268343f),
103
      new Static4D ( 0.00000000f, 0.38268346f, 0.00000000f, 0.92387950f),
104
      new Static4D ( 0.00000000f, 0.38268328f, 0.00000000f,-0.92387962f),
105
      new Static4D ( 0.00000000f,-0.38268328f,-0.92387962f, 0.00000000f),
106
      new Static4D ( 0.00000000f,-0.38268346f, 0.92387950f, 0.00000000f),
107
      new Static4D ( 0.00000000f, 0.92387950f, 0.00000000f, 0.38268343f),
108
      new Static4D ( 0.00000000f, 0.92387950f, 0.00000000f,-0.38268352f),
109
      new Static4D ( 0.00000000f,-0.92387950f,-0.38268352f, 0.00000000f),
110
      new Static4D ( 0.00000000f,-0.92387950f, 0.38268343f, 0.00000000f),
111
      new Static4D ( 0.38268346f, 0.00000000f, 0.00000000f, 0.92387950f),
112
      new Static4D ( 0.38268328f, 0.00000000f, 0.00000000f,-0.92387962f),
113
      new Static4D ( 0.38268328f, 0.00000000f,-0.92387962f, 0.00000000f),
114
      new Static4D ( 0.38268346f, 0.00000000f, 0.92387950f, 0.00000000f),
115
      new Static4D ( 0.38268325f,-0.92387950f, 0.00000000f, 0.00000000f),
116
      new Static4D ( 0.38268325f, 0.92387950f, 0.00000000f, 0.00000000f),
117
      new Static4D ( 0.92387950f, 0.00000000f, 0.00000000f,-0.38268352f),
118
      new Static4D ( 0.92387950f, 0.00000000f, 0.00000000f, 0.38268343f),
119
      new Static4D ( 0.92387950f, 0.00000000f, 0.38268343f, 0.00000000f),
120
      new Static4D ( 0.92387950f, 0.00000000f,-0.38268352f, 0.00000000f),
121
      new Static4D ( 0.92387950f, 0.38268343f, 0.00000000f, 0.00000000f),
122
      new Static4D ( 0.92387950f,-0.38268343f, 0.00000000f, 0.00000000f),
123

    
124
// 48 quats ( 0.2705, 0.2705, 0.6532, 0.6532 )
125

    
126
      new Static4D ( 0.27059805f, 0.27059805f, 0.65328145f, 0.65328145f),
127
      new Static4D ( 0.27059793f, 0.27059793f,-0.65328151f,-0.65328151f),
128
      new Static4D ( 0.27059805f, 0.27059805f,-0.65328145f, 0.65328145f),
129
      new Static4D ( 0.27059793f, 0.27059793f, 0.65328151f,-0.65328151f),
130
      new Static4D ( 0.27059805f,-0.27059805f, 0.65328145f,-0.65328145f),
131
      new Static4D ( 0.27059793f,-0.27059793f,-0.65328151f, 0.65328151f),
132
      new Static4D ( 0.27059805f,-0.27059805f, 0.65328145f, 0.65328145f),
133
      new Static4D ( 0.27059793f,-0.27059793f,-0.65328151f,-0.65328151f),
134
      new Static4D ( 0.27059808f, 0.65328145f, 0.27059802f,-0.65328145f),
135
      new Static4D ( 0.27059799f, 0.65328145f, 0.27059799f, 0.65328145f),
136
      new Static4D ( 0.27059802f, 0.65328145f,-0.27059802f,-0.65328145f),
137
      new Static4D ( 0.27059793f, 0.65328151f,-0.27059793f, 0.65328151f),
138
      new Static4D ( 0.27059799f, 0.65328145f, 0.65328145f, 0.27059799f),
139
      new Static4D ( 0.27059799f, 0.65328145f, 0.65328145f,-0.27059799f),
140
      new Static4D ( 0.27059808f, 0.65328145f,-0.65328145f, 0.27059808f),
141
      new Static4D ( 0.27059796f, 0.65328145f,-0.65328145f,-0.27059796f),
142
      new Static4D ( 0.27059808f,-0.65328145f, 0.27059814f, 0.65328145f),
143
      new Static4D ( 0.27059799f,-0.65328145f, 0.27059799f,-0.65328145f),
144
      new Static4D ( 0.27059805f,-0.65328145f,-0.27059805f,-0.65328145f),
145
      new Static4D ( 0.27059799f,-0.65328145f,-0.27059799f, 0.65328145f),
146
      new Static4D ( 0.27059814f,-0.65328145f, 0.65328145f,-0.27059814f),
147
      new Static4D ( 0.27059799f,-0.65328145f, 0.65328145f, 0.27059799f),
148
      new Static4D ( 0.27059799f,-0.65328145f,-0.65328145f,-0.27059799f),
149
      new Static4D ( 0.27059799f,-0.65328145f,-0.65328145f, 0.27059799f),
150
      new Static4D ( 0.65328145f, 0.27059814f, 0.27059814f, 0.65328145f),
151
      new Static4D ( 0.65328145f, 0.27059799f, 0.27059799f,-0.65328145f),
152
      new Static4D ( 0.65328145f, 0.27059799f,-0.27059799f,-0.65328145f),
153
      new Static4D ( 0.65328145f, 0.27059799f,-0.27059799f, 0.65328145f),
154
      new Static4D ( 0.65328145f, 0.27059802f, 0.65328145f,-0.27059808f),
155
      new Static4D ( 0.65328145f, 0.27059802f, 0.65328145f, 0.27059802f),
156
      new Static4D ( 0.65328145f, 0.27059811f,-0.65328145f, 0.27059811f),
157
      new Static4D ( 0.65328145f, 0.27059802f,-0.65328145f,-0.27059802f),
158
      new Static4D ( 0.65328145f,-0.27059799f, 0.27059799f,-0.65328145f),
159
      new Static4D ( 0.65328145f,-0.27059799f, 0.27059799f, 0.65328145f),
160
      new Static4D ( 0.65328145f,-0.27059799f,-0.27059799f,-0.65328145f),
161
      new Static4D ( 0.65328145f,-0.27059796f,-0.27059796f, 0.65328145f),
162
      new Static4D ( 0.65328151f,-0.27059796f, 0.65328151f, 0.27059790f),
163
      new Static4D ( 0.65328145f,-0.27059799f, 0.65328145f,-0.27059799f),
164
      new Static4D ( 0.65328145f,-0.27059799f,-0.65328145f, 0.27059799f),
165
      new Static4D ( 0.65328145f,-0.27059805f,-0.65328145f,-0.27059805f),
166
      new Static4D ( 0.65328145f, 0.65328145f, 0.27059805f, 0.27059805f),
167
      new Static4D ( 0.65328145f, 0.65328145f,-0.27059811f,-0.27059811f),
168
      new Static4D ( 0.65328145f, 0.65328145f, 0.27059811f,-0.27059811f),
169
      new Static4D ( 0.65328145f, 0.65328145f,-0.27059805f, 0.27059805f),
170
      new Static4D ( 0.65328145f,-0.65328145f, 0.27059805f, 0.27059805f),
171
      new Static4D ( 0.65328145f,-0.65328145f,-0.27059811f,-0.27059811f),
172
      new Static4D ( 0.65328145f,-0.65328145f, 0.27059805f,-0.27059805f),
173
      new Static4D ( 0.65328145f,-0.65328145f,-0.27059811f, 0.27059811f),
174

    
175
// 96 quats ( 0.8535, 0.3535, 0.3535, 0.1464 )
176

    
177
      new Static4D ( 0.14644665f, 0.35355335f, 0.35355338f, 0.85355335f),
178
      new Static4D ( 0.14644665f, 0.35355335f, 0.35355335f,-0.85355335f),
179
      new Static4D ( 0.14644660f, 0.35355338f,-0.35355338f, 0.85355335f),
180
      new Static4D ( 0.14644653f, 0.35355324f,-0.35355340f,-0.85355340f),
181
      new Static4D ( 0.14644665f, 0.35355335f, 0.85355335f,-0.35355338f),
182
      new Static4D ( 0.14644657f, 0.35355335f, 0.85355335f, 0.35355330f),
183
      new Static4D ( 0.14644663f, 0.35355340f,-0.85355335f, 0.35355340f),
184
      new Static4D ( 0.14644665f, 0.35355335f,-0.85355335f,-0.35355338f),
185
      new Static4D ( 0.14644665f,-0.35355335f, 0.35355338f,-0.85355335f),
186
      new Static4D ( 0.14644665f,-0.35355335f, 0.35355338f, 0.85355335f),
187
      new Static4D ( 0.14644660f,-0.35355338f,-0.35355338f,-0.85355335f),
188
      new Static4D ( 0.14644653f,-0.35355324f,-0.35355340f, 0.85355340f),
189
      new Static4D ( 0.14644660f,-0.35355340f, 0.85355335f, 0.35355335f),
190
      new Static4D ( 0.14644665f,-0.35355335f, 0.85355335f,-0.35355338f),
191
      new Static4D ( 0.14644657f,-0.35355335f,-0.85355335f, 0.35355330f),
192
      new Static4D ( 0.14644665f,-0.35355335f,-0.85355335f,-0.35355338f),
193
      new Static4D ( 0.14644657f, 0.85355335f, 0.35355330f, 0.35355335f),
194
      new Static4D ( 0.14644660f, 0.85355335f,-0.35355338f, 0.35355338f),
195
      new Static4D ( 0.14644657f, 0.85355335f, 0.35355335f,-0.35355330f),
196
      new Static4D ( 0.14644663f, 0.85355335f,-0.35355335f,-0.35355335f),
197
      new Static4D ( 0.14644665f,-0.85355335f,-0.35355335f,-0.35355338f),
198
      new Static4D ( 0.14644665f,-0.85355335f, 0.35355335f, 0.35355338f),
199
      new Static4D ( 0.14644665f,-0.85355335f, 0.35355335f,-0.35355338f),
200
      new Static4D ( 0.14644662f,-0.85355335f,-0.35355347f, 0.35355340f),
201
      new Static4D ( 0.85355335f, 0.14644660f, 0.35355338f, 0.35355338f),
202
      new Static4D ( 0.85355335f, 0.14644657f, 0.35355340f,-0.35355340f),
203
      new Static4D ( 0.85355335f, 0.14644659f,-0.35355335f,-0.35355335f),
204
      new Static4D ( 0.85355335f, 0.14644656f,-0.35355335f, 0.35355341f),
205
      new Static4D ( 0.85355335f,-0.14644656f, 0.35355335f, 0.35355341f),
206
      new Static4D ( 0.85355335f,-0.14644656f,-0.35355335f, 0.35355341f),
207
      new Static4D ( 0.85355335f,-0.14644665f, 0.35355338f,-0.35355344f),
208
      new Static4D ( 0.85355335f,-0.14644656f,-0.35355335f,-0.35355341f),
209
      new Static4D ( 0.85355335f, 0.35355347f, 0.14644665f, 0.35355335f),
210
      new Static4D ( 0.85355335f, 0.35355347f, 0.14644665f,-0.35355335f),
211
      new Static4D ( 0.85355335f, 0.35355347f,-0.14644665f,-0.35355335f),
212
      new Static4D ( 0.85355335f, 0.35355335f,-0.14644662f, 0.35355338f),
213
      new Static4D ( 0.85355335f, 0.35355335f, 0.35355338f, 0.14644662f),
214
      new Static4D ( 0.85355335f, 0.35355338f, 0.35355338f,-0.14644660f),
215
      new Static4D ( 0.85355335f, 0.35355347f,-0.35355335f, 0.14644665f),
216
      new Static4D ( 0.85355335f, 0.35355335f,-0.35355344f,-0.14644663f),
217
      new Static4D ( 0.85355335f,-0.35355347f, 0.14644665f,-0.35355335f),
218
      new Static4D ( 0.85355335f,-0.35355335f, 0.14644662f, 0.35355338f),
219
      new Static4D ( 0.85355335f,-0.35355347f,-0.14644665f,-0.35355335f),
220
      new Static4D ( 0.85355335f,-0.35355338f,-0.14644662f, 0.35355338f),
221
      new Static4D ( 0.85355335f,-0.35355338f, 0.35355338f, 0.14644663f),
222
      new Static4D ( 0.85355335f,-0.35355335f, 0.35355338f,-0.14644662f),
223
      new Static4D ( 0.85355335f,-0.35355338f,-0.35355335f,-0.14644662f),
224
      new Static4D ( 0.85355335f,-0.35355348f,-0.35355344f, 0.14644666f),
225
      new Static4D ( 0.35355341f, 0.35355341f,-0.14644663f, 0.85355335f),
226
      new Static4D ( 0.35355340f, 0.35355338f, 0.14644662f, 0.85355335f),
227
      new Static4D ( 0.35355335f, 0.35355330f, 0.14644657f,-0.85355335f),
228
      new Static4D ( 0.35355335f, 0.35355335f,-0.14644659f,-0.85355335f),
229
      new Static4D ( 0.35355335f, 0.35355335f, 0.85355335f, 0.14644659f),
230
      new Static4D ( 0.35355340f, 0.35355335f,-0.85355335f, 0.14644663f),
231
      new Static4D ( 0.35355338f, 0.35355335f, 0.85355335f,-0.14644665f),
232
      new Static4D ( 0.35355340f, 0.35355344f,-0.85355335f,-0.14644659f),
233
      new Static4D ( 0.35355341f,-0.35355341f,-0.14644663f,-0.85355335f),
234
      new Static4D ( 0.35355341f,-0.35355341f, 0.14644663f, 0.85355335f),
235
      new Static4D ( 0.35355341f,-0.35355341f,-0.14644663f, 0.85355335f),
236
      new Static4D ( 0.35355324f,-0.35355340f, 0.14644654f,-0.85355350f),
237
      new Static4D ( 0.35355341f,-0.35355341f,-0.85355335f,-0.14644663f),
238
      new Static4D ( 0.35355341f,-0.35355341f, 0.85355335f,-0.14644663f),
239
      new Static4D ( 0.35355341f,-0.35355341f, 0.85355335f, 0.14644663f),
240
      new Static4D ( 0.35355338f,-0.35355320f,-0.85355350f, 0.14644657f),
241
      new Static4D ( 0.35355341f, 0.14644663f, 0.35355341f, 0.85355335f),
242
      new Static4D ( 0.35355341f, 0.14644663f, 0.35355341f,-0.85355335f),
243
      new Static4D ( 0.35355338f, 0.14644662f,-0.35355335f, 0.85355335f),
244
      new Static4D ( 0.35355341f, 0.14644663f,-0.35355341f,-0.85355335f),
245
      new Static4D ( 0.35355341f, 0.14644663f, 0.85355335f, 0.35355341f),
246
      new Static4D ( 0.35355335f, 0.14644657f, 0.85355335f,-0.35355340f),
247
      new Static4D ( 0.35355338f, 0.14644660f,-0.85355335f, 0.35355338f),
248
      new Static4D ( 0.35355324f, 0.14644653f,-0.85355350f,-0.35355338f),
249
      new Static4D ( 0.35355340f,-0.14644659f, 0.85355340f, 0.35355320f),
250
      new Static4D ( 0.35355341f,-0.14644663f, 0.85355335f,-0.35355341f),
251
      new Static4D ( 0.35355338f,-0.14644660f,-0.85355335f,-0.35355338f),
252
      new Static4D ( 0.35355324f,-0.14644656f,-0.85355350f, 0.35355344f),
253
      new Static4D ( 0.35355341f,-0.14644663f, 0.35355341f,-0.85355335f),
254
      new Static4D ( 0.35355341f,-0.14644663f, 0.35355341f, 0.85355335f),
255
      new Static4D ( 0.35355335f,-0.14644656f,-0.35355327f, 0.85355335f),
256
      new Static4D ( 0.35355341f,-0.14644663f,-0.35355341f,-0.85355335f),
257
      new Static4D ( 0.35355338f, 0.85355335f, 0.14644660f, 0.35355338f),
258
      new Static4D ( 0.35355320f, 0.85355335f, 0.14644654f,-0.35355338f),
259
      new Static4D ( 0.35355324f, 0.85355340f,-0.14644653f, 0.35355340f),
260
      new Static4D ( 0.35355335f, 0.85355335f,-0.14644665f,-0.35355347f),
261
      new Static4D ( 0.35355335f, 0.85355335f, 0.35355347f,-0.14644665f),
262
      new Static4D ( 0.35355320f, 0.85355335f, 0.35355338f, 0.14644654f),
263
      new Static4D ( 0.35355327f, 0.85355335f,-0.35355335f,-0.14644656f),
264
      new Static4D ( 0.35355340f, 0.85355335f,-0.35355338f, 0.14644662f),
265
      new Static4D ( 0.35355320f,-0.85355335f, 0.14644654f, 0.35355338f),
266
      new Static4D ( 0.35355338f,-0.85355335f, 0.14644662f,-0.35355335f),
267
      new Static4D ( 0.35355335f,-0.85355335f,-0.14644665f, 0.35355347f),
268
      new Static4D ( 0.35355338f,-0.85355335f,-0.14644660f,-0.35355338f),
269
      new Static4D ( 0.35355324f,-0.85355341f, 0.35355338f,-0.14644653f),
270
      new Static4D ( 0.35355335f,-0.85355335f, 0.35355338f, 0.14644659f),
271
      new Static4D ( 0.35355335f,-0.85355335f,-0.35355347f,-0.14644665f),
272
      new Static4D ( 0.35355320f,-0.85355335f,-0.35355338f, 0.14644654f),
273

    
274
// 48 quats (0 - 1/2 - 1/2 - SQ2/2)
275

    
276
      new Static4D ( 0.00000000f, 0.50000000f, 0.70710677f,-0.50000006f),
277
      new Static4D ( 0.00000000f, 0.50000000f, 0.70710677f, 0.50000000f),
278
      new Static4D ( 0.00000000f, 0.50000000f,-0.70710677f,-0.50000006f),
279
      new Static4D ( 0.00000000f, 0.50000000f,-0.70710677f, 0.50000000f),
280
      new Static4D ( 0.00000000f, 0.50000000f,-0.50000000f, 0.70710677f),
281
      new Static4D ( 0.00000000f, 0.50000000f,-0.50000000f,-0.70710670f),
282
      new Static4D ( 0.00000000f, 0.50000000f, 0.50000006f, 0.70710677f),
283
      new Static4D ( 0.00000000f, 0.50000000f, 0.50000006f,-0.70710677f),
284
      new Static4D ( 0.00000000f, 0.70710677f,-0.50000000f, 0.50000000f),
285
      new Static4D ( 0.00000000f, 0.70710677f, 0.50000000f,-0.50000000f),
286
      new Static4D ( 0.00000000f, 0.70710677f, 0.50000000f, 0.50000000f),
287
      new Static4D ( 0.00000000f, 0.70710677f,-0.50000000f,-0.50000000f),
288
      new Static4D ( 0.50000000f, 0.00000000f,-0.50000000f,-0.70710670f),
289
      new Static4D ( 0.50000000f, 0.00000000f,-0.50000000f, 0.70710670f),
290
      new Static4D ( 0.50000000f, 0.00000000f, 0.50000000f,-0.70710670f),
291
      new Static4D ( 0.50000000f, 0.00000000f, 0.50000000f, 0.70710677f),
292
      new Static4D ( 0.50000000f, 0.00000000f, 0.70710677f, 0.50000000f),
293
      new Static4D ( 0.50000000f, 0.00000000f,-0.70710677f, 0.50000000f),
294
      new Static4D ( 0.50000000f, 0.00000000f,-0.70710677f,-0.50000000f),
295
      new Static4D ( 0.50000000f, 0.00000000f, 0.70710677f,-0.50000000f),
296
      new Static4D ( 0.50000000f,-0.50000000f, 0.00000000f, 0.70710670f),
297
      new Static4D ( 0.50000000f, 0.50000000f, 0.00000000f, 0.70710670f),
298
      new Static4D ( 0.50000000f, 0.50000000f, 0.00000000f,-0.70710670f),
299
      new Static4D ( 0.50000000f,-0.50000000f, 0.00000000f,-0.70710670f),
300
      new Static4D ( 0.50000000f, 0.50000000f, 0.70710677f, 0.00000000f),
301
      new Static4D ( 0.50000000f,-0.50000000f,-0.70710677f, 0.00000000f),
302
      new Static4D ( 0.50000000f, 0.50000000f,-0.70710677f, 0.00000000f),
303
      new Static4D ( 0.50000000f,-0.50000000f, 0.70710677f, 0.00000000f),
304
      new Static4D ( 0.50000000f, 0.70710670f, 0.00000000f,-0.50000000f),
305
      new Static4D ( 0.50000000f, 0.70710677f, 0.00000000f, 0.50000000f),
306
      new Static4D ( 0.50000000f,-0.70710670f, 0.00000000f,-0.50000000f),
307
      new Static4D ( 0.50000000f,-0.70710677f, 0.00000000f, 0.50000000f),
308
      new Static4D ( 0.50000000f, 0.70710677f,-0.50000000f, 0.00000000f),
309
      new Static4D ( 0.50000000f, 0.70710677f, 0.50000000f, 0.00000000f),
310
      new Static4D ( 0.50000000f,-0.70710677f,-0.50000000f, 0.00000000f),
311
      new Static4D ( 0.50000000f,-0.70710677f, 0.50000000f, 0.00000000f),
312
      new Static4D ( 0.70710677f, 0.00000000f, 0.50000000f,-0.50000000f),
313
      new Static4D ( 0.70710670f, 0.00000000f,-0.50000000f,-0.50000000f),
314
      new Static4D ( 0.70710670f, 0.00000000f,-0.50000000f, 0.50000000f),
315
      new Static4D ( 0.70710670f, 0.00000000f, 0.50000000f, 0.50000000f),
316
      new Static4D ( 0.70710670f, 0.50000000f, 0.00000000f,-0.50000000f),
317
      new Static4D ( 0.70710670f, 0.50000000f, 0.00000000f, 0.50000000f),
318
      new Static4D ( 0.70710670f,-0.50000000f, 0.00000000f, 0.50000000f),
319
      new Static4D ( 0.70710670f,-0.50000000f, 0.00000000f,-0.50000000f),
320
      new Static4D ( 0.70710670f,-0.50000000f, 0.50000000f, 0.00000000f),
321
      new Static4D ( 0.70710670f, 0.50000000f,-0.50000000f, 0.00000000f),
322
      new Static4D ( 0.70710670f, 0.50000000f, 0.50000000f, 0.00000000f),
323
      new Static4D ( 0.70710670f,-0.50000000f,-0.50000000f, 0.00000000f),
324
      };
325
    }
326

    
327
///////////////////////////////////////////////////////////////////////////////////////////////////
328

    
329
  public ScrambleState[] getScrambleStates()
330
    {
331
    if( mStates==null )
332
      {
333
      int[][] m = new int[16][];
334

    
335
      for(int i=0; i<16; i++) m[i] = new int[] { 0,-2,i,0, 2,i,0, 4,i,
336
                                                 1,-3,i,1,-2,i,1,-1,i,1,1,i,1,2,i,1,3,i,1,4,i,
337
                                                 2,-2,i,2, 2,i,2, 4,i };
338

    
339
      mStates = new ScrambleState[]
340
          {
341
          new ScrambleState( new int[][] { m[ 1], m[ 2], m[ 3] } ),  //  0 0
342
          new ScrambleState( new int[][] {  null, m[ 4], m[ 5] } ),  //  1 x
343
          new ScrambleState( new int[][] { m[ 6],  null, m[ 7] } ),  //  2 y
344
          new ScrambleState( new int[][] { m[ 8], m[ 9],  null } ),  //  3 z
345
          new ScrambleState( new int[][] { m[10],  null, m[ 7] } ),  //  4 xy
346
          new ScrambleState( new int[][] { m[11], m[ 9],  null } ),  //  5 xz
347
          new ScrambleState( new int[][] {  null, m[12], m[ 5] } ),  //  6 yx
348
          new ScrambleState( new int[][] { m[ 8], m[13],  null } ),  //  7 yz
349
          new ScrambleState( new int[][] {  null, m[ 4], m[14] } ),  //  8 zx
350
          new ScrambleState( new int[][] { m[ 6],  null, m[15] } ),  //  9 zy
351
          new ScrambleState( new int[][] {  null,  null, m[ 5] } ),  // 10 xyx
352
          new ScrambleState( new int[][] {  null, m[ 4],  null } ),  // 11 xzx
353
          new ScrambleState( new int[][] {  null,  null, m[ 7] } ),  // 12 yxy
354
          new ScrambleState( new int[][] { m[ 6],  null,  null } ),  // 13 yzy
355
          new ScrambleState( new int[][] {  null, m[ 9],  null } ),  // 14 zxz
356
          new ScrambleState( new int[][] { m[ 8],  null,  null } ),  // 15 zyz
357
          };
358
      }
359

    
360
    return mStates;
361
    }
362

    
363
///////////////////////////////////////////////////////////////////////////////////////////////////
364

    
365
  public float[][] getCuts(int[] numLayers)
366
    {
367
    if( mCuts==null )
368
      {
369
      float C = 1.5f*(SQ2-1);
370
      float[] cut = new float[] {-C,+C};
371
      mCuts = new float[][] { cut,cut,cut };
372
      }
373

    
374
    return mCuts;
375
    }
376

    
377
///////////////////////////////////////////////////////////////////////////////////////////////////
378

    
379
  public boolean[][] getLayerRotatable(int[] numLayers)
380
    {
381
    boolean[] tmp = new boolean[] {true,true,true};
382
    return new boolean[][] { tmp,tmp,tmp };
383
    }
384

    
385
///////////////////////////////////////////////////////////////////////////////////////////////////
386

    
387
  public int getTouchControlType()
388
    {
389
    return TC_HEXAHEDRON;
390
    }
391

    
392
///////////////////////////////////////////////////////////////////////////////////////////////////
393

    
394
  public int getTouchControlSplit()
395
    {
396
    return TYPE_NOT_SPLIT;
397
    }
398

    
399
///////////////////////////////////////////////////////////////////////////////////////////////////
400

    
401
  public int[][][] getEnabled()
402
    {
403
    return new int[][][] { {{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}} };
404
    }
405

    
406
///////////////////////////////////////////////////////////////////////////////////////////////////
407

    
408
  public float[] getDist3D(int[] numLayers)
409
    {
410
    return TouchControlHexahedron.D3D;
411
    }
412

    
413
///////////////////////////////////////////////////////////////////////////////////////////////////
414

    
415
  public Static3D[] getFaceAxis()
416
    {
417
    return TouchControlHexahedron.FACE_AXIS;
418
    }
419

    
420
///////////////////////////////////////////////////////////////////////////////////////////////////
421

    
422
  public float[][] getCubitPositions(int[] numLayers)
423
    {
424
    if( mPosition==null )
425
      {
426
      float SHORT_EDGE = 1.5f-0.75f*SQ2;
427
      float LONG_EDGE  = 1.5f*(SQ2-1);
428

    
429
      final float DIST_CORNER = LONG_EDGE+SHORT_EDGE;
430
      final float DIST_EDGE   = LONG_EDGE+SHORT_EDGE;
431
      final float DIST_CENTER = LONG_EDGE+SHORT_EDGE;
432

    
433
      mPosition = new float[][]
434
         {
435
             { DIST_CORNER, DIST_CORNER, DIST_CORNER },
436
             { DIST_CORNER, DIST_CORNER,-DIST_CORNER },
437
             { DIST_CORNER,-DIST_CORNER, DIST_CORNER },
438
             { DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
439
             {-DIST_CORNER, DIST_CORNER, DIST_CORNER },
440
             {-DIST_CORNER, DIST_CORNER,-DIST_CORNER },
441
             {-DIST_CORNER,-DIST_CORNER, DIST_CORNER },
442
             {-DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
443

    
444
             {      0.0f, DIST_EDGE, DIST_EDGE },
445
             { DIST_EDGE,      0.0f, DIST_EDGE },
446
             {      0.0f,-DIST_EDGE, DIST_EDGE },
447
             {-DIST_EDGE,      0.0f, DIST_EDGE },
448
             { DIST_EDGE, DIST_EDGE,      0.0f },
449
             { DIST_EDGE,-DIST_EDGE,      0.0f },
450
             {-DIST_EDGE,-DIST_EDGE,      0.0f },
451
             {-DIST_EDGE, DIST_EDGE,      0.0f },
452
             {      0.0f, DIST_EDGE,-DIST_EDGE },
453
             { DIST_EDGE,      0.0f,-DIST_EDGE },
454
             {      0.0f,-DIST_EDGE,-DIST_EDGE },
455
             {-DIST_EDGE,      0.0f,-DIST_EDGE },
456

    
457
             {           0,           0, DIST_CENTER },
458
             {           0,           0,-DIST_CENTER },
459
             {           0, DIST_CENTER,           0 },
460
             {           0,-DIST_CENTER,           0 },
461
             { DIST_CENTER,           0,           0 },
462
             {-DIST_CENTER,           0,           0 },
463
         };
464
      }
465

    
466
    return mPosition;
467
    }
468

    
469
///////////////////////////////////////////////////////////////////////////////////////////////////
470

    
471
  public Static4D getCubitQuats(int cubit, int[] numLayers)
472
    {
473
    if( mQuatIndex==null )
474
      {
475
      mQuatIndex = new int[] { 0,10,11,3,6,2,1,8,
476
                               0,4,11,5,7,12,13,6,10,20,3,18,
477
                               0,3,10,11,7,6 };
478
      }
479

    
480
    return mObjectQuats[mQuatIndex[cubit]];
481
    }
482

    
483
///////////////////////////////////////////////////////////////////////////////////////////////////
484

    
485
  public ObjectShape getObjectShape(int variant)
486
    {
487
    float SHORT_EDGE = 1.5f-0.75f*SQ2;
488
    float LONG_EDGE  = 1.5f*(SQ2-1);
489
    float X = variant==0 ? SHORT_EDGE : LONG_EDGE;
490
    float Y = variant<=1 ? SHORT_EDGE : LONG_EDGE;
491
    float Z = SHORT_EDGE;
492

    
493
    float[][] vertices =
494
          {
495
              { -X,-Y,-Z },
496
              { -X,-Y,+Z },
497
              { -X,+Y,-Z },
498
              { -X,+Y,+Z },
499
              { +X,-Y,-Z },
500
              { +X,-Y,+Z },
501
              { +X,+Y,-Z },
502
              { +X,+Y,+Z },
503
          };
504

    
505
    int[][] indices =
506
          {
507
              {1,5,7,3},
508
              {3,7,6,2},
509
              {5,4,6,7},
510
              {0,1,3,2},
511
              {4,0,2,6},
512
              {0,4,5,1}
513
          };
514

    
515
    return new ObjectShape(vertices, indices);
516
    }
517

    
518
///////////////////////////////////////////////////////////////////////////////////////////////////
519

    
520
  public ObjectFaceShape getObjectFaceShape(int variant)
521
    {
522
    float h1 = isInIconMode() ? 0.001f : 0.06f;
523
    float h2 = 0.001f;
524
    float[][] bands   = { {h1,45,0.3f,0.5f,5,1,0}, {h2,45,0.3f,0.5f,5,1,0} };
525
    float[][] centers = { { 0.0f, 0.0f, 0.0f} };
526
    float[][] corners = { {0.04f,0.10f} };
527

    
528
    if( variant==0 )
529
      {
530
      int[] bandIndices = { 0,0,0,1,1,1 };
531
      int[] indices     = { -1,0,0,0,0,0,0,0 };
532
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
533
      }
534
    if( variant==1 )
535
      {
536
      int[] bandIndices = { 0,0,1,1,1,1 };
537
      int[] indices     = { -1,0,0,0,-1,0,0,0 };
538
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
539
      }
540
    else
541
      {
542
      int[] bandIndices = { 0,1,1,1,1,1 };
543
      int[] indices     = { -1,0,-1,0,-1,0,-1,0 };
544
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
545
      }
546
    }
547

    
548
///////////////////////////////////////////////////////////////////////////////////////////////////
549

    
550
  public int getNumCubitVariants(int[] numLayers)
551
    {
552
    return 3;
553
    }
554

    
555
///////////////////////////////////////////////////////////////////////////////////////////////////
556

    
557
  public int getCubitVariant(int cubit, int[] numLayers)
558
    {
559
    return cubit<8 ? 0 : (cubit<20?1:2);
560
    }
561

    
562
///////////////////////////////////////////////////////////////////////////////////////////////////
563

    
564
  public float getStickerRadius()
565
    {
566
    return 0.09f;
567
    }
568

    
569
///////////////////////////////////////////////////////////////////////////////////////////////////
570

    
571
  public float getStickerStroke()
572
    {
573
    return isInIconMode() ? 0.20f : 0.09f;
574
    }
575

    
576
///////////////////////////////////////////////////////////////////////////////////////////////////
577

    
578
  public float[][] getStickerAngles()
579
    {
580
    return null;
581
    }
582

    
583
///////////////////////////////////////////////////////////////////////////////////////////////////
584
// PUBLIC API
585

    
586
  public Static3D[] getRotationAxis()
587
    {
588
    return ROT_AXIS;
589
    }
590

    
591
///////////////////////////////////////////////////////////////////////////////////////////////////
592

    
593
  public int[][] getBasicAngles()
594
    {
595
    if( mBasicAngle ==null )
596
      {
597
      int[] tmp = new int[] {4,8,4};
598
      mBasicAngle = new int[][] { tmp,tmp,tmp };
599
      }
600

    
601
    return mBasicAngle;
602
    }
603

    
604
///////////////////////////////////////////////////////////////////////////////////////////////////
605

    
606
  public String getShortName()
607
    {
608
    return ObjectType.MIXU_3.name();
609
    }
610

    
611
///////////////////////////////////////////////////////////////////////////////////////////////////
612

    
613
  public ObjectSignature getSignature()
614
    {
615
    return new ObjectSignature(ObjectType.MIXU_3);
616
    }
617

    
618
///////////////////////////////////////////////////////////////////////////////////////////////////
619

    
620
  public String getObjectName()
621
    {
622
    return "Mixup Cube";
623
    }
624

    
625
///////////////////////////////////////////////////////////////////////////////////////////////////
626

    
627
  public String getInventor()
628
    {
629
    return "Sergey Makarov";
630
    }
631

    
632
///////////////////////////////////////////////////////////////////////////////////////////////////
633

    
634
  public int getYearOfInvention()
635
    {
636
    return 1985;
637
    }
638

    
639
///////////////////////////////////////////////////////////////////////////////////////////////////
640

    
641
  public int getComplexity()
642
    {
643
    return 2;
644
    }
645

    
646
///////////////////////////////////////////////////////////////////////////////////////////////////
647

    
648
  public String[][] getTutorials()
649
    {
650
    return new String[][]{
651
                          {"gb","w0DmJYwNI3Q","How to Solve the Mixup Cube","Z3"},
652
                          {"es","wHyf1imdAi4","Resolver Mixup 3x3","Cuby"},
653
                          {"ru","PN2ntFP6sfs","Как собрать Mixup","Цель+Действие=Результат"},
654
                          {"fr","QWsFaw0zUJU","Résolution du Mixup Cube","skieur cubb"},
655
                          {"de","vvDPyByyLyQ","Lösung für den 3x3x3 Mixup Cube","rofrisch"},
656
                          {"pl","TpG6MzWmwLQ","Mixup 3x3x3 Cube Tutorial","MrUK"},
657
                          {"br","_63j3i4Xa78","3x3 Mixup cube Tutorial 1/3","Cubo vicio"},
658
                          {"br","qpTnQavPLEI","3x3 Mixup cube Tutorial 2/3","Cubo vicio"},
659
                          {"br","nrFEm1ygcV4","3x3 Mixup cube Tutorial 3/3","Cubo vicio"},
660
                          {"kr","Ag4XkmC2v6c","3x3x3 믹스업 (Mix-up) 큐브 해법","듀나메스 큐브 해법연구소"},
661
                          {"vn","mWW6HYbvvh8","Mixup 3x3 Tutorial","VĂN CÔNG TÙNG"},
662
                         };
663
    }
664
}
(23-23/37)