Project

General

Profile

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

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

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