Project

General

Profile

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

magiccube / src / main / java / org / distorted / objects / TwistyRex.java @ 16861599

1 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2020 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19
20
package org.distorted.objects;
21
22
import android.content.res.Resources;
23
24 a38fe4b2 Leszek Koltunski
import org.distorted.helpers.ObjectShape;
25 9c06394a Leszek Koltunski
import org.distorted.helpers.ObjectSticker;
26 6cf89a3e Leszek Koltunski
import org.distorted.helpers.ScrambleState;
27 59b87d56 Leszek Koltunski
import org.distorted.library.main.DistortedEffects;
28
import org.distorted.library.main.DistortedTexture;
29
import org.distorted.library.mesh.MeshSquare;
30
import org.distorted.library.type.Static3D;
31
import org.distorted.library.type.Static4D;
32
import org.distorted.main.R;
33
34
///////////////////////////////////////////////////////////////////////////////////////////////////
35
36
public class TwistyRex extends TwistyObject
37
{
38
  // the four rotation axis of a RubikRex. Must be normalized.
39
  static final Static3D[] ROT_AXIS = new Static3D[]
40
         {
41
           new Static3D(+SQ3/3,+SQ3/3,+SQ3/3),
42
           new Static3D(+SQ3/3,+SQ3/3,-SQ3/3),
43
           new Static3D(+SQ3/3,-SQ3/3,+SQ3/3),
44
           new Static3D(+SQ3/3,-SQ3/3,-SQ3/3)
45
         };
46
47
  private static final int[] FACE_COLORS = new int[]
48
         {
49
           COLOR_YELLOW, COLOR_WHITE,
50
           COLOR_BLUE  , COLOR_GREEN,
51 323b217c Leszek Koltunski
           COLOR_RED   , COLOR_ORANGE
52 59b87d56 Leszek Koltunski
         };
53
54 f242ba04 Leszek Koltunski
  public static final float REX_D = 0.2f;
55 9c06394a Leszek Koltunski
56 91792184 Leszek Koltunski
  private ScrambleState[] mStates;
57 f242ba04 Leszek Koltunski
  private int[] mBasicAngle;
58
  private Static4D[] mQuats;
59
  private int[][] mFaceMap;
60
  private ObjectSticker[] mStickers;
61 01b2ef5a Leszek Koltunski
62 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
63
64
  TwistyRex(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
65
            DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
66
    {
67 db875721 Leszek Koltunski
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.REX, res, scrWidth);
68 91792184 Leszek Koltunski
    }
69 01b2ef5a Leszek Koltunski
70 91792184 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
71 01b2ef5a Leszek Koltunski
72 91792184 Leszek Koltunski
  ScrambleState[] getScrambleStates()
73
    {
74
    if( mStates==null )
75 01b2ef5a Leszek Koltunski
      {
76 91792184 Leszek Koltunski
      int[] tmp = {0,-1,0, 0,1,0, 2,-1,0, 2,1,0 };
77
78
      mStates = new ScrambleState[]
79
        {
80
        new ScrambleState( new int[][] {tmp,tmp,tmp,tmp} )
81
        };
82
      }
83
84
    return mStates;
85 59b87d56 Leszek Koltunski
    }
86
87 f242ba04 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
88
89
  private void initializeQuats()
90
    {
91
    mQuats = new Static4D[]
92
         {
93
         new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),
94
         new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
95
         new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
96
         new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
97
98
         new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),
99
         new Static4D(  0.5f,  0.5f,  0.5f, -0.5f ),
100
         new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
101
         new Static4D(  0.5f,  0.5f, -0.5f, -0.5f ),
102
         new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
103
         new Static4D(  0.5f, -0.5f,  0.5f, -0.5f ),
104
         new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
105
         new Static4D(  0.5f, -0.5f, -0.5f, -0.5f )
106
         };
107
    }
108
109 a480ee80 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
110
111
  int[] getSolvedQuats(int cubit, int numLayers)
112
    {
113 f242ba04 Leszek Koltunski
    if( mQuats==null ) initializeQuats();
114 a480ee80 Leszek Koltunski
    int status = retCubitSolvedStatus(cubit,numLayers);
115 f242ba04 Leszek Koltunski
    return status<0 ? null : buildSolvedQuats(MovementRex.FACE_AXIS[status],mQuats);
116 a480ee80 Leszek Koltunski
    }
117
118 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
119
120
  float getScreenRatio()
121
    {
122 16861599 Leszek Koltunski
    return 0.5f;
123 59b87d56 Leszek Koltunski
    }
124
125
///////////////////////////////////////////////////////////////////////////////////////////////////
126
127
  Static4D[] getQuats()
128
    {
129 f242ba04 Leszek Koltunski
    if( mQuats==null ) initializeQuats();
130
    return mQuats;
131 59b87d56 Leszek Koltunski
    }
132
133
///////////////////////////////////////////////////////////////////////////////////////////////////
134
135 abf36986 Leszek Koltunski
  int getNumFaceColors()
136 59b87d56 Leszek Koltunski
    {
137
    return FACE_COLORS.length;
138
    }
139
140
///////////////////////////////////////////////////////////////////////////////////////////////////
141
142
  boolean shouldResetTextureMaps()
143
    {
144
    return false;
145
    }
146
147 169219a7 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
148
149
  int getSolvedFunctionIndex()
150
    {
151
    return 0;
152
    }
153
154 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
155
156 a64e07d0 Leszek Koltunski
  int getNumStickerTypes(int numLayers)
157 59b87d56 Leszek Koltunski
    {
158 f242ba04 Leszek Koltunski
    return 3;
159 59b87d56 Leszek Koltunski
    }
160
161
///////////////////////////////////////////////////////////////////////////////////////////////////
162
163 e6734aa9 Leszek Koltunski
  float[][] getCuts(int numLayers)
164 59b87d56 Leszek Koltunski
    {
165 16861599 Leszek Koltunski
    float C = SQ3*0.45f; // bit less than 1/2 of the length of the main diagonal
166 c75ab933 Leszek Koltunski
    float[] cut = new float[] {-C,+C};
167 e6734aa9 Leszek Koltunski
    return new float[][] { cut,cut,cut,cut };
168 59b87d56 Leszek Koltunski
    }
169
170
///////////////////////////////////////////////////////////////////////////////////////////////////
171
172
  int getNumCubitFaces()
173
    {
174 f242ba04 Leszek Koltunski
    return 6;
175 59b87d56 Leszek Koltunski
    }
176
177
///////////////////////////////////////////////////////////////////////////////////////////////////
178
179 e6cf7283 Leszek Koltunski
  float[][] getCubitPositions(int numLayers)
180 59b87d56 Leszek Koltunski
    {
181 16861599 Leszek Koltunski
    final float DIST1= 1.50f;
182
    final float DIST2= (1+2*REX_D)/2;
183
    final float DIST3= 1.53f;
184 c75ab933 Leszek Koltunski
185
    final float[][] CENTERS = new float[24+6+12][];
186
187
    CENTERS[ 0] = new float[] { +DIST3, +DIST2, +DIST2};
188
    CENTERS[ 1] = new float[] { +DIST3, +DIST2, -DIST2};
189
    CENTERS[ 2] = new float[] { +DIST3, -DIST2, -DIST2};
190
    CENTERS[ 3] = new float[] { +DIST3, -DIST2, +DIST2};
191
    CENTERS[ 4] = new float[] { -DIST3, +DIST2, +DIST2};
192
    CENTERS[ 5] = new float[] { -DIST3, +DIST2, -DIST2};
193
    CENTERS[ 6] = new float[] { -DIST3, -DIST2, -DIST2};
194
    CENTERS[ 7] = new float[] { -DIST3, -DIST2, +DIST2};
195
    CENTERS[ 8] = new float[] { +DIST2, +DIST3, +DIST2};
196
    CENTERS[ 9] = new float[] { +DIST2, +DIST3, -DIST2};
197
    CENTERS[10] = new float[] { -DIST2, +DIST3, -DIST2};
198
    CENTERS[11] = new float[] { -DIST2, +DIST3, +DIST2};
199
    CENTERS[12] = new float[] { +DIST2, -DIST3, +DIST2};
200
    CENTERS[13] = new float[] { +DIST2, -DIST3, -DIST2};
201
    CENTERS[14] = new float[] { -DIST2, -DIST3, -DIST2};
202
    CENTERS[15] = new float[] { -DIST2, -DIST3, +DIST2};
203
    CENTERS[16] = new float[] { +DIST2, +DIST2, +DIST3};
204
    CENTERS[17] = new float[] { +DIST2, -DIST2, +DIST3};
205
    CENTERS[18] = new float[] { -DIST2, -DIST2, +DIST3};
206
    CENTERS[19] = new float[] { -DIST2, +DIST2, +DIST3};
207
    CENTERS[20] = new float[] { +DIST2, +DIST2, -DIST3};
208
    CENTERS[21] = new float[] { +DIST2, -DIST2, -DIST3};
209
    CENTERS[22] = new float[] { -DIST2, -DIST2, -DIST3};
210
    CENTERS[23] = new float[] { -DIST2, +DIST2, -DIST3};
211
212
    CENTERS[24] = new float[] { +DIST3, +0.00f, +0.00f};
213
    CENTERS[25] = new float[] { -DIST3, +0.00f, +0.00f};
214
    CENTERS[26] = new float[] { +0.00f, +DIST3, +0.00f};
215
    CENTERS[27] = new float[] { +0.00f, -DIST3, +0.00f};
216
    CENTERS[28] = new float[] { +0.00f, +0.00f, +DIST3};
217
    CENTERS[29] = new float[] { +0.00f, +0.00f, -DIST3};
218
219
    CENTERS[30] = new float[] { +0.00f, +DIST1, +DIST1};
220
    CENTERS[31] = new float[] { +DIST1, +0.00f, +DIST1};
221
    CENTERS[32] = new float[] { +0.00f, -DIST1, +DIST1};
222
    CENTERS[33] = new float[] { -DIST1, +0.00f, +DIST1};
223
    CENTERS[34] = new float[] { +DIST1, +DIST1, +0.00f};
224
    CENTERS[35] = new float[] { +DIST1, -DIST1, +0.00f};
225
    CENTERS[36] = new float[] { -DIST1, -DIST1, +0.00f};
226
    CENTERS[37] = new float[] { -DIST1, +DIST1, +0.00f};
227
    CENTERS[38] = new float[] { +0.00f, +DIST1, -DIST1};
228
    CENTERS[39] = new float[] { +DIST1, +0.00f, -DIST1};
229
    CENTERS[40] = new float[] { +0.00f, -DIST1, -DIST1};
230
    CENTERS[41] = new float[] { -DIST1, +0.00f, -DIST1};
231 59b87d56 Leszek Koltunski
232
    return CENTERS;
233
    }
234
235
///////////////////////////////////////////////////////////////////////////////////////////////////
236
237 a38fe4b2 Leszek Koltunski
  ObjectShape getObjectShape(int cubit, int numLayers)
238
    {
239
    int variant = getCubitVariant(cubit,numLayers);
240
241
    if( variant==0 )
242
      {
243
      float G = (1-REX_D)*SQ2/2;
244 16861599 Leszek Koltunski
      double[][] vertices ={{-0.10f,0.70f,0},{-0.70f,0.10f,0},{+0.65f,-0.71f,0},{+0.71f,-0.65f,0}};
245 a38fe4b2 Leszek Koltunski
      int[][] vertIndexes = { {0,1,2,3},{3,2,1,0} };
246 16861599 Leszek Koltunski
      float[][] centers= new float[][] { {0.0f,0.0f,-G} };
247
      float[][] corners= new float[][] { {0.03f,0.30f} };
248 a38fe4b2 Leszek Koltunski
      int[] indices= {-1,-1,0,0};
249
      int[] bandIndices= new int[] { 0,1 };
250 16861599 Leszek Koltunski
      float[][] bands = { {+0.016f,10,G/3,0.5f,5,1,1},{+0.230f,45,G/3,0.0f,2,0,0} };
251 a38fe4b2 Leszek Koltunski
252
      return new ObjectShape(vertices,vertIndexes,bands,bandIndices,corners,indices,centers,indices,getNumCubitFaces(), null);
253
      }
254
    else if( variant==1 )
255
      {
256 16861599 Leszek Koltunski
      float G = 3*REX_D;
257
      double[][] vertices= { { -G, 0, 0 },{ 0, -G, 0 },{ +G, 0, 0 },{ 0,+G,0 } };
258 a38fe4b2 Leszek Koltunski
      int[][] vertIndexes= { {0,1,2,3},{3,2,1,0} };
259
      int[] indices= {-1,-1,-1,-1};
260
      int[] bandIndices= new int[] { 0,1 };
261 16861599 Leszek Koltunski
      float[][] bands = { {0.025f,10,G/2,0.5f,5,0,0},{0.000f,45,G/2,0.0f,2,0,0} };
262 a38fe4b2 Leszek Koltunski
263
      return new ObjectShape(vertices,vertIndexes,bands,bandIndices,null,indices,null,indices,getNumCubitFaces(), null);
264
      }
265
    else
266
      {
267 16861599 Leszek Koltunski
      float E = 1.5f - 3*REX_D;
268
      float F = 1.5f;
269 a38fe4b2 Leszek Koltunski
      float G = (float)Math.sqrt(E*E+F*F);
270 16861599 Leszek Koltunski
      double[][] vertices = { { -F, 0, 0 },{  0,-E, 0 },{ +F, 0, 0 },{  0, 0,-E } };
271 a38fe4b2 Leszek Koltunski
      int[][] vertIndexes = { {0,1,2}, {0,2,3}, {0,3,1}, {1,3,2} };
272 16861599 Leszek Koltunski
      float[][] centers= new float[][] { {0.0f,-1.5f,-1.5f} };
273
      float[][] corners= new float[][] { {0.06f,0.20f} };
274 a38fe4b2 Leszek Koltunski
      int[] indices= {0,-1,0,-1};
275
      int[] bandIndices= new int[] { 0,0,1,1 };
276 16861599 Leszek Koltunski
      float[][] bands = { {0.03f,27,F/3,0.8f,5,2,3},{0.01f,45,G/3,0.2f,3,1,2} };
277 a38fe4b2 Leszek Koltunski
278
      return new ObjectShape(vertices,vertIndexes,bands,bandIndices,corners,indices,centers,indices,getNumCubitFaces(), null);
279
      }
280
    }
281
282
///////////////////////////////////////////////////////////////////////////////////////////////////
283
284 3e605536 Leszek Koltunski
  Static4D getQuat(int cubit, int numLayers)
285 59b87d56 Leszek Koltunski
    {
286 f242ba04 Leszek Koltunski
    if( mQuats==null ) initializeQuats();
287
288 59b87d56 Leszek Koltunski
    switch(cubit)
289
      {
290 80ec6abf Leszek Koltunski
      case  0: return new Static4D(+SQ2/2,     0,+SQ2/2,     0);
291 f242ba04 Leszek Koltunski
      case  1: return mQuats[5];
292 80ec6abf Leszek Koltunski
      case  2: return new Static4D(     0,-SQ2/2,     0, SQ2/2);
293 f242ba04 Leszek Koltunski
      case  3: return mQuats[8];
294
      case  4: return mQuats[6];
295 80ec6abf Leszek Koltunski
      case  5: return new Static4D(-SQ2/2,     0,+SQ2/2,     0);
296 f242ba04 Leszek Koltunski
      case  6: return mQuats[11];
297 80ec6abf Leszek Koltunski
      case  7: return new Static4D(     0,+SQ2/2,     0, SQ2/2);
298
      case  8: return new Static4D(+SQ2/2,     0,     0, SQ2/2);
299 f242ba04 Leszek Koltunski
      case  9: return mQuats[10];
300 59b87d56 Leszek Koltunski
      case 10: return new Static4D(     0,+SQ2/2,+SQ2/2,     0);
301 f242ba04 Leszek Koltunski
      case 11: return mQuats[4];
302
      case 12: return mQuats[9];
303 59b87d56 Leszek Koltunski
      case 13: return new Static4D(-SQ2/2,     0,     0, SQ2/2);
304 f242ba04 Leszek Koltunski
      case 14: return mQuats[7];
305 59b87d56 Leszek Koltunski
      case 15: return new Static4D(     0,-SQ2/2,+SQ2/2,     0);
306
      case 16: return new Static4D(     0,     0,-SQ2/2, SQ2/2);
307 f242ba04 Leszek Koltunski
      case 17: return mQuats[0];
308 59b87d56 Leszek Koltunski
      case 18: return new Static4D(     0,     0,+SQ2/2, SQ2/2);
309 f242ba04 Leszek Koltunski
      case 19: return mQuats[3];
310
      case 20: return mQuats[1];
311 80ec6abf Leszek Koltunski
      case 21: return new Static4D(+SQ2/2,-SQ2/2,     0,     0);
312 f242ba04 Leszek Koltunski
      case 22: return mQuats[2];
313 80ec6abf Leszek Koltunski
      case 23: return new Static4D(+SQ2/2,+SQ2/2,     0,     0);
314 59b87d56 Leszek Koltunski
315 80ec6abf Leszek Koltunski
      case 24: return new Static4D(     0,-SQ2/2,     0, SQ2/2);
316
      case 25: return new Static4D(     0,+SQ2/2,     0, SQ2/2);
317 59b87d56 Leszek Koltunski
      case 26: return new Static4D(+SQ2/2,     0,     0, SQ2/2);
318
      case 27: return new Static4D(-SQ2/2,     0,     0, SQ2/2);
319 f242ba04 Leszek Koltunski
      case 28: return mQuats[0];
320
      case 29: return mQuats[1];
321 59b87d56 Leszek Koltunski
322 f242ba04 Leszek Koltunski
      case 30: return mQuats[0];
323 59b87d56 Leszek Koltunski
      case 31: return new Static4D(     0,     0,+SQ2/2, SQ2/2);
324 f242ba04 Leszek Koltunski
      case 32: return mQuats[3];
325 59b87d56 Leszek Koltunski
      case 33: return new Static4D(     0,     0,-SQ2/2, SQ2/2);
326 80ec6abf Leszek Koltunski
      case 34: return new Static4D(     0,-SQ2/2,     0, SQ2/2);
327 f242ba04 Leszek Koltunski
      case 35: return mQuats[7];
328
      case 36: return mQuats[9];
329 80ec6abf Leszek Koltunski
      case 37: return new Static4D(     0,+SQ2/2,     0, SQ2/2);
330 59b87d56 Leszek Koltunski
      case 38: return new Static4D(+SQ2/2,     0,     0, SQ2/2);
331 f242ba04 Leszek Koltunski
      case 39: return mQuats[8];
332
      case 40: return mQuats[1];
333
      case 41: return mQuats[6];
334 59b87d56 Leszek Koltunski
      }
335
336 f242ba04 Leszek Koltunski
    return mQuats[0];
337 59b87d56 Leszek Koltunski
    }
338
339
///////////////////////////////////////////////////////////////////////////////////////////////////
340
341 3e605536 Leszek Koltunski
  int getNumCubitVariants(int numLayers)
342 59b87d56 Leszek Koltunski
    {
343 a38fe4b2 Leszek Koltunski
    return 3;
344
    }
345 c75ab933 Leszek Koltunski
346 a38fe4b2 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
347 c75ab933 Leszek Koltunski
348 a38fe4b2 Leszek Koltunski
  int getCubitVariant(int cubit, int numLayers)
349
    {
350
    return cubit<24 ? 0 : (cubit<30?1:2);
351
    }
352 c75ab933 Leszek Koltunski
353 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
354
355
  int getFaceColor(int cubit, int cubitface, int numLayers)
356
    {
357 f242ba04 Leszek Koltunski
    if( mFaceMap==null )
358
      {
359
      mFaceMap = new int[][]
360
         {
361
           {  0, 18,18,18,18,18 },
362
           {  0, 18,18,18,18,18 },
363
           {  0, 18,18,18,18,18 },
364
           {  0, 18,18,18,18,18 },
365
           {  1, 18,18,18,18,18 },
366
           {  1, 18,18,18,18,18 },
367
           {  1, 18,18,18,18,18 },
368
           {  1, 18,18,18,18,18 },
369
           {  2, 18,18,18,18,18 },
370
           {  2, 18,18,18,18,18 },
371
           {  2, 18,18,18,18,18 },
372
           {  2, 18,18,18,18,18 },
373
           {  3, 18,18,18,18,18 },
374
           {  3, 18,18,18,18,18 },
375
           {  3, 18,18,18,18,18 },
376
           {  3, 18,18,18,18,18 },
377
           {  4, 18,18,18,18,18 },
378
           {  4, 18,18,18,18,18 },
379
           {  4, 18,18,18,18,18 },
380
           {  4, 18,18,18,18,18 },
381
           {  5, 18,18,18,18,18 },
382
           {  5, 18,18,18,18,18 },
383
           {  5, 18,18,18,18,18 },
384
           {  5, 18,18,18,18,18 },
385
386
           {  6, 18,18,18,18,18 },
387
           {  7, 18,18,18,18,18 },
388
           {  8, 18,18,18,18,18 },
389
           {  9, 18,18,18,18,18 },
390
           { 10, 18,18,18,18,18 },
391
           { 11, 18,18,18,18,18 },
392
393
           { 16,14, 18,18,18,18 },
394
           { 16,12, 18,18,18,18 },
395
           { 16,15, 18,18,18,18 },
396
           { 16,13, 18,18,18,18 },
397
           { 12,14, 18,18,18,18 },
398
           { 15,12, 18,18,18,18 },
399
           { 15,13, 18,18,18,18 },
400
           { 13,14, 18,18,18,18 },
401
           { 14,17, 18,18,18,18 },
402
           { 12,17, 18,18,18,18 },
403
           { 17,15, 18,18,18,18 },
404
           { 13,17, 18,18,18,18 },
405
         };
406
      }
407
408 59b87d56 Leszek Koltunski
    return mFaceMap[cubit][cubitface];
409
    }
410
411
///////////////////////////////////////////////////////////////////////////////////////////////////
412
413 9c06394a Leszek Koltunski
  int getColor(int face)
414 59b87d56 Leszek Koltunski
    {
415 9c06394a Leszek Koltunski
    return FACE_COLORS[face];
416
    }
417 29bc084f Leszek Koltunski
418 9c06394a Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
419 29bc084f Leszek Koltunski
420 9c06394a Leszek Koltunski
  ObjectSticker retSticker(int face)
421
    {
422 f242ba04 Leszek Koltunski
    if( mStickers==null )
423
      {
424
      float[][] STICKERS = new float[][]
425
          {
426
             { -0.5f, 0.1428f, -0.1428f, 0.5f, 0.35f, -0.35f },
427
             { -0.5f, 0.0f, 0.0f, -0.5f, 0.5f, 0.0f, 0.0f, 0.5f },
428
             { -0.525f, 0.105f, 0.525f, 0.105f, 0.000f, -0.210f  }
429
          };
430
431
      final float F = (float)(Math.PI/20);
432
      final float R1= 0.02f;
433
      final float R2= 0.09f;
434
      final float R3= 0.06f;
435
      final float[][] angles = { { -F/2,F,F },null,{ F/10,-F,-F } };
436
      final float[][] radii  = { {R1,R1,R1},{R2,R2,R2,R2},{0,0,R3} };
437
      final float[] strokes = { 0.06f, 0.07f, 0.05f };
438
439
      mStickers = new ObjectSticker[STICKERS.length];
440
441
      for(int s=0; s<STICKERS.length; s++)
442
        {
443
        mStickers[s] = new ObjectSticker(STICKERS[s],angles[s],radii[s],strokes[s]);
444
        }
445
      }
446
447 abf36986 Leszek Koltunski
    return mStickers[face/NUM_FACE_COLORS];
448 59b87d56 Leszek Koltunski
    }
449
450
///////////////////////////////////////////////////////////////////////////////////////////////////
451
452
  float returnMultiplier()
453
    {
454
    return 2.0f;
455
    }
456
457
///////////////////////////////////////////////////////////////////////////////////////////////////
458 e1dc3366 Leszek Koltunski
// PUBLIC API
459 59b87d56 Leszek Koltunski
460 e1dc3366 Leszek Koltunski
  public Static3D[] getRotationAxis()
461
    {
462
    return ROT_AXIS;
463
    }
464
465
///////////////////////////////////////////////////////////////////////////////////////////////////
466
467
  public int[] getBasicAngle()
468
    {
469 f242ba04 Leszek Koltunski
    if( mBasicAngle ==null ) mBasicAngle = new int[] { 3,3,3,3 };
470
    return mBasicAngle;
471 e1dc3366 Leszek Koltunski
    }
472
473 59b87d56 Leszek Koltunski
///////////////////////////////////////////////////////////////////////////////////////////////////
474
475
  public int getObjectName(int numLayers)
476
    {
477
    return R.string.rex3;
478
    }
479
480
///////////////////////////////////////////////////////////////////////////////////////////////////
481
482
  public int getInventor(int numLayers)
483
    {
484
    return R.string.rex3_inventor;
485
    }
486
487
///////////////////////////////////////////////////////////////////////////////////////////////////
488
489
  public int getComplexity(int numLayers)
490
    {
491
    return 3;
492
    }
493
}