Project

General

Profile

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

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

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

    
63
  @Override
64
  public int getInternalColor()
65
    {
66
    return 0xff333333;
67
    }
68

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

    
73
  @Override
74
  public Static4D[] getQuats()
75
    {
76
    return new Static4D[]
77
      {
78
      new Static4D ( 0.00000000f, 0.00000000f, 0.00000000f, 1.00000000f), // 0
79
      new Static4D ( 0.00000000f, 0.00000000f, 1.00000000f, 0.00000000f), // 1
80
      new Static4D ( 0.00000000f, 1.00000000f, 0.00000000f, 0.00000000f), // 2
81
      new Static4D ( 1.00000000f, 0.00000000f, 0.00000000f, 0.00000000f), // 3
82

    
83
      new Static4D ( 0.00000000f, 0.00000000f, 0.70710677f, 0.70710677f), // 4
84
      new Static4D ( 0.00000000f, 0.00000000f, 0.70710677f,-0.70710677f), // 5
85
      new Static4D ( 0.00000000f, 0.70710677f, 0.00000000f, 0.70710677f), // 6
86
      new Static4D ( 0.00000000f, 0.70710677f, 0.00000000f,-0.70710677f), // 7
87
      new Static4D ( 0.00000000f, 0.70710677f,-0.70710677f, 0.00000000f), // 8
88
      new Static4D ( 0.00000000f, 0.70710677f, 0.70710677f, 0.00000000f),
89
      new Static4D ( 0.70710677f, 0.00000000f, 0.00000000f, 0.70710677f), // 10
90
      new Static4D ( 0.70710677f, 0.00000000f, 0.00000000f,-0.70710677f), // 11
91
      new Static4D ( 0.70710677f, 0.00000000f, 0.70710677f, 0.00000000f), // 12
92
      new Static4D ( 0.70710677f, 0.00000000f,-0.70710677f, 0.00000000f), // 13
93
      new Static4D ( 0.70710677f,-0.70710677f, 0.00000000f, 0.00000000f),
94
      new Static4D ( 0.70710677f, 0.70710677f, 0.00000000f, 0.00000000f),
95

    
96
      new Static4D ( 0.50000000f, 0.50000000f, 0.50000000f, 0.50000000f),
97
      new Static4D ( 0.50000000f, 0.50000000f, 0.50000000f,-0.50000000f),
98
      new Static4D ( 0.50000000f, 0.50000000f,-0.50000000f, 0.50000000f), // 18
99
      new Static4D ( 0.50000000f, 0.50000000f,-0.50000000f,-0.50000000f),
100
      new Static4D ( 0.50000000f,-0.50000000f, 0.50000000f, 0.50000000f), // 20
101
      new Static4D ( 0.50000000f,-0.50000000f, 0.50000000f,-0.50000000f),
102
      new Static4D ( 0.50000000f,-0.50000000f,-0.50000000f, 0.50000000f),
103
      new Static4D ( 0.50000000f,-0.50000000f,-0.50000000f,-0.50000000f),
104

    
105
// 24 quats ( 0,0, 0.3826, 0.9238 )
106

    
107
      new Static4D ( 0.00000000f, 0.00000000f, 0.38268343f, 0.92387950f),
108
      new Static4D ( 0.00000000f, 0.00000000f, 0.38268343f,-0.92387950f),
109
      new Static4D ( 0.00000000f, 0.00000000f, 0.92387950f, 0.38268343f),
110
      new Static4D ( 0.00000000f, 0.00000000f, 0.92387950f,-0.38268343f),
111
      new Static4D ( 0.00000000f, 0.38268346f, 0.00000000f, 0.92387950f),
112
      new Static4D ( 0.00000000f, 0.38268328f, 0.00000000f,-0.92387962f),
113
      new Static4D ( 0.00000000f,-0.38268328f,-0.92387962f, 0.00000000f),
114
      new Static4D ( 0.00000000f,-0.38268346f, 0.92387950f, 0.00000000f),
115
      new Static4D ( 0.00000000f, 0.92387950f, 0.00000000f, 0.38268343f),
116
      new Static4D ( 0.00000000f, 0.92387950f, 0.00000000f,-0.38268352f),
117
      new Static4D ( 0.00000000f,-0.92387950f,-0.38268352f, 0.00000000f),
118
      new Static4D ( 0.00000000f,-0.92387950f, 0.38268343f, 0.00000000f),
119
      new Static4D ( 0.38268346f, 0.00000000f, 0.00000000f, 0.92387950f),
120
      new Static4D ( 0.38268328f, 0.00000000f, 0.00000000f,-0.92387962f),
121
      new Static4D ( 0.38268328f, 0.00000000f,-0.92387962f, 0.00000000f),
122
      new Static4D ( 0.38268346f, 0.00000000f, 0.92387950f, 0.00000000f),
123
      new Static4D ( 0.38268325f,-0.92387950f, 0.00000000f, 0.00000000f),
124
      new Static4D ( 0.38268325f, 0.92387950f, 0.00000000f, 0.00000000f),
125
      new Static4D ( 0.92387950f, 0.00000000f, 0.00000000f,-0.38268352f),
126
      new Static4D ( 0.92387950f, 0.00000000f, 0.00000000f, 0.38268343f),
127
      new Static4D ( 0.92387950f, 0.00000000f, 0.38268343f, 0.00000000f),
128
      new Static4D ( 0.92387950f, 0.00000000f,-0.38268352f, 0.00000000f),
129
      new Static4D ( 0.92387950f, 0.38268343f, 0.00000000f, 0.00000000f),
130
      new Static4D ( 0.92387950f,-0.38268343f, 0.00000000f, 0.00000000f),
131

    
132
// 48 quats ( 0.2705, 0.2705, 0.6532, 0.6532 )
133

    
134
      new Static4D ( 0.27059805f, 0.27059805f, 0.65328145f, 0.65328145f),
135
      new Static4D ( 0.27059793f, 0.27059793f,-0.65328151f,-0.65328151f),
136
      new Static4D ( 0.27059805f, 0.27059805f,-0.65328145f, 0.65328145f),
137
      new Static4D ( 0.27059793f, 0.27059793f, 0.65328151f,-0.65328151f),
138
      new Static4D ( 0.27059805f,-0.27059805f, 0.65328145f,-0.65328145f),
139
      new Static4D ( 0.27059793f,-0.27059793f,-0.65328151f, 0.65328151f),
140
      new Static4D ( 0.27059805f,-0.27059805f, 0.65328145f, 0.65328145f),
141
      new Static4D ( 0.27059793f,-0.27059793f,-0.65328151f,-0.65328151f),
142
      new Static4D ( 0.27059808f, 0.65328145f, 0.27059802f,-0.65328145f),
143
      new Static4D ( 0.27059799f, 0.65328145f, 0.27059799f, 0.65328145f),
144
      new Static4D ( 0.27059802f, 0.65328145f,-0.27059802f,-0.65328145f),
145
      new Static4D ( 0.27059793f, 0.65328151f,-0.27059793f, 0.65328151f),
146
      new Static4D ( 0.27059799f, 0.65328145f, 0.65328145f, 0.27059799f),
147
      new Static4D ( 0.27059799f, 0.65328145f, 0.65328145f,-0.27059799f),
148
      new Static4D ( 0.27059808f, 0.65328145f,-0.65328145f, 0.27059808f),
149
      new Static4D ( 0.27059796f, 0.65328145f,-0.65328145f,-0.27059796f),
150
      new Static4D ( 0.27059808f,-0.65328145f, 0.27059814f, 0.65328145f),
151
      new Static4D ( 0.27059799f,-0.65328145f, 0.27059799f,-0.65328145f),
152
      new Static4D ( 0.27059805f,-0.65328145f,-0.27059805f,-0.65328145f),
153
      new Static4D ( 0.27059799f,-0.65328145f,-0.27059799f, 0.65328145f),
154
      new Static4D ( 0.27059814f,-0.65328145f, 0.65328145f,-0.27059814f),
155
      new Static4D ( 0.27059799f,-0.65328145f, 0.65328145f, 0.27059799f),
156
      new Static4D ( 0.27059799f,-0.65328145f,-0.65328145f,-0.27059799f),
157
      new Static4D ( 0.27059799f,-0.65328145f,-0.65328145f, 0.27059799f),
158
      new Static4D ( 0.65328145f, 0.27059814f, 0.27059814f, 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.27059799f,-0.27059799f, 0.65328145f),
162
      new Static4D ( 0.65328145f, 0.27059802f, 0.65328145f,-0.27059808f),
163
      new Static4D ( 0.65328145f, 0.27059802f, 0.65328145f, 0.27059802f),
164
      new Static4D ( 0.65328145f, 0.27059811f,-0.65328145f, 0.27059811f),
165
      new Static4D ( 0.65328145f, 0.27059802f,-0.65328145f,-0.27059802f),
166
      new Static4D ( 0.65328145f,-0.27059799f, 0.27059799f,-0.65328145f),
167
      new Static4D ( 0.65328145f,-0.27059799f, 0.27059799f, 0.65328145f),
168
      new Static4D ( 0.65328145f,-0.27059799f,-0.27059799f,-0.65328145f),
169
      new Static4D ( 0.65328145f,-0.27059796f,-0.27059796f, 0.65328145f),
170
      new Static4D ( 0.65328151f,-0.27059796f, 0.65328151f, 0.27059790f),
171
      new Static4D ( 0.65328145f,-0.27059799f, 0.65328145f,-0.27059799f),
172
      new Static4D ( 0.65328145f,-0.27059799f,-0.65328145f, 0.27059799f),
173
      new Static4D ( 0.65328145f,-0.27059805f,-0.65328145f,-0.27059805f),
174
      new Static4D ( 0.65328145f, 0.65328145f, 0.27059805f, 0.27059805f),
175
      new Static4D ( 0.65328145f, 0.65328145f,-0.27059811f,-0.27059811f),
176
      new Static4D ( 0.65328145f, 0.65328145f, 0.27059811f,-0.27059811f),
177
      new Static4D ( 0.65328145f, 0.65328145f,-0.27059805f, 0.27059805f),
178
      new Static4D ( 0.65328145f,-0.65328145f, 0.27059805f, 0.27059805f),
179
      new Static4D ( 0.65328145f,-0.65328145f,-0.27059811f,-0.27059811f),
180
      new Static4D ( 0.65328145f,-0.65328145f, 0.27059805f,-0.27059805f),
181
      new Static4D ( 0.65328145f,-0.65328145f,-0.27059811f, 0.27059811f),
182

    
183
// 96 quats ( 0.8535, 0.3535, 0.3535, 0.1464 )
184

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

    
282
// 48 quats (0 - 1/2 - 1/2 - SQ2/2)
283

    
284
      new Static4D ( 0.00000000f, 0.50000000f, 0.70710677f,-0.50000006f),
285
      new Static4D ( 0.00000000f, 0.50000000f, 0.70710677f, 0.50000000f),
286
      new Static4D ( 0.00000000f, 0.50000000f,-0.70710677f,-0.50000006f),
287
      new Static4D ( 0.00000000f, 0.50000000f,-0.70710677f, 0.50000000f),
288
      new Static4D ( 0.00000000f, 0.50000000f,-0.50000000f, 0.70710677f),
289
      new Static4D ( 0.00000000f, 0.50000000f,-0.50000000f,-0.70710670f),
290
      new Static4D ( 0.00000000f, 0.50000000f, 0.50000006f, 0.70710677f),
291
      new Static4D ( 0.00000000f, 0.50000000f, 0.50000006f,-0.70710677f),
292
      new Static4D ( 0.00000000f, 0.70710677f,-0.50000000f, 0.50000000f),
293
      new Static4D ( 0.00000000f, 0.70710677f, 0.50000000f,-0.50000000f),
294
      new Static4D ( 0.00000000f, 0.70710677f, 0.50000000f, 0.50000000f),
295
      new Static4D ( 0.00000000f, 0.70710677f,-0.50000000f,-0.50000000f),
296
      new Static4D ( 0.50000000f, 0.00000000f,-0.50000000f,-0.70710670f),
297
      new Static4D ( 0.50000000f, 0.00000000f,-0.50000000f, 0.70710670f),
298
      new Static4D ( 0.50000000f, 0.00000000f, 0.50000000f,-0.70710670f),
299
      new Static4D ( 0.50000000f, 0.00000000f, 0.50000000f, 0.70710677f),
300
      new Static4D ( 0.50000000f, 0.00000000f, 0.70710677f, 0.50000000f),
301
      new Static4D ( 0.50000000f, 0.00000000f,-0.70710677f, 0.50000000f),
302
      new Static4D ( 0.50000000f, 0.00000000f,-0.70710677f,-0.50000000f),
303
      new Static4D ( 0.50000000f, 0.00000000f, 0.70710677f,-0.50000000f),
304
      new Static4D ( 0.50000000f,-0.50000000f, 0.00000000f, 0.70710670f),
305
      new Static4D ( 0.50000000f, 0.50000000f, 0.00000000f, 0.70710670f),
306
      new Static4D ( 0.50000000f, 0.50000000f, 0.00000000f,-0.70710670f),
307
      new Static4D ( 0.50000000f,-0.50000000f, 0.00000000f,-0.70710670f),
308
      new Static4D ( 0.50000000f, 0.50000000f, 0.70710677f, 0.00000000f),
309
      new Static4D ( 0.50000000f,-0.50000000f,-0.70710677f, 0.00000000f),
310
      new Static4D ( 0.50000000f, 0.50000000f,-0.70710677f, 0.00000000f),
311
      new Static4D ( 0.50000000f,-0.50000000f, 0.70710677f, 0.00000000f),
312
      new Static4D ( 0.50000000f, 0.70710670f, 0.00000000f,-0.50000000f),
313
      new Static4D ( 0.50000000f, 0.70710677f, 0.00000000f, 0.50000000f),
314
      new Static4D ( 0.50000000f,-0.70710670f, 0.00000000f,-0.50000000f),
315
      new Static4D ( 0.50000000f,-0.70710677f, 0.00000000f, 0.50000000f),
316
      new Static4D ( 0.50000000f, 0.70710677f,-0.50000000f, 0.00000000f),
317
      new Static4D ( 0.50000000f, 0.70710677f, 0.50000000f, 0.00000000f),
318
      new Static4D ( 0.50000000f,-0.70710677f,-0.50000000f, 0.00000000f),
319
      new Static4D ( 0.50000000f,-0.70710677f, 0.50000000f, 0.00000000f),
320
      new Static4D ( 0.70710677f, 0.00000000f, 0.50000000f,-0.50000000f),
321
      new Static4D ( 0.70710670f, 0.00000000f,-0.50000000f,-0.50000000f),
322
      new Static4D ( 0.70710670f, 0.00000000f,-0.50000000f, 0.50000000f),
323
      new Static4D ( 0.70710670f, 0.00000000f, 0.50000000f, 0.50000000f),
324
      new Static4D ( 0.70710670f, 0.50000000f, 0.00000000f,-0.50000000f),
325
      new Static4D ( 0.70710670f, 0.50000000f, 0.00000000f, 0.50000000f),
326
      new Static4D ( 0.70710670f,-0.50000000f, 0.00000000f, 0.50000000f),
327
      new Static4D ( 0.70710670f,-0.50000000f, 0.00000000f,-0.50000000f),
328
      new Static4D ( 0.70710670f,-0.50000000f, 0.50000000f, 0.00000000f),
329
      new Static4D ( 0.70710670f, 0.50000000f,-0.50000000f, 0.00000000f),
330
      new Static4D ( 0.70710670f, 0.50000000f, 0.50000000f, 0.00000000f),
331
      new Static4D ( 0.70710670f,-0.50000000f,-0.50000000f, 0.00000000f),
332
      };
333
    }
334

    
335
///////////////////////////////////////////////////////////////////////////////////////////////////
336

    
337
  public ScrambleState[] getScrambleStates()
338
    {
339
    if( mStates==null )
340
      {
341
      int[][] m = new int[16][];
342

    
343
      for(int i=0; i<16; i++) m[i] = new int[] { 0,-1,i,0, 1,i,0, 2,i,
344
                                                 1,-3,i,1,-2,i,1,-1,i,1,1,i,1,2,i,1,3,i,1,4,i,
345
                                                 2,-1,i,2, 1,i,2, 2,i };
346

    
347
      mStates = new ScrambleState[]
348
          {
349
          new ScrambleState( new int[][] { m[ 1], m[ 2], m[ 3] } ),  //  0 0
350
          new ScrambleState( new int[][] {  null, m[ 4], m[ 5] } ),  //  1 x
351
          new ScrambleState( new int[][] { m[ 6],  null, m[ 7] } ),  //  2 y
352
          new ScrambleState( new int[][] { m[ 8], m[ 9],  null } ),  //  3 z
353
          new ScrambleState( new int[][] { m[10],  null, m[ 7] } ),  //  4 xy
354
          new ScrambleState( new int[][] { m[11], m[ 9],  null } ),  //  5 xz
355
          new ScrambleState( new int[][] {  null, m[12], m[ 5] } ),  //  6 yx
356
          new ScrambleState( new int[][] { m[ 8], m[13],  null } ),  //  7 yz
357
          new ScrambleState( new int[][] {  null, m[ 4], m[14] } ),  //  8 zx
358
          new ScrambleState( new int[][] { m[ 6],  null, m[15] } ),  //  9 zy
359
          new ScrambleState( new int[][] {  null,  null, m[ 5] } ),  // 10 xyx
360
          new ScrambleState( new int[][] {  null, m[ 4],  null } ),  // 11 xzx
361
          new ScrambleState( new int[][] {  null,  null, m[ 7] } ),  // 12 yxy
362
          new ScrambleState( new int[][] { m[ 6],  null,  null } ),  // 13 yzy
363
          new ScrambleState( new int[][] {  null, m[ 9],  null } ),  // 14 zxz
364
          new ScrambleState( new int[][] { m[ 8],  null,  null } ),  // 15 zyz
365
          };
366
      }
367

    
368
    return mStates;
369
    }
370

    
371
///////////////////////////////////////////////////////////////////////////////////////////////////
372

    
373
  public float[][] getCuts(int[] numLayers)
374
    {
375
    if( mCuts==null )
376
      {
377
      float C = 1.5f*(SQ2-1);
378
      float[] cut = new float[] {-C,+C};
379
      mCuts = new float[][] { cut,cut,cut };
380
      }
381

    
382
    return mCuts;
383
    }
384

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

    
387
  public boolean[][] getLayerRotatable(int[] numLayers)
388
    {
389
    boolean[] tmp = new boolean[] {true,true,true};
390
    return new boolean[][] { tmp,tmp,tmp };
391
    }
392

    
393
///////////////////////////////////////////////////////////////////////////////////////////////////
394

    
395
  public int getTouchControlType()
396
    {
397
    return TC_HEXAHEDRON;
398
    }
399

    
400
///////////////////////////////////////////////////////////////////////////////////////////////////
401

    
402
  public int getTouchControlSplit()
403
    {
404
    return TYPE_NOT_SPLIT;
405
    }
406

    
407
///////////////////////////////////////////////////////////////////////////////////////////////////
408

    
409
  public int[][][] getEnabled()
410
    {
411
    return new int[][][] { {{1,2}},{{1,2}},{{0,2}},{{0,2}},{{0,1}},{{0,1}} };
412
    }
413

    
414
///////////////////////////////////////////////////////////////////////////////////////////////////
415

    
416
  public float[] getDist3D(int[] numLayers)
417
    {
418
    return TouchControlHexahedron.D3D;
419
    }
420

    
421
///////////////////////////////////////////////////////////////////////////////////////////////////
422

    
423
  public Static3D[] getFaceAxis()
424
    {
425
    return TouchControlHexahedron.FACE_AXIS;
426
    }
427

    
428
///////////////////////////////////////////////////////////////////////////////////////////////////
429

    
430
  public float[][] getCubitPositions(int[] numLayers)
431
    {
432
    if( mPosition==null )
433
      {
434
      float SHORT_EDGE = 1.5f-0.75f*SQ2;
435
      float LONG_EDGE  = 1.5f*(SQ2-1);
436

    
437
      final float DIST_CORNER = LONG_EDGE+SHORT_EDGE;
438
      final float DIST_EDGE   = LONG_EDGE+SHORT_EDGE;
439
      final float DIST_CENTER = LONG_EDGE+SHORT_EDGE;
440

    
441
      mPosition = new float[][]
442
         {
443
             { DIST_CORNER, DIST_CORNER, DIST_CORNER },
444
             { DIST_CORNER, DIST_CORNER,-DIST_CORNER },
445
             { DIST_CORNER,-DIST_CORNER, DIST_CORNER },
446
             { DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
447
             {-DIST_CORNER, DIST_CORNER, DIST_CORNER },
448
             {-DIST_CORNER, DIST_CORNER,-DIST_CORNER },
449
             {-DIST_CORNER,-DIST_CORNER, DIST_CORNER },
450
             {-DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
451

    
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
             { DIST_EDGE, DIST_EDGE,      0.0f },
457
             { DIST_EDGE,-DIST_EDGE,      0.0f },
458
             {-DIST_EDGE,-DIST_EDGE,      0.0f },
459
             {-DIST_EDGE, DIST_EDGE,      0.0f },
460
             {      0.0f, DIST_EDGE,-DIST_EDGE },
461
             { DIST_EDGE,      0.0f,-DIST_EDGE },
462
             {      0.0f,-DIST_EDGE,-DIST_EDGE },
463
             {-DIST_EDGE,      0.0f,-DIST_EDGE },
464

    
465
             {           0,           0, DIST_CENTER },
466
             {           0,           0,-DIST_CENTER },
467
             {           0, DIST_CENTER,           0 },
468
             {           0,-DIST_CENTER,           0 },
469
             { DIST_CENTER,           0,           0 },
470
             {-DIST_CENTER,           0,           0 },
471
         };
472
      }
473

    
474
    return mPosition;
475
    }
476

    
477
///////////////////////////////////////////////////////////////////////////////////////////////////
478

    
479
  public Static4D getCubitQuats(int cubit, int[] numLayers)
480
    {
481
    if( mQuatIndex==null )
482
      {
483
      mQuatIndex = new int[] { 0,10,11,3,6,2,1,8,
484
                               0,4,11,5,7,12,13,6,10,20,3,18,
485
                               0,3,10,11,7,6 };
486
      }
487

    
488
    return mObjectQuats[mQuatIndex[cubit]];
489
    }
490

    
491
///////////////////////////////////////////////////////////////////////////////////////////////////
492

    
493
  public ObjectShape getObjectShape(int variant)
494
    {
495
    float SHORT_EDGE = 1.5f-0.75f*SQ2;
496
    float LONG_EDGE  = 1.5f*(SQ2-1);
497
    float X = variant==0 ? SHORT_EDGE : LONG_EDGE;
498
    float Y = variant<=1 ? SHORT_EDGE : LONG_EDGE;
499
    float Z = SHORT_EDGE;
500

    
501
    float[][] vertices =
502
          {
503
              { -X,-Y,-Z },
504
              { -X,-Y,+Z },
505
              { -X,+Y,-Z },
506
              { -X,+Y,+Z },
507
              { +X,-Y,-Z },
508
              { +X,-Y,+Z },
509
              { +X,+Y,-Z },
510
              { +X,+Y,+Z },
511
          };
512

    
513
    int[][] indices =
514
          {
515
              {1,5,7,3},
516
              {3,7,6,2},
517
              {5,4,6,7},
518
              {0,1,3,2},
519
              {4,0,2,6},
520
              {0,4,5,1}
521
          };
522

    
523
    return new ObjectShape(vertices, indices);
524
    }
525

    
526
///////////////////////////////////////////////////////////////////////////////////////////////////
527

    
528
  public ObjectFaceShape getObjectFaceShape(int variant)
529
    {
530
    float h1 = isInIconMode() ? 0.001f : 0.06f;
531
    float h2 = 0.001f;
532
    float[][] bands   = { {h1,45,0.3f,0.5f,5,1,0}, {h2,45,0.3f,0.5f,5,1,0} };
533
    float[][] centers = { { 0.0f, 0.0f, 0.0f} };
534
    float[][] corners = { {0.04f,0.10f} };
535

    
536
    if( variant==0 )
537
      {
538
      int[] bandIndices = { 0,0,0,1,1,1 };
539
      int[] indices     = { -1,0,0,0,0,0,0,0 };
540
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
541
      }
542
    if( variant==1 )
543
      {
544
      int[] bandIndices = { 0,0,1,1,1,1 };
545
      int[] indices     = { -1,0,0,0,-1,0,0,0 };
546
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
547
      }
548
    else
549
      {
550
      int[] bandIndices = { 0,1,1,1,1,1 };
551
      int[] indices     = { -1,0,-1,0,-1,0,-1,0 };
552
      return new ObjectFaceShape(bands,bandIndices,corners,indices,centers,indices,null);
553
      }
554
    }
555

    
556
///////////////////////////////////////////////////////////////////////////////////////////////////
557

    
558
  public int getNumCubitVariants(int[] numLayers)
559
    {
560
    return 3;
561
    }
562

    
563
///////////////////////////////////////////////////////////////////////////////////////////////////
564

    
565
  public int getCubitVariant(int cubit, int[] numLayers)
566
    {
567
    return cubit<8 ? 0 : (cubit<20?1:2);
568
    }
569

    
570
///////////////////////////////////////////////////////////////////////////////////////////////////
571

    
572
  public float getStickerRadius()
573
    {
574
    return 0.09f;
575
    }
576

    
577
///////////////////////////////////////////////////////////////////////////////////////////////////
578

    
579
  public float getStickerStroke()
580
    {
581
    return isInIconMode() ? 0.20f : 0.09f;
582
    }
583

    
584
///////////////////////////////////////////////////////////////////////////////////////////////////
585

    
586
  public float[][] getStickerAngles()
587
    {
588
    return null;
589
    }
590

    
591
///////////////////////////////////////////////////////////////////////////////////////////////////
592
// PUBLIC API
593

    
594
  public Static3D[] getRotationAxis()
595
    {
596
    return ROT_AXIS;
597
    }
598

    
599
///////////////////////////////////////////////////////////////////////////////////////////////////
600

    
601
  public int[][] getBasicAngles()
602
    {
603
    if( mBasicAngle ==null )
604
      {
605
      int[] tmp = new int[] {4,8,4};
606
      mBasicAngle = new int[][] { tmp,tmp,tmp };
607
      }
608

    
609
    return mBasicAngle;
610
    }
611

    
612
///////////////////////////////////////////////////////////////////////////////////////////////////
613

    
614
  public String getShortName()
615
    {
616
    return ObjectType.MIXU_3.name();
617
    }
618

    
619
///////////////////////////////////////////////////////////////////////////////////////////////////
620

    
621
  public ObjectSignature getSignature()
622
    {
623
    return new ObjectSignature(ObjectType.MIXU_3);
624
    }
625

    
626
///////////////////////////////////////////////////////////////////////////////////////////////////
627

    
628
  public String getObjectName()
629
    {
630
    return "Mixup Cube";
631
    }
632

    
633
///////////////////////////////////////////////////////////////////////////////////////////////////
634

    
635
  public String getInventor()
636
    {
637
    return "Sergey Makarov";
638
    }
639

    
640
///////////////////////////////////////////////////////////////////////////////////////////////////
641

    
642
  public int getYearOfInvention()
643
    {
644
    return 1985;
645
    }
646

    
647
///////////////////////////////////////////////////////////////////////////////////////////////////
648

    
649
  public int getComplexity()
650
    {
651
    return 2;
652
    }
653

    
654
///////////////////////////////////////////////////////////////////////////////////////////////////
655

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