Project

General

Profile

« Previous | Next » 

Revision e6cf7283

Added by Leszek Koltunski about 3 years ago

Change the Cubit center from a Static3D to a float[].
The point: now we can have more than one center, and bandaged objects need more than one, because in this way they are going to fill up their RotationRow bitmaps.

View differences:

src/main/java/org/distorted/objects/Cubit.java
21 21

  
22 22
import android.content.SharedPreferences;
23 23

  
24
import org.distorted.library.type.Static3D;
25 24
import org.distorted.library.type.Static4D;
26 25
import org.distorted.main.RubikSurfaceView;
27 26

  
......
29 28

  
30 29
class Cubit
31 30
  {
32
  private final Static3D mOrigPosition;
33
  private final Static3D mCurrentPosition;
31
  private final float[] mOrigPosition;
32
  private final float[] mCurrentPosition;
34 33
  private TwistyObject mParent;
35 34
  private final int mNumAxis;
35
  private final int mLen;
36 36

  
37 37
  int mQuatIndex;
38 38
  int[] mRotationRow;
39 39

  
40 40
///////////////////////////////////////////////////////////////////////////////////////////////////
41 41

  
42
  Cubit(TwistyObject parent, Static3D position)
42
  Cubit(TwistyObject parent, float[] position)
43 43
    {
44
    float x = position.get0();
45
    float y = position.get1();
46
    float z = position.get2();
44
    mQuatIndex= 0;
45
    mParent   = parent;
46
    mLen      = position.length;
47 47

  
48
    mParent          = parent;
49
    mOrigPosition    = new Static3D(x,y,z);
50
    mCurrentPosition = new Static3D(x,y,z);
51
    mQuatIndex       = 0;
48
    mOrigPosition    = new float[mLen];
49
    mCurrentPosition = new float[mLen];
50

  
51
    for(int i=0; i<mLen; i++)
52
      {
53
      mOrigPosition[i]    = position[i];
54
      mCurrentPosition[i] = position[i];
55
      }
52 56

  
53 57
    mNumAxis     = mParent.ROTATION_AXIS.length;
54 58
    mRotationRow = new int[mNumAxis];
......
113 117

  
114 118
  private void computeRotationRow()
115 119
    {
116
    float x = mCurrentPosition.get0();
117
    float y = mCurrentPosition.get1();
118
    float z = mCurrentPosition.get2();
119

  
120 120
    for(int i=0; i<mNumAxis; i++)
121 121
      {
122
      mRotationRow[i] = mParent.computeRow(x,y,z,i);
122
      mRotationRow[i] = mParent.computeRow(mCurrentPosition,i);
123 123
      }
124 124
    }
125 125

  
126 126
///////////////////////////////////////////////////////////////////////////////////////////////////
127 127

  
128
  Static3D getOrigPosition()
128
  float[] getOrigPosition()
129 129
    {
130 130
    return mOrigPosition;
131 131
    }
......
134 134

  
135 135
  void modifyCurrentPosition(Static4D quat)
136 136
    {
137
    float cubitCenterX = mCurrentPosition.get0();
138
    float cubitCenterY = mCurrentPosition.get1();
139
    float cubitCenterZ = mCurrentPosition.get2();
137
    Static4D cubitCenter;
138
    Static4D rotatedCenter;
139
    int len = mLen/3;
140 140

  
141
    Static4D cubitCenter =  new Static4D(cubitCenterX, cubitCenterY, cubitCenterZ, 0);
142
    Static4D rotatedCenter = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat);
141
    for(int i=0; i<len; i++)
142
      {
143
      cubitCenter =  new Static4D(mCurrentPosition[3*i], mCurrentPosition[3*i+1], mCurrentPosition[3*i+2], 0);
144
      rotatedCenter = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat);
143 145

  
144
    float rotatedX = rotatedCenter.get0();
145
    float rotatedY = rotatedCenter.get1();
146
    float rotatedZ = rotatedCenter.get2();
146
      mCurrentPosition[3*i  ] = rotatedCenter.get0();
147
      mCurrentPosition[3*i+1] = rotatedCenter.get1();
148
      mCurrentPosition[3*i+2] = rotatedCenter.get2();
147 149

  
148
    mCurrentPosition.set(rotatedX, rotatedY, rotatedZ);
149
    mParent.clampPos(mCurrentPosition);
150
      mParent.clampPos(mCurrentPosition, 3*i);
151
      }
150 152

  
151 153
    computeRotationRow();
152 154
    }
......
170 172

  
171 173
  void savePreferences(SharedPreferences.Editor editor)
172 174
    {
173
    String number = mOrigPosition.get0()+"_"+mOrigPosition.get1()+"_"+mOrigPosition.get2();
175
    String number = mOrigPosition[0]+"_"+mOrigPosition[1]+"_"+mOrigPosition[2];
174 176
    editor.putInt("q_"+number, mQuatIndex);
175 177
    }
176 178

  
......
178 180

  
179 181
  int restorePreferences(SharedPreferences preferences)
180 182
    {
181
    String number = mOrigPosition.get0()+"_"+mOrigPosition.get1()+"_"+mOrigPosition.get2();
183
    String number = mOrigPosition[0]+"_"+mOrigPosition[1]+"_"+mOrigPosition[2];
182 184
    mQuatIndex = preferences.getInt("q_"+number, 0);
183 185
    return mQuatIndex;
184 186
    }
......
200 202
  void solve()
201 203
    {
202 204
    mQuatIndex = 0;
203
    mCurrentPosition.set(mOrigPosition);
205
    System.arraycopy(mOrigPosition, 0, mCurrentPosition, 0, mCurrentPosition.length);
204 206
    computeRotationRow();
205 207
    }
206 208

  
......
212 214
    }
213 215

  
214 216
///////////////////////////////////////////////////////////////////////////////////////////////////
217
// this is only needed for MODE_REPLACE objects (i.e. - currently - CUBE_3), so it is enough to only
218
// take into consideration the first position.
215 219

  
216 220
  float getDistSquared(float[] point)
217 221
    {
218
    float dx = mCurrentPosition.get0() - point[0];
219
    float dy = mCurrentPosition.get1() - point[1];
220
    float dz = mCurrentPosition.get2() - point[2];
222
    float dx = mCurrentPosition[0] - point[0];
223
    float dy = mCurrentPosition[1] - point[1];
224
    float dz = mCurrentPosition[2] - point[2];
221 225

  
222 226
    return dx*dx + dy*dy + dz*dz;
223 227
    }
src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
193 193

  
194 194
///////////////////////////////////////////////////////////////////////////////////////////////////
195 195

  
196
  Static3D[] getCubitPositions(int size)
196
  float[][] getCubitPositions(int size)
197 197
    {
198 198
    int numCubits = getNumCubits();
199
    Static3D[] tmp = new Static3D[numCubits];
199
    float[][] tmp = new float[numCubits][];
200 200

  
201 201
    for(int cubit=0; cubit<numCubits; cubit++)
202 202
      {
203
      float[] pos = getCubitPosition(cubit);
204
      tmp[cubit] = new Static3D(pos[0],pos[1],pos[2]);
203
      tmp[cubit] = getCubitPosition(cubit);
205 204
      }
206 205

  
207 206
    return tmp;
src/main/java/org/distorted/objects/TwistyCube.java
136 136

  
137 137
///////////////////////////////////////////////////////////////////////////////////////////////////
138 138

  
139
  Static3D[] getCubitPositions(int size)
139
  float[][] getCubitPositions(int size)
140 140
    {
141 141
    int numCubits = size>1 ? 6*size*size - 12*size + 8 : 1;
142
    Static3D[] tmp = new Static3D[numCubits];
142
    float[][] tmp = new float[numCubits][];
143 143

  
144 144
    float diff = 0.5f*(size-1);
145 145
    int currentPosition = 0;
......
149 149
        for(int z = 0; z<size; z++)
150 150
          if( x==0 || x==size-1 || y==0 || y==size-1 || z==0 || z==size-1 )
151 151
            {
152
            tmp[currentPosition++] = new Static3D(x-diff,y-diff,z-diff);
152
            tmp[currentPosition++] = new float[] {x-diff,y-diff,z-diff};
153 153
            }
154 154

  
155 155
    return tmp;
src/main/java/org/distorted/objects/TwistyDiamond.java
81 81
  private static final float DIST = 0.50f;
82 82

  
83 83
  // centers of the 6 octahedrons + 8 tetrahedrons ( i.e. of the all 14 cubits)
84
  private static final Static3D[] CENTERS = new Static3D[]
84
  private static final float[][] CENTERS = new float[][]
85 85
         {
86
           new Static3D( DIST,          0, DIST ),
87
           new Static3D( DIST,          0,-DIST ),
88
           new Static3D(-DIST,          0,-DIST ),
89
           new Static3D(-DIST,          0, DIST ),
90
           new Static3D(    0, DIST*SQ2  ,    0 ),
91
           new Static3D(    0,-DIST*SQ2  ,    0 ),
92

  
93
           new Static3D(    0, DIST*SQ2/2, DIST ),
94
           new Static3D( DIST, DIST*SQ2/2,    0 ),
95
           new Static3D(    0, DIST*SQ2/2,-DIST ),
96
           new Static3D(-DIST, DIST*SQ2/2,    0 ),
97
           new Static3D(    0,-DIST*SQ2/2, DIST ),
98
           new Static3D( DIST,-DIST*SQ2/2,    0 ),
99
           new Static3D(    0,-DIST*SQ2/2,-DIST ),
100
           new Static3D(-DIST,-DIST*SQ2/2,    0 )
86
             { DIST,          0, DIST },
87
             { DIST,          0,-DIST },
88
             {-DIST,          0,-DIST },
89
             {-DIST,          0, DIST },
90
             {    0, DIST*SQ2  ,    0 },
91
             {    0,-DIST*SQ2  ,    0 },
92

  
93
             {    0, DIST*SQ2/2, DIST },
94
             { DIST, DIST*SQ2/2,    0 },
95
             {    0, DIST*SQ2/2,-DIST },
96
             {-DIST, DIST*SQ2/2,    0 },
97
             {    0,-DIST*SQ2/2, DIST },
98
             { DIST,-DIST*SQ2/2,    0 },
99
             {    0,-DIST*SQ2/2,-DIST },
100
             {-DIST,-DIST*SQ2/2,    0 }
101 101
         };
102 102

  
103 103
  // Colors of the faces of cubits. Each cubit has 8 faces
......
183 183

  
184 184
///////////////////////////////////////////////////////////////////////////////////////////////////
185 185

  
186
  Static3D[] getCubitPositions(int size)
186
  float[][] getCubitPositions(int size)
187 187
    {
188 188
    return CENTERS;
189 189
    }
src/main/java/org/distorted/objects/TwistyDino.java
74 74
         };
75 75

  
76 76
  // centers of the 12 edges. Must be in the same order like QUATs above.
77
  private static final Static3D[] CENTERS = new Static3D[]
77
  private static final float[][] CENTERS = new float[][]
78 78
         {
79
           new Static3D( 0.0f, 1.5f, 1.5f ),
80
           new Static3D( 1.5f, 0.0f, 1.5f ),
81
           new Static3D( 0.0f,-1.5f, 1.5f ),
82
           new Static3D(-1.5f, 0.0f, 1.5f ),
83
           new Static3D( 1.5f, 1.5f, 0.0f ),
84
           new Static3D( 1.5f,-1.5f, 0.0f ),
85
           new Static3D(-1.5f,-1.5f, 0.0f ),
86
           new Static3D(-1.5f, 1.5f, 0.0f ),
87
           new Static3D( 0.0f, 1.5f,-1.5f ),
88
           new Static3D( 1.5f, 0.0f,-1.5f ),
89
           new Static3D( 0.0f,-1.5f,-1.5f ),
90
           new Static3D(-1.5f, 0.0f,-1.5f )
79
             { 0.0f, 1.5f, 1.5f },
80
             { 1.5f, 0.0f, 1.5f },
81
             { 0.0f,-1.5f, 1.5f },
82
             {-1.5f, 0.0f, 1.5f },
83
             { 1.5f, 1.5f, 0.0f },
84
             { 1.5f,-1.5f, 0.0f },
85
             {-1.5f,-1.5f, 0.0f },
86
             {-1.5f, 1.5f, 0.0f },
87
             { 0.0f, 1.5f,-1.5f },
88
             { 1.5f, 0.0f,-1.5f },
89
             { 0.0f,-1.5f,-1.5f },
90
             {-1.5f, 0.0f,-1.5f }
91 91
         };
92 92

  
93 93
  private static MeshBase mMesh;
......
184 184

  
185 185
///////////////////////////////////////////////////////////////////////////////////////////////////
186 186

  
187
  Static3D[] getCubitPositions(int size)
187
  float[][] getCubitPositions(int size)
188 188
    {
189 189
    return CENTERS;
190 190
    }
src/main/java/org/distorted/objects/TwistyHelicopter.java
97 97
  private static final float XY_CENTER   = DIST_CORNER/3;
98 98

  
99 99
  // centers of the 8 corners + 6*4 face triangles ( i.e. of the all 32 cubits)
100
  private static final Static3D[] CENTERS = new Static3D[]
100
  private static final float[][] CENTERS = new float[][]
101 101
         {
102
           new Static3D(   DIST_CORNER,   DIST_CORNER,   DIST_CORNER ),
103
           new Static3D(   DIST_CORNER,   DIST_CORNER,  -DIST_CORNER ),
104
           new Static3D(   DIST_CORNER,  -DIST_CORNER,   DIST_CORNER ),
105
           new Static3D(   DIST_CORNER,  -DIST_CORNER,  -DIST_CORNER ),
106
           new Static3D(  -DIST_CORNER,   DIST_CORNER,   DIST_CORNER ),
107
           new Static3D(  -DIST_CORNER,   DIST_CORNER,  -DIST_CORNER ),
108
           new Static3D(  -DIST_CORNER,  -DIST_CORNER,   DIST_CORNER ),
109
           new Static3D(  -DIST_CORNER,  -DIST_CORNER,  -DIST_CORNER ),
110

  
111
           new Static3D(   DIST_CENTER,     XY_CENTER,     XY_CENTER ),
112
           new Static3D(   DIST_CENTER,     XY_CENTER,    -XY_CENTER ),
113
           new Static3D(   DIST_CENTER,    -XY_CENTER,     XY_CENTER ),
114
           new Static3D(   DIST_CENTER,    -XY_CENTER,    -XY_CENTER ),
115

  
116
           new Static3D(  -DIST_CENTER,     XY_CENTER,     XY_CENTER ),
117
           new Static3D(  -DIST_CENTER,     XY_CENTER,    -XY_CENTER ),
118
           new Static3D(  -DIST_CENTER,    -XY_CENTER,     XY_CENTER ),
119
           new Static3D(  -DIST_CENTER,    -XY_CENTER,    -XY_CENTER ),
120

  
121
           new Static3D(   XY_CENTER  ,   DIST_CENTER,     XY_CENTER ),
122
           new Static3D(   XY_CENTER  ,   DIST_CENTER,    -XY_CENTER ),
123
           new Static3D(  -XY_CENTER  ,   DIST_CENTER,     XY_CENTER ),
124
           new Static3D(  -XY_CENTER  ,   DIST_CENTER,    -XY_CENTER ),
125

  
126
           new Static3D(   XY_CENTER  ,  -DIST_CENTER,     XY_CENTER ),
127
           new Static3D(   XY_CENTER  ,  -DIST_CENTER,    -XY_CENTER ),
128
           new Static3D(  -XY_CENTER  ,  -DIST_CENTER,     XY_CENTER ),
129
           new Static3D(  -XY_CENTER  ,  -DIST_CENTER,    -XY_CENTER ),
130

  
131
           new Static3D(   XY_CENTER  ,     XY_CENTER,   DIST_CENTER ),
132
           new Static3D(   XY_CENTER  ,    -XY_CENTER,   DIST_CENTER ),
133
           new Static3D(  -XY_CENTER  ,     XY_CENTER,   DIST_CENTER ),
134
           new Static3D(  -XY_CENTER  ,    -XY_CENTER,   DIST_CENTER ),
135

  
136
           new Static3D(   XY_CENTER  ,     XY_CENTER,  -DIST_CENTER ),
137
           new Static3D(   XY_CENTER  ,    -XY_CENTER,  -DIST_CENTER ),
138
           new Static3D(  -XY_CENTER  ,     XY_CENTER,  -DIST_CENTER ),
139
           new Static3D(  -XY_CENTER  ,    -XY_CENTER,  -DIST_CENTER ),
102
             {   DIST_CORNER,   DIST_CORNER,   DIST_CORNER },
103
             {   DIST_CORNER,   DIST_CORNER,  -DIST_CORNER },
104
             {   DIST_CORNER,  -DIST_CORNER,   DIST_CORNER },
105
             {   DIST_CORNER,  -DIST_CORNER,  -DIST_CORNER },
106
             {  -DIST_CORNER,   DIST_CORNER,   DIST_CORNER },
107
             {  -DIST_CORNER,   DIST_CORNER,  -DIST_CORNER },
108
             {  -DIST_CORNER,  -DIST_CORNER,   DIST_CORNER },
109
             {  -DIST_CORNER,  -DIST_CORNER,  -DIST_CORNER },
110

  
111
             {   DIST_CENTER,     XY_CENTER,     XY_CENTER },
112
             {   DIST_CENTER,     XY_CENTER,    -XY_CENTER },
113
             {   DIST_CENTER,    -XY_CENTER,     XY_CENTER },
114
             {   DIST_CENTER,    -XY_CENTER,    -XY_CENTER },
115

  
116
             {  -DIST_CENTER,     XY_CENTER,     XY_CENTER },
117
             {  -DIST_CENTER,     XY_CENTER,    -XY_CENTER },
118
             {  -DIST_CENTER,    -XY_CENTER,     XY_CENTER },
119
             {  -DIST_CENTER,    -XY_CENTER,    -XY_CENTER },
120

  
121
             {   XY_CENTER  ,   DIST_CENTER,     XY_CENTER },
122
             {   XY_CENTER  ,   DIST_CENTER,    -XY_CENTER },
123
             {  -XY_CENTER  ,   DIST_CENTER,     XY_CENTER },
124
             {  -XY_CENTER  ,   DIST_CENTER,    -XY_CENTER },
125

  
126
             {   XY_CENTER  ,  -DIST_CENTER,     XY_CENTER },
127
             {   XY_CENTER  ,  -DIST_CENTER,    -XY_CENTER },
128
             {  -XY_CENTER  ,  -DIST_CENTER,     XY_CENTER },
129
             {  -XY_CENTER  ,  -DIST_CENTER,    -XY_CENTER },
130

  
131
             {   XY_CENTER  ,     XY_CENTER,   DIST_CENTER },
132
             {   XY_CENTER  ,    -XY_CENTER,   DIST_CENTER },
133
             {  -XY_CENTER  ,     XY_CENTER,   DIST_CENTER },
134
             {  -XY_CENTER  ,    -XY_CENTER,   DIST_CENTER },
135

  
136
             {   XY_CENTER  ,     XY_CENTER,  -DIST_CENTER },
137
             {   XY_CENTER  ,    -XY_CENTER,  -DIST_CENTER },
138
             {  -XY_CENTER  ,     XY_CENTER,  -DIST_CENTER },
139
             {  -XY_CENTER  ,    -XY_CENTER,  -DIST_CENTER },
140 140
         };
141 141

  
142 142
  // Colors of the faces of cubits. Each cubit has 6 faces
......
251 251

  
252 252
///////////////////////////////////////////////////////////////////////////////////////////////////
253 253

  
254
  Static3D[] getCubitPositions(int size)
254
  float[][] getCubitPositions(int size)
255 255
    {
256 256
    return CENTERS;
257 257
    }
src/main/java/org/distorted/objects/TwistyIvy.java
156 156

  
157 157
///////////////////////////////////////////////////////////////////////////////////////////////////
158 158

  
159
  Static3D[] getCubitPositions(int numLayers)
159
  float[][] getCubitPositions(int numLayers)
160 160
    {
161 161
    final float DIST_CORNER = (numLayers-1)*0.50f;
162 162
    final float DIST_CENTER = (numLayers-1)*0.50f;
163 163

  
164
    final Static3D[] CENTERS = new Static3D[10];
165

  
166
    CENTERS[0] = new Static3D( DIST_CORNER, DIST_CORNER, DIST_CORNER );
167
    CENTERS[1] = new Static3D(-DIST_CORNER, DIST_CORNER,-DIST_CORNER );
168
    CENTERS[2] = new Static3D(-DIST_CORNER,-DIST_CORNER, DIST_CORNER );
169
    CENTERS[3] = new Static3D( DIST_CORNER,-DIST_CORNER,-DIST_CORNER );
170
    CENTERS[4] = new Static3D( DIST_CENTER,           0,           0 );
171
    CENTERS[5] = new Static3D(-DIST_CENTER,           0,           0 );
172
    CENTERS[6] = new Static3D(           0, DIST_CENTER,           0 );
173
    CENTERS[7] = new Static3D(           0,-DIST_CENTER,           0 );
174
    CENTERS[8] = new Static3D(           0,           0, DIST_CENTER );
175
    CENTERS[9] = new Static3D(           0,           0,-DIST_CENTER );
164
    final float[][] CENTERS = new float[10][];
165

  
166
    CENTERS[0] = new float[] { DIST_CORNER, DIST_CORNER, DIST_CORNER };
167
    CENTERS[1] = new float[] {-DIST_CORNER, DIST_CORNER,-DIST_CORNER };
168
    CENTERS[2] = new float[] {-DIST_CORNER,-DIST_CORNER, DIST_CORNER };
169
    CENTERS[3] = new float[] { DIST_CORNER,-DIST_CORNER,-DIST_CORNER };
170
    CENTERS[4] = new float[] { DIST_CENTER,           0,           0 };
171
    CENTERS[5] = new float[] {-DIST_CENTER,           0,           0 };
172
    CENTERS[6] = new float[] {           0, DIST_CENTER,           0 };
173
    CENTERS[7] = new float[] {           0,-DIST_CENTER,           0 };
174
    CENTERS[8] = new float[] {           0,           0, DIST_CENTER };
175
    CENTERS[9] = new float[] {           0,           0,-DIST_CENTER };
176 176

  
177 177
    return CENTERS;
178 178
    }
src/main/java/org/distorted/objects/TwistyKilominx.java
62 62

  
63 63
///////////////////////////////////////////////////////////////////////////////////////////////////
64 64

  
65
  Static3D[] getCubitPositions(int numLayers)
65
  float[][] getCubitPositions(int numLayers)
66 66
    {
67 67
    return CORNERS;
68 68
    }
src/main/java/org/distorted/objects/TwistyMegaminx.java
125 125
      {
126 126
      int[] map = mCenterMap[center];
127 127

  
128
      float x = CORNERS[map[0]].get0() +
129
                CORNERS[map[1]].get0() +
130
                CORNERS[map[2]].get0() +
131
                CORNERS[map[3]].get0() +
132
                CORNERS[map[4]].get0() ;
133

  
134
      float y = CORNERS[map[0]].get1() +
135
                CORNERS[map[1]].get1() +
136
                CORNERS[map[2]].get1() +
137
                CORNERS[map[3]].get1() +
138
                CORNERS[map[4]].get1() ;
139

  
140
      float z = CORNERS[map[0]].get2() +
141
                CORNERS[map[1]].get2() +
142
                CORNERS[map[2]].get2() +
143
                CORNERS[map[3]].get2() +
144
                CORNERS[map[4]].get2() ;
128
      float x = CORNERS[map[0]][0] +
129
                CORNERS[map[1]][0] +
130
                CORNERS[map[2]][0] +
131
                CORNERS[map[3]][0] +
132
                CORNERS[map[4]][0] ;
133

  
134
      float y = CORNERS[map[0]][1] +
135
                CORNERS[map[1]][1] +
136
                CORNERS[map[2]][1] +
137
                CORNERS[map[3]][1] +
138
                CORNERS[map[4]][1] ;
139

  
140
      float z = CORNERS[map[0]][2] +
141
                CORNERS[map[1]][2] +
142
                CORNERS[map[2]][2] +
143
                CORNERS[map[3]][2] +
144
                CORNERS[map[4]][2] ;
145 145

  
146 146
      mCenterCoords[center][0] = x/5;
147 147
      mCenterCoords[center][1] = y/5;
......
225 225

  
226 226
///////////////////////////////////////////////////////////////////////////////////////////////////
227 227

  
228
  private void computeCenter(Static3D pos, int center, int numLayers)
228
  private float[] computeCenter(int center, int numLayers)
229 229
    {
230 230
    float[] coords = mCenterCoords[center];
231 231
    float A = numLayers/3.0f;
232 232

  
233
    pos.set( A*coords[0], A*coords[1], A*coords[2] );
233
    return new float[] { A*coords[0], A*coords[1], A*coords[2] };
234 234
    }
235 235

  
236 236
///////////////////////////////////////////////////////////////////////////////////////////////////
......
248 248

  
249 249
///////////////////////////////////////////////////////////////////////////////////////////////////
250 250

  
251
  private void computeCorner(Static3D pos, int numCubitsPerCorner, int numLayers, int corner, int part)
251
  private float[] computeCorner(int numCubitsPerCorner, int numLayers, int corner, int part)
252 252
    {
253 253
    float D = numLayers/3.0f;
254
    Static3D corn = CORNERS[corner];
254
    float[] corn = CORNERS[corner];
255 255

  
256 256
    if( part==0 )
257 257
      {
258
      pos.set( corn.get0()*D, corn.get1()*D, corn.get2()*D );
258
      return new float[] { corn[0]*D, corn[1]*D, corn[2]*D };
259 259
      }
260 260
    else
261 261
      {
......
269 269
      int multP = (block % ((numLayers-3)/2)) + 1;
270 270
      int multS = (block / ((numLayers-3)/2));
271 271

  
272
      pos.set( corn.get0()*D + (pri.get0()*multP + sec.get0()*multS)*E,
273
               corn.get1()*D + (pri.get1()*multP + sec.get1()*multS)*E,
274
               corn.get2()*D + (pri.get2()*multP + sec.get2()*multS)*E );
272
      return new float[] {
273
                          corn[0]*D + (pri.get0()*multP + sec.get0()*multS)*E,
274
                          corn[1]*D + (pri.get1()*multP + sec.get1()*multS)*E,
275
                          corn[2]*D + (pri.get2()*multP + sec.get2()*multS)*E
276
                         };
275 277
      }
276 278
    }
277 279

  
......
285 287

  
286 288
///////////////////////////////////////////////////////////////////////////////////////////////////
287 289

  
288
  private void computeEdge(Static3D pos, int numLayers, int edge, int part)
290
  private float[] computeEdge(int numLayers, int edge, int part)
289 291
    {
290 292
    float corr = numLayers/3.0f;
291 293

  
292
    Static3D c1 = CORNERS[ mEdgeMap[edge][0] ];
293
    Static3D c2 = CORNERS[ mEdgeMap[edge][1] ];
294
    float x = corr*(c1.get0() + c2.get0())/2;
295
    float y = corr*(c1.get1() + c2.get1())/2;
296
    float z = corr*(c1.get2() + c2.get2())/2;
294
    float[] c1 = CORNERS[ mEdgeMap[edge][0] ];
295
    float[] c2 = CORNERS[ mEdgeMap[edge][1] ];
296
    float x = corr * (c1[0]+c2[0]) / 2;
297
    float y = corr * (c1[1]+c2[1]) / 2;
298
    float z = corr * (c1[2]+c2[2]) / 2;
297 299

  
298 300
    if( part==0 )
299 301
      {
300
      pos.set(x,y,z);
302
      return new float[] { x, y, z };
301 303
      }
302 304
    else
303 305
      {
......
312 314
      float len = (float)Math.sqrt(vX*vX+vY*vY+vZ*vZ);
313 315
      float A = mult*corr*(0.5f-MEGA_D)*COS18/((numLayers-1)*0.5f)/len;
314 316

  
315
      pos.set( x+A*vX, y+A*vY, z+A*vZ );
317
      return new float[] { x+A*vX, y+A*vY, z+A*vZ };
316 318
      }
317 319
    }
318 320

  
319 321
///////////////////////////////////////////////////////////////////////////////////////////////////
320 322

  
321
  Static3D[] getCubitPositions(int numLayers)
323
  float[][] getCubitPositions(int numLayers)
322 324
    {
323 325
    int numCubitsPerCorner = numCubitsPerCorner(numLayers);
324 326
    int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
325 327
    int numCubits = NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge + NUM_CENTERS;
326 328
    int index=0;
327 329

  
328
    final Static3D[] CENTERS = new Static3D[numCubits];
330
    final float[][] CENTERS = new float[numCubits][];
329 331

  
330 332
    for(int corner=0; corner<NUM_CORNERS; corner++)
331 333
      {
......
333 335

  
334 336
      for(int part=0; part<numCubitsPerCorner; part++, index++)
335 337
        {
336
        CENTERS[index] = new Static3D(0,0,0);
337
        computeCorner(CENTERS[index],numCubitsPerCorner,numLayers,corner,part);
338
        CENTERS[index] = computeCorner(numCubitsPerCorner,numLayers,corner,part);
338 339
        }
339 340
      }
340 341

  
......
342 343
      {
343 344
      for(int part=0; part<numCubitsPerEdge; part++, index++)
344 345
        {
345
        CENTERS[index] = new Static3D(0,0,0);
346
        computeEdge(CENTERS[index], numLayers, edge, part );
346
        CENTERS[index] = computeEdge(numLayers, edge, part );
347 347
        }
348 348
      }
349 349

  
350 350
    for(int center=0; center<NUM_CENTERS; center++, index++)
351 351
      {
352
      CENTERS[index] = new Static3D(0,0,0);
353
      computeCenter(CENTERS[index], center, numLayers);
352
      CENTERS[index] = computeCenter(center, numLayers);
354 353
      }
355 354

  
356 355
    return CENTERS;
src/main/java/org/distorted/objects/TwistyMinx.java
144 144
         };
145 145

  
146 146
  // Coordinates of all 20 corners of a Minx
147
  static final Static3D[] CORNERS = new Static3D[]
147
  static final float[][] CORNERS = new float[][]
148 148
         {
149
           new Static3D( 0.0f, 0.5f,   C2),
150
           new Static3D( 0.0f, 0.5f,  -C2),
151
           new Static3D( 0.0f,-0.5f,   C2),
152
           new Static3D( 0.0f,-0.5f,  -C2),
153
           new Static3D(   C2, 0.0f, 0.5f),
154
           new Static3D(   C2, 0.0f,-0.5f),
155
           new Static3D(  -C2, 0.0f, 0.5f),
156
           new Static3D(  -C2, 0.0f,-0.5f),
157
           new Static3D( 0.5f,   C2, 0.0f),
158
           new Static3D( 0.5f,  -C2, 0.0f),
159
           new Static3D(-0.5f,   C2, 0.0f),
160
           new Static3D(-0.5f,  -C2, 0.0f),
161
           new Static3D(   C1,   C1,   C1),
162
           new Static3D(   C1,   C1,  -C1),
163
           new Static3D(   C1,  -C1,   C1),
164
           new Static3D(   C1,  -C1,  -C1),
165
           new Static3D(  -C1,   C1,   C1),
166
           new Static3D(  -C1,   C1,  -C1),
167
           new Static3D(  -C1,  -C1,   C1),
168
           new Static3D(  -C1,  -C1,  -C1),
149
             { 0.0f, 0.5f,   C2},
150
             { 0.0f, 0.5f,  -C2},
151
             { 0.0f,-0.5f,   C2},
152
             { 0.0f,-0.5f,  -C2},
153
             {   C2, 0.0f, 0.5f},
154
             {   C2, 0.0f,-0.5f},
155
             {  -C2, 0.0f, 0.5f},
156
             {  -C2, 0.0f,-0.5f},
157
             { 0.5f,   C2, 0.0f},
158
             { 0.5f,  -C2, 0.0f},
159
             {-0.5f,   C2, 0.0f},
160
             {-0.5f,  -C2, 0.0f},
161
             {   C1,   C1,   C1},
162
             {   C1,   C1,  -C1},
163
             {   C1,  -C1,   C1},
164
             {   C1,  -C1,  -C1},
165
             {  -C1,   C1,   C1},
166
             {  -C1,   C1,  -C1},
167
             {  -C1,  -C1,   C1},
168
             {  -C1,  -C1,  -C1},
169 169
         };
170 170

  
171 171
  static final int[][] mCornerFaceMap =
src/main/java/org/distorted/objects/TwistyObject.java
98 98

  
99 99
  private static float mInitScreenRatio;
100 100
  private static float mObjectScreenRatio = 1.0f;
101
  private static final float[] mTmp1 = new float[4];
102
  private static final float[] mTmp2 = new float[4];
101 103

  
102 104
  private final int mNodeSize;
103
  private final Static3D[] mOrigPos;
105
  private final float[][] mOrigPos;
104 106
  private final Static3D mNodeScale;
105 107
  private final Static4D mQuat;
106 108
  private final int mNumLayers, mRealSize;
......
214 216
    setProjection( fov, 0.1f);
215 217
    }
216 218

  
219
///////////////////////////////////////////////////////////////////////////////////////////////////
220

  
221
  private Static3D getPos(float[] origPos)
222
    {
223
    int len = origPos.length/3;
224
    float sumX = 0.0f;
225
    float sumY = 0.0f;
226
    float sumZ = 0.0f;
227

  
228
    for(int i=0; i<len; i++)
229
      {
230
      sumX += origPos[3*i  ];
231
      sumY += origPos[3*i+1];
232
      sumZ += origPos[3*i+2];
233
      }
234

  
235
    sumX /= len;
236
    sumY /= len;
237
    sumZ /= len;
238

  
239
    return new Static3D(sumX,sumY,sumZ);
240
    }
241

  
217 242
///////////////////////////////////////////////////////////////////////////////////////////////////
218 243

  
219 244
  private void createMeshAndCubits(ObjectList list, Resources res)
......
252 277
        {
253 278
        CUBITS[i] = new Cubit(this,mOrigPos[i]);
254 279
        cubitMesh[i] = createCubitMesh(i,mNumLayers);
255
        cubitMesh[i].apply(new MatrixEffectMove(mOrigPos[i]),1,0);
280
        Static3D pos = getPos(mOrigPos[i]);
281
        cubitMesh[i].apply(new MatrixEffectMove(pos),1,0);
256 282
        cubitMesh[i].setEffectAssociation(0, CUBITS[i].computeAssociation(), 0);
257 283
        }
258 284

  
......
283 309

  
284 310
///////////////////////////////////////////////////////////////////////////////////////////////////
285 311

  
286
  int computeRow(float x, float y, float z, int rotIndex)
312
  int computeRow(float[] pos, int rotIndex)
287 313
    {
314
    int ret=0;
315
    int len = pos.length / 3;
288 316
    Static3D axis = ROTATION_AXIS[rotIndex];
289
    float tmp = x*axis.get0() + y*axis.get1() + z*axis.get2();
317
    float axisX = axis.get0();
318
    float axisY = axis.get1();
319
    float axisZ = axis.get2();
320

  
321
    for(int i=0; i<len; i++)
322
      {
323
      ret |= computeRow(pos[3*i]*axisX + pos[3*i+1]*axisY + pos[3*i+2]*axisZ);
324
      }
325

  
326
    return ret;
327
    }
328

  
329
///////////////////////////////////////////////////////////////////////////////////////////////////
290 330

  
331
  private int computeRow(float casted)
332
    {
291 333
    for(int i=0; i<NUM_CUTS; i++)
292 334
      {
293
      if( tmp<CUTS[i] ) return (1<<i);
335
      if( casted<CUTS[i] ) return (1<<i);
294 336
      }
295 337

  
296 338
    return (1<<NUM_CUTS);
......
369 411
///////////////////////////////////////////////////////////////////////////////////////////////////
370 412
// Clamp all rotated positions to one of those original ones to avoid accumulating errors.
371 413

  
372
  void clampPos(Static3D pos)
414
  void clampPos(float[] pos, int offset)
373 415
    {
374 416
    float currError, minError = Float.MAX_VALUE;
375
    int minErrorIndex= -1;
376
    float x = pos.get0();
377
    float y = pos.get1();
378
    float z = pos.get2();
417
    int minErrorIndex1 = -1;
418
    int minErrorIndex2 = -1;
419

  
420
    float x = pos[offset  ];
421
    float y = pos[offset+1];
422
    float z = pos[offset+2];
423

  
379 424
    float xo,yo,zo;
380 425

  
381 426
    for(int i=0; i<NUM_CUBITS; i++)
382 427
      {
383
      xo = mOrigPos[i].get0();
384
      yo = mOrigPos[i].get1();
385
      zo = mOrigPos[i].get2();
428
      int len = mOrigPos[i].length / 3;
386 429

  
387
      currError = (xo-x)*(xo-x) + (yo-y)*(yo-y) + (zo-z)*(zo-z);
388

  
389
      if( currError<minError )
430
      for(int j=0; j<len; j++)
390 431
        {
391
        minError = currError;
392
        minErrorIndex = i;
432
        xo = mOrigPos[i][3*j  ];
433
        yo = mOrigPos[i][3*j+1];
434
        zo = mOrigPos[i][3*j+2];
435

  
436
        currError = (xo-x)*(xo-x) + (yo-y)*(yo-y) + (zo-z)*(zo-z);
437

  
438
        if( currError<minError )
439
          {
440
          minError = currError;
441
          minErrorIndex1 = i;
442
          minErrorIndex2 = j;
443
          }
393 444
        }
394 445
      }
395 446

  
396
    pos.set( mOrigPos[minErrorIndex] );
447
    pos[offset  ] = mOrigPos[minErrorIndex1][3*minErrorIndex2  ];
448
    pos[offset+1] = mOrigPos[minErrorIndex1][3*minErrorIndex2+1];
449
    pos[offset+2] = mOrigPos[minErrorIndex1][3*minErrorIndex2+2];
397 450
    }
398 451

  
399 452
///////////////////////////////////////////////////////////////////////////////////////////////////
......
422 475
      {
423 476
      case 0 : return false;  // 'inside' cubit that does not lie on any face
424 477
      case 1 :                // cubit that lies inside one of the faces
425
               Static3D orig = cubit.getOrigPosition();
478
               float[] orig   = cubit.getOrigPosition();
426 479
               Static4D quat1 = QUATS[quatIndex];
427 480
               Static4D quat2 = QUATS[cubit.mQuatIndex];
428 481

  
429
               Static4D cubitCenter = new Static4D( orig.get0(), orig.get1(), orig.get2(), 0);
430
               Static4D rotated1 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat1 );
482
               Static4D cubitCenter = new Static4D( orig[0], orig[1], orig[2], 0);              // not used for bandaged objects,
483
               Static4D rotated1 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat1 );   // only check the first position
431 484
               Static4D rotated2 = RubikSurfaceView.rotateVectorByQuat( cubitCenter, quat2 );
432 485

  
433
               int row1, row2;
434
               float x1 = rotated1.get0();
435
               float y1 = rotated1.get1();
436
               float z1 = rotated1.get2();
437
               float x2 = rotated2.get0();
438
               float y2 = rotated2.get1();
439
               float z2 = rotated2.get2();
486
               rotated1.get(mTmp1, 0, 0, 0);
487
               rotated2.get(mTmp2, 0, 0, 0);
440 488

  
441 489
               for(int i=0; i<NUM_AXIS; i++)
442 490
                 {
443
                 row1 = computeRow(x1,y1,z1,i);
444
                 row2 = computeRow(x2,y2,z2,i);
445

  
446
                 if( ((row1 & row2) & bitmap) != 0 ) return false;
491
                 if( (computeRow(mTmp1,i) & computeRow(mTmp2,i) & bitmap) != 0 ) return false;
447 492
                 }
448 493
               return true;
449 494

  
......
843 888
///////////////////////////////////////////////////////////////////////////////////////////////////
844 889

  
845 890
  abstract float getScreenRatio();
846
  abstract Static3D[] getCubitPositions(int numLayers);
891
  abstract float[][] getCubitPositions(int numLayers);
847 892
  abstract Static4D[] getQuats();
848 893
  abstract int getNumFaces();
849 894
  abstract int getNumStickerTypes(int numLayers);
src/main/java/org/distorted/objects/TwistyPyraminx.java
82 82

  
83 83
///////////////////////////////////////////////////////////////////////////////////////////////////
84 84

  
85
  private void addTetrahedralLattice(int size, int index, Static3D[] pos)
85
  private void addTetrahedralLattice(int size, int index, float[][] pos)
86 86
    {
87 87
    final float DX = 1.0f;
88 88
    final float DY = SQ2/2;
......
103 103

  
104 104
        for(int z=0; z<size-layer; z++)
105 105
          {
106
          pos[index] = new Static3D(currX,currY,currZ);
106
          pos[index] = new float[] {currX,currY,currZ};
107 107
          index++;
108 108
          currZ -= DZ;
109 109
          }
......
120 120
///////////////////////////////////////////////////////////////////////////////////////////////////
121 121
// there are (n^3-n)/6 octahedrons and ((n+1)^3 - (n+1))/6 tetrahedrons
122 122

  
123
  Static3D[] getCubitPositions(int size)
123
  float[][] getCubitPositions(int size)
124 124
    {
125 125
    int numOcta = (size-1)*size*(size+1)/6;
126 126
    int numTetra= size*(size+1)*(size+2)/6;
127
    Static3D[] ret = new Static3D[numOcta+numTetra];
127
    float[][] ret = new float[numOcta+numTetra][];
128 128

  
129 129
    addTetrahedralLattice(size-1,      0,ret);
130 130
    addTetrahedralLattice(size  ,numOcta,ret);
src/main/java/org/distorted/objects/TwistyRedi.java
80 80
  private static final float DIST_EDGE   = 1.5f;
81 81

  
82 82
  // centers of the 8 corners + 12 edges ( i.e. of the all 20 cubits)
83
  private static final Static3D[] CENTERS = new Static3D[]
83
  private static final float[][] CENTERS = new float[][]
84 84
         {
85
           new Static3D( DIST_CORNER, DIST_CORNER, DIST_CORNER ),
86
           new Static3D( DIST_CORNER, DIST_CORNER,-DIST_CORNER ),
87
           new Static3D( DIST_CORNER,-DIST_CORNER, DIST_CORNER ),
88
           new Static3D( DIST_CORNER,-DIST_CORNER,-DIST_CORNER ),
89
           new Static3D(-DIST_CORNER, DIST_CORNER, DIST_CORNER ),
90
           new Static3D(-DIST_CORNER, DIST_CORNER,-DIST_CORNER ),
91
           new Static3D(-DIST_CORNER,-DIST_CORNER, DIST_CORNER ),
92
           new Static3D(-DIST_CORNER,-DIST_CORNER,-DIST_CORNER ),
93

  
94
           new Static3D(      0.0f, DIST_EDGE, DIST_EDGE ),
95
           new Static3D( DIST_EDGE,      0.0f, DIST_EDGE ),
96
           new Static3D(      0.0f,-DIST_EDGE, DIST_EDGE ),
97
           new Static3D(-DIST_EDGE,      0.0f, DIST_EDGE ),
98
           new Static3D( DIST_EDGE, DIST_EDGE,      0.0f ),
99
           new Static3D( DIST_EDGE,-DIST_EDGE,      0.0f ),
100
           new Static3D(-DIST_EDGE,-DIST_EDGE,      0.0f ),
101
           new Static3D(-DIST_EDGE, DIST_EDGE,      0.0f ),
102
           new Static3D(      0.0f, DIST_EDGE,-DIST_EDGE ),
103
           new Static3D( DIST_EDGE,      0.0f,-DIST_EDGE ),
104
           new Static3D(      0.0f,-DIST_EDGE,-DIST_EDGE ),
105
           new Static3D(-DIST_EDGE,      0.0f,-DIST_EDGE )
85
             { DIST_CORNER, DIST_CORNER, DIST_CORNER },
86
             { DIST_CORNER, DIST_CORNER,-DIST_CORNER },
87
             { DIST_CORNER,-DIST_CORNER, DIST_CORNER },
88
             { DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
89
             {-DIST_CORNER, DIST_CORNER, DIST_CORNER },
90
             {-DIST_CORNER, DIST_CORNER,-DIST_CORNER },
91
             {-DIST_CORNER,-DIST_CORNER, DIST_CORNER },
92
             {-DIST_CORNER,-DIST_CORNER,-DIST_CORNER },
93

  
94
             {      0.0f, DIST_EDGE, DIST_EDGE },
95
             { DIST_EDGE,      0.0f, DIST_EDGE },
96
             {      0.0f,-DIST_EDGE, DIST_EDGE },
97
             {-DIST_EDGE,      0.0f, DIST_EDGE },
98
             { DIST_EDGE, DIST_EDGE,      0.0f },
99
             { DIST_EDGE,-DIST_EDGE,      0.0f },
100
             {-DIST_EDGE,-DIST_EDGE,      0.0f },
101
             {-DIST_EDGE, DIST_EDGE,      0.0f },
102
             {      0.0f, DIST_EDGE,-DIST_EDGE },
103
             { DIST_EDGE,      0.0f,-DIST_EDGE },
104
             {      0.0f,-DIST_EDGE,-DIST_EDGE },
105
             {-DIST_EDGE,      0.0f,-DIST_EDGE }
106 106
         };
107 107

  
108 108
  // Colors of the faces of cubits.
......
199 199

  
200 200
///////////////////////////////////////////////////////////////////////////////////////////////////
201 201

  
202
  Static3D[] getCubitPositions(int size)
202
  float[][] getCubitPositions(int size)
203 203
    {
204 204
    return CENTERS;
205 205
    }
src/main/java/org/distorted/objects/TwistyRex.java
189 189

  
190 190
///////////////////////////////////////////////////////////////////////////////////////////////////
191 191

  
192
  Static3D[] getCubitPositions(int numLayers)
192
  float[][] getCubitPositions(int numLayers)
193 193
    {
194 194
    final float DIST = 0.50f;
195 195
    final float DIST2= (1+2*REX_D)/6;
196 196

  
197
    final Static3D[] CENTERS = new Static3D[42];
198

  
199
    CENTERS[ 0] = new Static3D( +DIST , +DIST2, +DIST2);
200
    CENTERS[ 1] = new Static3D( +DIST , +DIST2, -DIST2);
201
    CENTERS[ 2] = new Static3D( +DIST , -DIST2, -DIST2);
202
    CENTERS[ 3] = new Static3D( +DIST , -DIST2, +DIST2);
203
    CENTERS[ 4] = new Static3D( -DIST , +DIST2, +DIST2);
204
    CENTERS[ 5] = new Static3D( -DIST , +DIST2, -DIST2);
205
    CENTERS[ 6] = new Static3D( -DIST , -DIST2, -DIST2);
206
    CENTERS[ 7] = new Static3D( -DIST , -DIST2, +DIST2);
207
    CENTERS[ 8] = new Static3D( +DIST2, +DIST , +DIST2);
208
    CENTERS[ 9] = new Static3D( +DIST2, +DIST , -DIST2);
209
    CENTERS[10] = new Static3D( -DIST2, +DIST , -DIST2);
210
    CENTERS[11] = new Static3D( -DIST2, +DIST , +DIST2);
211
    CENTERS[12] = new Static3D( +DIST2, -DIST , +DIST2);
212
    CENTERS[13] = new Static3D( +DIST2, -DIST , -DIST2);
213
    CENTERS[14] = new Static3D( -DIST2, -DIST , -DIST2);
214
    CENTERS[15] = new Static3D( -DIST2, -DIST , +DIST2);
215
    CENTERS[16] = new Static3D( +DIST2, +DIST2, +DIST );
216
    CENTERS[17] = new Static3D( +DIST2, -DIST2, +DIST );
217
    CENTERS[18] = new Static3D( -DIST2, -DIST2, +DIST );
218
    CENTERS[19] = new Static3D( -DIST2, +DIST2, +DIST );
219
    CENTERS[20] = new Static3D( +DIST2, +DIST2, -DIST );
220
    CENTERS[21] = new Static3D( +DIST2, -DIST2, -DIST );
221
    CENTERS[22] = new Static3D( -DIST2, -DIST2, -DIST );
222
    CENTERS[23] = new Static3D( -DIST2, +DIST2, -DIST );
223

  
224
    CENTERS[24] = new Static3D( +DIST , +0.00f, +0.00f);
225
    CENTERS[25] = new Static3D( -DIST , +0.00f, +0.00f);
226
    CENTERS[26] = new Static3D( +0.00f, +DIST , +0.00f);
227
    CENTERS[27] = new Static3D( +0.00f, -DIST , +0.00f);
228
    CENTERS[28] = new Static3D( +0.00f, +0.00f, +DIST );
229
    CENTERS[29] = new Static3D( +0.00f, +0.00f, -DIST );
230

  
231
    CENTERS[30] = new Static3D( +0.00f, +DIST , +DIST );
232
    CENTERS[31] = new Static3D( +DIST , +0.00f, +DIST );
233
    CENTERS[32] = new Static3D( +0.00f, -DIST , +DIST );
234
    CENTERS[33] = new Static3D( -DIST , +0.00f, +DIST );
235
    CENTERS[34] = new Static3D( +DIST , +DIST , +0.00f);
236
    CENTERS[35] = new Static3D( +DIST , -DIST , +0.00f);
237
    CENTERS[36] = new Static3D( -DIST , -DIST , +0.00f);
238
    CENTERS[37] = new Static3D( -DIST , +DIST , +0.00f);
239
    CENTERS[38] = new Static3D( +0.00f, +DIST , -DIST );
240
    CENTERS[39] = new Static3D( +DIST , +0.00f, -DIST );
241
    CENTERS[40] = new Static3D( +0.00f, -DIST , -DIST );
242
    CENTERS[41] = new Static3D( -DIST , +0.00f, -DIST );
197
    final float[][] CENTERS = new float[42][];
198

  
199
    CENTERS[ 0] = new float[] { +DIST , +DIST2, +DIST2};
200
    CENTERS[ 1] = new float[] { +DIST , +DIST2, -DIST2};
201
    CENTERS[ 2] = new float[] { +DIST , -DIST2, -DIST2};
202
    CENTERS[ 3] = new float[] { +DIST , -DIST2, +DIST2};
203
    CENTERS[ 4] = new float[] { -DIST , +DIST2, +DIST2};
204
    CENTERS[ 5] = new float[] { -DIST , +DIST2, -DIST2};
205
    CENTERS[ 6] = new float[] { -DIST , -DIST2, -DIST2};
206
    CENTERS[ 7] = new float[] { -DIST , -DIST2, +DIST2};
207
    CENTERS[ 8] = new float[] { +DIST2, +DIST , +DIST2};
208
    CENTERS[ 9] = new float[] { +DIST2, +DIST , -DIST2};
209
    CENTERS[10] = new float[] { -DIST2, +DIST , -DIST2};
210
    CENTERS[11] = new float[] { -DIST2, +DIST , +DIST2};
211
    CENTERS[12] = new float[] { +DIST2, -DIST , +DIST2};
212
    CENTERS[13] = new float[] { +DIST2, -DIST , -DIST2};
213
    CENTERS[14] = new float[] { -DIST2, -DIST , -DIST2};
214
    CENTERS[15] = new float[] { -DIST2, -DIST , +DIST2};
215
    CENTERS[16] = new float[] { +DIST2, +DIST2, +DIST };
216
    CENTERS[17] = new float[] { +DIST2, -DIST2, +DIST };
217
    CENTERS[18] = new float[] { -DIST2, -DIST2, +DIST };
218
    CENTERS[19] = new float[] { -DIST2, +DIST2, +DIST };
219
    CENTERS[20] = new float[] { +DIST2, +DIST2, -DIST };
220
    CENTERS[21] = new float[] { +DIST2, -DIST2, -DIST };
221
    CENTERS[22] = new float[] { -DIST2, -DIST2, -DIST };
222
    CENTERS[23] = new float[] { -DIST2, +DIST2, -DIST };
223

  
224
    CENTERS[24] = new float[] { +DIST , +0.00f, +0.00f};
225
    CENTERS[25] = new float[] { -DIST , +0.00f, +0.00f};
226
    CENTERS[26] = new float[] { +0.00f, +DIST , +0.00f};
227
    CENTERS[27] = new float[] { +0.00f, -DIST , +0.00f};
228
    CENTERS[28] = new float[] { +0.00f, +0.00f, +DIST };
229
    CENTERS[29] = new float[] { +0.00f, +0.00f, -DIST };
230

  
231
    CENTERS[30] = new float[] { +0.00f, +DIST , +DIST };
232
    CENTERS[31] = new float[] { +DIST , +0.00f, +DIST };
233
    CENTERS[32] = new float[] { +0.00f, -DIST , +DIST };
234
    CENTERS[33] = new float[] { -DIST , +0.00f, +DIST };
235
    CENTERS[34] = new float[] { +DIST , +DIST , +0.00f};
236
    CENTERS[35] = new float[] { +DIST , -DIST , +0.00f};
237
    CENTERS[36] = new float[] { -DIST , -DIST , +0.00f};
238
    CENTERS[37] = new float[] { -DIST , +DIST , +0.00f};
239
    CENTERS[38] = new float[] { +0.00f, +DIST , -DIST };
240
    CENTERS[39] = new float[] { +DIST , +0.00f, -DIST };
241
    CENTERS[40] = new float[] { +0.00f, -DIST , -DIST };
242
    CENTERS[41] = new float[] { -DIST , +0.00f, -DIST };
243 243

  
244 244
    return CENTERS;
245 245
    }
src/main/java/org/distorted/objects/TwistySkewb.java
213 213

  
214 214
///////////////////////////////////////////////////////////////////////////////////////////////////
215 215

  
216
  Static3D[] getCubitPositions(int numLayers)
216
  float[][] getCubitPositions(int numLayers)
217 217
    {
218 218
    final float DIST_CORNER = (numLayers-1)*0.50f;
219 219
    final float DIST_EDGE   = (numLayers-1)*0.50f;
......
223 223
    final int numEdges   = getNumEdges(numLayers);
224 224
    final int numCenters = 6*getNumCentersPerFace(numLayers);
225 225

  
226
    final Static3D[] CENTERS = new Static3D[numCorners+numEdges+numCenters];
226
    final float[][] CENTERS = new float[numCorners+numEdges+numCenters][];
227 227

  
228 228
    /// CORNERS //////////////////////////////////////////////
229 229

  
230
    CENTERS[0] = new Static3D( DIST_CORNER, DIST_CORNER, DIST_CORNER );
231
    CENTERS[1] = new Static3D( DIST_CORNER, DIST_CORNER,-DIST_CORNER );
232
    CENTERS[2] = new Static3D( DIST_CORNER,-DIST_CORNER, DIST_CORNER );
233
    CENTERS[3] = new Static3D( DIST_CORNER,-DIST_CORNER,-DIST_CORNER );
234
    CENTERS[4] = new Static3D(-DIST_CORNER, DIST_CORNER, DIST_CORNER );
235
    CENTERS[5] = new Static3D(-DIST_CORNER, DIST_CORNER,-DIST_CORNER );
236
    CENTERS[6] = new Static3D(-DIST_CORNER,-DIST_CORNER, DIST_CORNER );
237
    CENTERS[7] = new Static3D(-DIST_CORNER,-DIST_CORNER,-DIST_CORNER );
230
    CENTERS[0] = new float[] { DIST_CORNER, DIST_CORNER, DIST_CORNER };
231
    CENTERS[1] = new float[] { DIST_CORNER, DIST_CORNER,-DIST_CORNER };
232
    CENTERS[2] = new float[] { DIST_CORNER,-DIST_CORNER, DIST_CORNER };
233
    CENTERS[3] = new float[] { DIST_CORNER,-DIST_CORNER,-DIST_CORNER };
234
    CENTERS[4] = new float[] {-DIST_CORNER, DIST_CORNER, DIST_CORNER };
235
    CENTERS[5] = new float[] {-DIST_CORNER, DIST_CORNER,-DIST_CORNER };
236
    CENTERS[6] = new float[] {-DIST_CORNER,-DIST_CORNER, DIST_CORNER };
237
    CENTERS[7] = new float[] {-DIST_CORNER,-DIST_CORNER,-DIST_CORNER };
238 238

  
239 239
    /// EDGES ///////////////////////////////////////////////
240 240

  
......
262 262

  
263 263
      for (int j=0; j<numLayers-2; j++, c+=1.0f, index++)
264 264
        {
265
        CENTERS[index] = new Static3D( edges[0]==0 ? c : edges[0] ,
265
        CENTERS[index] = new float[] { edges[0]==0 ? c : edges[0] ,
266 266
                                       edges[1]==0 ? c : edges[1] ,
267
                                       edges[2]==0 ? c : edges[2] );
267
                                       edges[2]==0 ? c : edges[2] };
268 268
        }
269 269
      }
270 270

  
......
307 307
          else if( centers[2]==X ) cen2 = x;
308 308
          else                     cen2 = centers[2];
309 309

  
310
          CENTERS[index] = new Static3D(cen0,cen1,cen2);
310
          CENTERS[index] = new float[] {cen0,cen1,cen2};
311 311
          }
312 312
        }
313 313

  
......
331 331
          else if( centers[2]==X ) cen2 = x;
332 332
          else                     cen2 = centers[2];
333 333

  
334
          CENTERS[index] = new Static3D(cen0,cen1,cen2);
334
          CENTERS[index] = new float[] {cen0,cen1,cen2};
335 335
          }
336 336
        }
337 337
      }

Also available in: Unified diff