Project

General

Profile

« Previous | Next » 

Revision b2496566

Added by Leszek Koltunski 9 months ago

Finish Mosaic Cube.

View differences:

src/main/java/org/distorted/objectlib/objects/TwistyRedi.java
22 22
import org.distorted.objectlib.main.InitAssets;
23 23
import org.distorted.objectlib.main.InitData;
24 24
import org.distorted.objectlib.main.ObjectSignatures;
25
import org.distorted.objectlib.scrambling.ScrambleEdgeGenerator;
25 26
import org.distorted.objectlib.touchcontrol.TouchControlHexahedron;
26 27
import org.distorted.objectlib.main.ObjectType;
27 28
import org.distorted.objectlib.helpers.ObjectShape;
......
44 45
  private float[][] mCuts;
45 46
  private float[][] mPosition;
46 47
  private int[] mQuatIndex;
48
  private boolean[][] mRotatable;
47 49

  
48 50
///////////////////////////////////////////////////////////////////////////////////////////////////
49 51

  
......
57 59
  @Override
58 60
  public float[][] returnRotationFactor()
59 61
    {
60
    float C = 1.5f;
62
    float C = 2.0f;
61 63
    int numL = getNumLayers()[0];
62 64
    float[] f = new float[numL];
63 65
    for(int i=0; i<numL; i++) f[i] = C;
......
70 72
    {
71 73
    if( mEdges==null )
72 74
      {
73
      mEdges = new int[][]
75
      int[] numLayers = getNumLayers();
76

  
77
      if( numLayers[0]==3 )
74 78
        {
75
          { 0,8,1,8, 4,1,5,1, 6,7,7,7, 10,2,11,2, 12,6,13,6, 16,3,17,3, 18,5,19,5, 22,4,23,4 },  // 0
76
          {                            10,2,11,2,            16,3,17,3, 18,5,19,5            },  // 1
77
          {          4,1,5,1,                     12,6,13,6,                       22,4,23,4 },  // 2
78
          {          4,1,5,1, 6,7,7,7,                                             22,4,23,4 },  // 3
79
          { 0,8,1,8,                   10,2,11,2,            16,3,17,3                       },  // 4
80
          {          4,1,5,1, 6,7,7,7,            12,6,13,6                                  },  // 5
81
          { 0,8,1,8,                   10,2,11,2,                       18,5,19,5            },  // 6
82
          { 0,8,1,8,                                         16,3,17,3, 18,5,19,5            },  // 7
83
          {                   6,7,7,7,            12,6,13,6,                       22,4,23,4 },  // 8
84
        };
79
        mEdges = new int[][]
80
          {
81
            { 0,8,1,8, 4,1,5,1, 6,7,7,7, 10,2,11,2, 12,6,13,6, 16,3,17,3, 18,5,19,5, 22,4,23,4 },  // 0
82
            {                            10,2,11,2,            16,3,17,3, 18,5,19,5            },  // 1
83
            {          4,1,5,1,                     12,6,13,6,                       22,4,23,4 },  // 2
84
            {          4,1,5,1, 6,7,7,7,                                             22,4,23,4 },  // 3
85
            { 0,8,1,8,                   10,2,11,2,            16,3,17,3                       },  // 4
86
            {          4,1,5,1, 6,7,7,7,            12,6,13,6                                  },  // 5
87
            { 0,8,1,8,                   10,2,11,2,                       18,5,19,5            },  // 6
88
            { 0,8,1,8,                                         16,3,17,3, 18,5,19,5            },  // 7
89
            {                   6,7,7,7,            12,6,13,6,                       22,4,23,4 },  // 8
90
          };
91
        }
92
      else
93
        {
94
        if( mRotatable==null ) mRotatable = createRotatable();
95
        mEdges = ScrambleEdgeGenerator.getScrambleEdgesSingle(mBasicAngle, mRotatable);
96
        }
85 97
      }
86 98

  
87 99
    return mEdges;
88 100
    }
89 101

  
102
///////////////////////////////////////////////////////////////////////////////////////////////////
103

  
104
  @Override
105
  public int[][] getScrambleAlgorithms()
106
    {
107
    if( mRotatable==null ) mRotatable = createRotatable();
108
    return ScrambleEdgeGenerator.getScramblingAlgorithms(mBasicAngle, mRotatable);
109
    }
110

  
90 111
///////////////////////////////////////////////////////////////////////////////////////////////////
91 112

  
92 113
  public float[][] getCuts(int[] numLayers)
......
99 120
                float[] c3 = new float[] {-C3,C3};
100 121
                mCuts = new float[][] { c3,c3,c3,c3 };
101 122
                break;
102
        case 5: float A5 = 25*SQ3/16;
103
                float B5 = 25*SQ3/12;
123
        case 5: float A5 = 5*SQ3/3;
124
                float B5 = 3*SQ3/3;
104 125
                float[] c5 = new float[] {-A5,-B5, B5, A5};
105 126
                mCuts = new float[][] { c5,c5,c5,c5 };
106 127
                break;
......
113 134

  
114 135
///////////////////////////////////////////////////////////////////////////////////////////////////
115 136

  
116
  public boolean[][] getLayerRotatable(int[] numLayers)
137
  private boolean[][] createRotatable()
117 138
    {
118
    switch( numLayers[0] )
139
    int numL = getNumLayers()[0];
140

  
141
    switch( numL )
119 142
      {
120 143
      case 3: boolean[] t3 = new boolean[] {true,false,true};
121 144
              return new boolean[][] { t3,t3,t3,t3 };
......
125 148
    return null;
126 149
    }
127 150

  
151
///////////////////////////////////////////////////////////////////////////////////////////////////
152

  
153
  public boolean[][] getLayerRotatable(int[] numLayers)
154
    {
155
    if( mRotatable==null ) mRotatable = createRotatable();
156
    return mRotatable;
157
    }
158

  
128 159
///////////////////////////////////////////////////////////////////////////////////////////////////
129 160

  
130 161
  public int getTouchControlType()
......
282 313

  
283 314
  public Static4D getCubitQuats(int cubit, int[] numLayers)
284 315
    {
285
    if( cubit<8 )
286
      switch(cubit)
287
        {
288
        case  0: return mObjectQuats[0];                   //  unit quat
289
        case  1: return new Static4D( SQ2/2,0,0,SQ2/2);    //  90 along X
290
        case  2: return new Static4D(-SQ2/2,0,0,SQ2/2);    // -90 along X
291
        case  3: return mObjectQuats[9];                   // 180 along X
292
        case  4: return new Static4D(0, SQ2/2,0,SQ2/2);    //  90 along Y
293
        case  5: return mObjectQuats[11];                  // 180 along Y
294
        case  6: return mObjectQuats[10];                  // 180 along Z
295
        case  7: return new Static4D(SQ2/2,0,-SQ2/2,0);    // 180 along (SQ2/2,0,-SQ2/2)
296
        }
316
    if( mQuatIndex==null ) mQuatIndex = new int[] { 0,2,10,8,1,4,6,7,11,5,9,3,   0,11,2,3,4,1 };
297 317

  
298
    if( mQuatIndex==null )
318
    switch(cubit)
299 319
      {
300
      mQuatIndex = new int[]
301
        {
302
        0,2,10,8,1,4,6,7,11,5,9,3,
303
        0,11,2,3,4,1
304
        };
320
      case  0: return mObjectQuats[0];                   //  unit quat
321
      case  1: return new Static4D( SQ2/2,0,0,SQ2/2);    //  90 along X
322
      case  2: return new Static4D(-SQ2/2,0,0,SQ2/2);    // -90 along X
323
      case  3: return mObjectQuats[9];                   // 180 along X
324
      case  4: return new Static4D(0, SQ2/2,0,SQ2/2);    //  90 along Y
325
      case  5: return mObjectQuats[11];                  // 180 along Y
326
      case  6: return mObjectQuats[10];                  // 180 along Z
327
      case  7: return new Static4D(SQ2/2,0,-SQ2/2,0);    // 180 along (SQ2/2,0,-SQ2/2)
328
      default: int index = numLayers[0]==3 ? (cubit-8) : (cubit<32 ? (cubit-8)/2 : (cubit-32)/4 + 12);
329
               return mObjectQuats[mQuatIndex[index]];
305 330
      }
306

  
307
    int index = numLayers[0]==3 ? (cubit-8) : (cubit<32 ? (cubit-8)/2 : (cubit-32)/4 + 12);
308
    return mObjectQuats[mQuatIndex[index]];
309 331
    }
310 332

  
311 333
///////////////////////////////////////////////////////////////////////////////////////////////////
......
511 533

  
512 534
  public int[][] getBasicAngles()
513 535
    {
514
    if( mBasicAngle ==null )
536
    if( mBasicAngle==null )
515 537
      {
516 538
      int num = getNumLayers()[0];
517 539
      int[] tmp = new int[num];

Also available in: Unified diff