Project

General

Profile

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

distorted-objectlib / src / main / java / org / distorted / objectlib / objects / TwistySquare2.java @ cf93ea4e

1 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2021 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6 6133be67 Leszek Koltunski
// Magic Cube is proprietary software licensed under an EULA which you should have received      //
7
// along with the code. If not, check https://distorted.org/magic/License-Magic-Cube.html        //
8 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
9
10
package org.distorted.objectlib.objects;
11
12 ecf3d6e3 Leszek Koltunski
import org.distorted.library.type.Static3D;
13 29b82486 Leszek Koltunski
import org.distorted.library.type.Static4D;
14
15 84a17011 Leszek Koltunski
import org.distorted.objectlib.helpers.FactoryCubit;
16 3ee1d662 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectFaceShape;
17 1d581993 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectSignature;
18 84a17011 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectVertexEffects;
19 cf93ea4e Leszek Koltunski
import org.distorted.objectlib.main.InitAssets;
20 a8295031 Leszek Koltunski
import org.distorted.objectlib.main.InitData;
21 2dffaf22 Leszek Koltunski
import org.distorted.objectlib.main.ObjectSignatures;
22 8005e762 Leszek Koltunski
import org.distorted.objectlib.main.ObjectType;
23 198c5bf0 Leszek Koltunski
import org.distorted.objectlib.helpers.ObjectShape;
24 29b82486 Leszek Koltunski
25
///////////////////////////////////////////////////////////////////////////////////////////////////
26
27
public class TwistySquare2 extends TwistySquare
28
{
29 9ba7f3f6 Leszek Koltunski
  private int[][] mEdges;
30 82e62580 Leszek Koltunski
  private int[] mQuatIndex;
31 29b82486 Leszek Koltunski
  private float[][] mCenters;
32
33
///////////////////////////////////////////////////////////////////////////////////////////////////
34
35 cf93ea4e Leszek Koltunski
  public TwistySquare2(int meshState, int iconMode, Static4D quat, Static3D move, float scale, InitData data, InitAssets asset)
36 29b82486 Leszek Koltunski
    {
37 cf93ea4e Leszek Koltunski
    super(meshState, iconMode, quat, move, scale, data, asset);
38 29b82486 Leszek Koltunski
    }
39
40 1b7ece90 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
41
42 ed0988c0 Leszek Koltunski
  @Override
43 19595510 Leszek Koltunski
  public int[][] getSolvedQuats()
44 1b7ece90 Leszek Koltunski
    {
45 ed0988c0 Leszek Koltunski
    return new int[][]
46
      {
47
        { 2, 0,1 },                                   // 2 middle cubits in the first group
48
        {12, 2,4,6,8,10,12,14,16,19,21,23,25,  17 },  // 12 front and back edges and corners in the second group with quat[17]
49
        {12, 3,5,7,9,11,13,15,17,18,20,22,24,  23 }   // 12 left and right edges and corners in the third group with quat[23]
50
      };
51 1b7ece90 Leszek Koltunski
    }
52
53 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
54
55 9ba7f3f6 Leszek Koltunski
  public int[][] getScrambleEdges()
56 29b82486 Leszek Koltunski
    {
57 9ba7f3f6 Leszek Koltunski
    if( mEdges==null )
58 29b82486 Leszek Koltunski
      {
59 9ba7f3f6 Leszek Koltunski
      mEdges = new int[][]
60 29b82486 Leszek Koltunski
        {
61 9ba7f3f6 Leszek Koltunski
          { 0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,
62
            33,1,34,1,33,1,34,1,33,1,34,1,33,1,34,1,33,1,34,1,33,1,34,1,
63
            35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3 },     // 0
64
          { 0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,
65
            35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3 },     // 1 SL
66
          { 33,1,34,1,
67
            35,4,36,4,37,4,38,4,39,4,40,4,41,4,42,4,43,4,44,4,45,4 },     // 2 LO
68
          { 0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,
69
            33,1,34,1 },                                                  // 3 UP
70
          { 33,1,34,1 }                                                   // 4 UL
71 29b82486 Leszek Koltunski
        };
72
      }
73
74 9ba7f3f6 Leszek Koltunski
    return mEdges;
75 29b82486 Leszek Koltunski
    }
76
77 d0e6cf7f Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
78
79
  public float[][] getCubitPositions(int[] numLayers)
80
    {
81
    if( mCenters ==null )
82
      {
83
      float Y = 0.75f + X/2;
84
85
      mCenters = new float[][]
86
        {
87 ed0988c0 Leszek Koltunski
         { 1.5f, 0.0f, 0.0f }, // 0
88 d0e6cf7f Leszek Koltunski
         {-1.5f, 0.0f, 0.0f },
89
90 ed0988c0 Leszek Koltunski
         { 0.0f, 1.0f, 1.5f }, // 2
91 d0e6cf7f Leszek Koltunski
         { 1.5f, 1.0f, 0.0f },
92
         { 0.0f, 1.0f,-1.5f },
93
         {-1.5f, 1.0f, 0.0f },
94
         { 0.0f,-1.0f, 1.5f },
95
         { 1.5f,-1.0f, 0.0f },
96
         { 0.0f,-1.0f,-1.5f },
97
         {-1.5f,-1.0f, 0.0f },
98
99 ed0988c0 Leszek Koltunski
         {    Y, 1.0f, 1.5f }, // 10
100 d0e6cf7f Leszek Koltunski
         { 1.5f, 1.0f,   -Y },
101
         {   -Y, 1.0f,-1.5f },
102
         {-1.5f, 1.0f,    Y },
103
         {    Y,-1.0f, 1.5f },
104
         { 1.5f,-1.0f,   -Y },
105
         {   -Y,-1.0f,-1.5f },
106
         {-1.5f,-1.0f,    Y },
107
108 ed0988c0 Leszek Koltunski
         { 1.5f, 1.0f,    Y }, // 18
109 d0e6cf7f Leszek Koltunski
         {    Y, 1.0f,-1.5f },
110
         {-1.5f, 1.0f,   -Y },
111
         {   -Y, 1.0f, 1.5f },
112
         { 1.5f,-1.0f,    Y },
113
         {    Y,-1.0f,-1.5f },
114
         {-1.5f,-1.0f,   -Y },
115
         {   -Y,-1.0f, 1.5f },
116
        };
117
      }
118
119
    return mCenters;
120
    }
121
122
///////////////////////////////////////////////////////////////////////////////////////////////////
123
124
  public Static4D getCubitQuats(int cubit, int[] numLayers)
125
    {
126 82e62580 Leszek Koltunski
    if( mQuatIndex==null )
127 d0e6cf7f Leszek Koltunski
      {
128 82e62580 Leszek Koltunski
      mQuatIndex = new int[]
129 d0e6cf7f Leszek Koltunski
        {
130
        0, 6,
131 82e62580 Leszek Koltunski
        0, 9, 6, 3,17,14,23,20,
132
        0, 9, 6, 3, 0, 9, 6, 3,14, 23, 20, 17, 14, 23, 20, 17
133 d0e6cf7f Leszek Koltunski
        };
134
      }
135
136 82e62580 Leszek Koltunski
    return mObjectQuats[mQuatIndex[cubit]];
137 d0e6cf7f Leszek Koltunski
    }
138
139 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
140
141 84a17011 Leszek Koltunski
  private float[][] getVertices(int variant)
142 29b82486 Leszek Koltunski
    {
143
    if( variant==0 )
144
      {
145 84a17011 Leszek Koltunski
      return new float[][]
146 29b82486 Leszek Koltunski
        {
147 57ef6378 Leszek Koltunski
         { -1.5f-X, 0.5f, 1.5f },
148
         {    0.0f, 0.5f, 1.5f },
149
         {    0.0f, 0.5f,-1.5f },
150
         { -1.5f+X, 0.5f,-1.5f },
151
         { -1.5f-X,-0.5f, 1.5f },
152
         {    0.0f,-0.5f, 1.5f },
153
         {    0.0f,-0.5f,-1.5f },
154
         { -1.5f+X,-0.5f,-1.5f }
155 29b82486 Leszek Koltunski
        };
156 84a17011 Leszek Koltunski
      }
157
    else if( variant==1 )
158
      {
159
      return new float[][]
160
        {
161
         {  -X, 0.5f, 0.0f },
162
         {  +X, 0.5f, 0.0f },
163
         {0.0f, 0.5f,-1.5f },
164
         {  -X,-0.5f, 0.0f },
165
         {  +X,-0.5f, 0.0f },
166
         {0.0f,-0.5f,-1.5f },
167
        };
168
      }
169
    else
170
      {
171
      return new float[][]
172
        {
173
         {-0.75f+X/2, 0.5f,  0.0f },
174
         { 0.75f-X/2, 0.5f,  0.0f },
175
         {-0.75f-X/2, 0.5f, -1.5f },
176
         {-0.75f+X/2,-0.5f,  0.0f },
177
         { 0.75f-X/2,-0.5f,  0.0f },
178
         {-0.75f-X/2,-0.5f, -1.5f }
179
        };
180
      }
181
    }
182
183
///////////////////////////////////////////////////////////////////////////////////////////////////
184 29b82486 Leszek Koltunski
185 84a17011 Leszek Koltunski
  public ObjectShape getObjectShape(int variant)
186
    {
187
    if( variant==0 )
188
      {
189 4e9f2df5 Leszek Koltunski
      int[][] indices =
190 29b82486 Leszek Koltunski
        {
191
         {4,5,1,0},
192
         {5,6,2,1},
193
         {6,7,3,2},
194 33c707e8 Leszek Koltunski
         {7,4,0,3},
195
         {0,1,2,3},
196 846b69f3 Leszek Koltunski
         {7,6,5,4}
197 29b82486 Leszek Koltunski
        };
198
199 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
200 29b82486 Leszek Koltunski
      }
201
    else if( variant==1 )
202
      {
203 4e9f2df5 Leszek Koltunski
      int[][] indices =
204 29b82486 Leszek Koltunski
        {
205
         {0,1,2},
206
         {3,4,1,0},
207 846b69f3 Leszek Koltunski
         {5,4,3},
208 29b82486 Leszek Koltunski
         {4,5,2,1},
209
         {5,3,0,2}
210
        };
211
212 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
213 29b82486 Leszek Koltunski
      }
214
    else
215
      {
216 4e9f2df5 Leszek Koltunski
      int[][] indices =
217 29b82486 Leszek Koltunski
        {
218
         {0,1,2},
219
         {3,4,1,0},
220 c187cb69 Leszek Koltunski
         {5,4,3},
221 29b82486 Leszek Koltunski
         {4,5,2,1},
222
         {5,3,0,2}
223
        };
224
225 84a17011 Leszek Koltunski
      return new ObjectShape(getVertices(variant), indices);
226 3ee1d662 Leszek Koltunski
      }
227
    }
228
229
///////////////////////////////////////////////////////////////////////////////////////////////////
230
231
  public ObjectFaceShape getObjectFaceShape(int variant)
232
    {
233
    if( variant==0 )
234
      {
235 3bf19410 Leszek Koltunski
      float h1 = isInIconMode() ? 0.001f : 0.04f;
236
      float h2 = isInIconMode() ? 0.001f : 0.02f;
237 84a17011 Leszek Koltunski
      float[][] bands = { {h1,35,0.2f,0.8f,5,2,1}, {h2,35,0.5f,1.0f,5,2,1}, {0.001f,35,0.3f,0.8f,5,2,1} };
238
      int[] indices   = { 0,0,1,2,2,2 };
239
      return new ObjectFaceShape(bands,indices,null);
240 3ee1d662 Leszek Koltunski
      }
241
    else if( variant==1 )
242
      {
243 3bf19410 Leszek Koltunski
      float h1 = isInIconMode() ? 0.001f : 0.038f;
244 84a17011 Leszek Koltunski
      float[][] bands = { {h1,35,0.5f,0.9f, 5,2,1}, {0.001f,35,0.5f,0.9f, 5,2,1} };
245
      int[] indices   = { 0,0,0,1,1 };
246
      return new ObjectFaceShape(bands,indices,null);
247 3ee1d662 Leszek Koltunski
      }
248
    else
249
      {
250 3bf19410 Leszek Koltunski
      float h1 = isInIconMode() ? 0.001f : 0.03f;
251 84a17011 Leszek Koltunski
      float[][] bands = { {h1,35,0.9f,1.0f, 5,2,1}, {0.001f,35,0.9f,1.0f, 5,2,1} };
252
      int[] indices   = { 0,0,0,1,1 };
253
      return new ObjectFaceShape(bands,indices,null);
254
      }
255
    }
256
257
///////////////////////////////////////////////////////////////////////////////////////////////////
258
259
  public ObjectVertexEffects getVertexEffects(int variant)
260
    {
261
    if( variant==0 )
262
      {
263
      float[][] corners = { {0.03f,0.05f} };
264
      int[] indices     = { 0,0,0,0,0,0,0,0 };
265
      float[][] centers = { { -0.75f, 0.0f, 0.0f} };
266
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
267
      }
268
    else if( variant==1 )
269
      {
270
      float[][] corners = { {0.04f,0.15f} };
271
      int[] indices     = { 0,0,-1,0,0,-1 };
272
      float[][] centers = { { 0.0f, 0.0f,-0.5f} };
273
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
274
      }
275
    else
276
      {
277
      float[][] corners = { {0.05f,0.13f} };
278
      int[] indices     = { 0,0,-1,0,0,-1 };
279
      float[][] centers = { { 0.0f, 0.0f,-0.5f} };
280
      return FactoryCubit.generateVertexEffect(getVertices(variant),corners,indices,centers,indices);
281 29b82486 Leszek Koltunski
      }
282
    }
283
284
///////////////////////////////////////////////////////////////////////////////////////////////////
285
286 e30c522a Leszek Koltunski
  public int getNumCubitVariants(int[] numLayers)
287 29b82486 Leszek Koltunski
    {
288
    return 3;
289
    }
290
291
///////////////////////////////////////////////////////////////////////////////////////////////////
292
293 e30c522a Leszek Koltunski
  public int getCubitVariant(int cubit, int[] numLayers)
294 29b82486 Leszek Koltunski
    {
295
    return cubit<2 ? 0 : (cubit<10 ? 1:2);
296
    }
297
298 89704841 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
299
300 d53fb890 Leszek Koltunski
  public float getStickerRadius()
301 89704841 Leszek Koltunski
    {
302
    return 0.12f;
303
    }
304
305
///////////////////////////////////////////////////////////////////////////////////////////////////
306
307 d53fb890 Leszek Koltunski
  public float getStickerStroke()
308 89704841 Leszek Koltunski
    {
309 3bf19410 Leszek Koltunski
    return isInIconMode() ? 0.20f : 0.10f;
310 89704841 Leszek Koltunski
    }
311
312
///////////////////////////////////////////////////////////////////////////////////////////////////
313
314 d53fb890 Leszek Koltunski
  public float[][] getStickerAngles()
315 89704841 Leszek Koltunski
    {
316
    return null;
317
    }
318
319 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
320
// PUBLIC API
321
322 5f54927b Leszek Koltunski
  public String getShortName()
323 61aa85e4 Leszek Koltunski
    {
324 5f54927b Leszek Koltunski
    return ObjectType.SQU2_3.name();
325
    }
326
327
///////////////////////////////////////////////////////////////////////////////////////////////////
328
329 1d581993 Leszek Koltunski
  public ObjectSignature getSignature()
330 5f54927b Leszek Koltunski
    {
331 2dffaf22 Leszek Koltunski
    return new ObjectSignature(ObjectSignatures.SQU2_3);
332 61aa85e4 Leszek Koltunski
    }
333
334
///////////////////////////////////////////////////////////////////////////////////////////////////
335
336 e26eb4e7 Leszek Koltunski
  public String getObjectName()
337 29b82486 Leszek Koltunski
    {
338 e26eb4e7 Leszek Koltunski
    return "Square-2";
339 29b82486 Leszek Koltunski
    }
340
341
///////////////////////////////////////////////////////////////////////////////////////////////////
342
343 e26eb4e7 Leszek Koltunski
  public String getInventor()
344 29b82486 Leszek Koltunski
    {
345 e26eb4e7 Leszek Koltunski
    return "David Litwin";
346 29b82486 Leszek Koltunski
    }
347
348 59c20632 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
349
350 e26eb4e7 Leszek Koltunski
  public int getYearOfInvention()
351 59c20632 Leszek Koltunski
    {
352
    return 1995;
353
    }
354
355 29b82486 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
356
357 e26eb4e7 Leszek Koltunski
  public int getComplexity()
358 29b82486 Leszek Koltunski
    {
359 b4223a92 Leszek Koltunski
    return 3;
360 29b82486 Leszek Koltunski
    }
361 052e0362 Leszek Koltunski
362
///////////////////////////////////////////////////////////////////////////////////////////////////
363
364
  public String[][] getTutorials()
365
    {
366
    return new String[][] {
367
                          {"gb","PPXojiFthEs","Square-2 Tutorial","SuperAntoniovivaldi"},
368
                          {"es","IiMwc51xKBQ","Cómo resolver Square-2","skieur cubb"},
369
                          {"ru","XZ6m8uF5oUk","Как собрать Square-2.","Илья Топор-Гилка"},
370
                          {"fr","R-m9IgYAFPA","Tutoriel: résolution du Square-2","skieur cubb"},
371
                          {"pl","SukHyoMzcgM","Square-2 TUTORIAL PL","MrUk"},
372
                          {"br","T3ts5gHLJV8","Tutorial do Square-2 1/2","Rafael Cinoto"},
373
                          {"br","4wwWE5Ni0Fw","Tutorial do Square-2 2/2","Rafael Cinoto"},
374
                          {"kr","psG9Ar4pBrc","초보자를 위한 스퀘어2 해법","SlowCuberToumai"},
375 a399e91b Leszek Koltunski
                          {"vn","_37Pc8Y_-Hs","Square-2 Tutorial","VĂN CÔNG TÙNG"},
376 052e0362 Leszek Koltunski
                         };
377
    }
378 29b82486 Leszek Koltunski
}