Project

General

Profile

« Previous | Next » 

Revision b1f2ccf5

Added by Leszek Koltunski about 3 years ago

Convert the first object, the Cube, to the new Cubit-creating engine.

View differences:

src/main/java/org/distorted/objects/TwistyCube.java
91 91
         new Static4D( -0.5f,   0.5f,   0.5f,   0.5f)
92 92
         };
93 93

  
94
  private static final double[][] VERTICES = new double[][]
95
          {
96
              { 0.5, 0.5, 0.5 },
97
              { 0.5, 0.5,-0.5 },
98
              { 0.5,-0.5, 0.5 },
99
              { 0.5,-0.5,-0.5 },
100
              {-0.5, 0.5, 0.5 },
101
              {-0.5, 0.5,-0.5 },
102
              {-0.5,-0.5, 0.5 },
103
              {-0.5,-0.5,-0.5 },
104
          };
105

  
106
  private static final int[][] VERT_INDEXES = new int[][]
107
          {
108
              {2,3,1,0},   // counterclockwise!
109
              {7,6,4,5},
110
              {4,0,1,5},
111
              {7,3,2,6},
112
              {6,2,0,4},
113
              {3,7,5,1}
114
          };
115

  
116
  private static final float[][] STICKERS = new float[][]
117
          {
118
              { -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f }
119
          };
120

  
94 121
  private static MeshBase[] mMeshes;
95 122

  
96 123
///////////////////////////////////////////////////////////////////////////////////////////////////
......
101 128
    super(size, size, quat, texture, mesh, effects, moves, ObjectList.CUBE, res, scrWidth);
102 129
    }
103 130

  
131
///////////////////////////////////////////////////////////////////////////////////////////////////
132

  
133
  double[][] getVertices(int cubitType)
134
    {
135
    return VERTICES;
136
    }
137

  
138
///////////////////////////////////////////////////////////////////////////////////////////////////
139

  
140
  int[][] getVertIndexes(int cubitType)
141
    {
142
    return VERT_INDEXES;
143
    }
144

  
145
///////////////////////////////////////////////////////////////////////////////////////////////////
146
// in the sense of shape, there's always only 1 cubit type.
147

  
148
  int getNumCubitTypes(int numLayers)
149
    {
150
    return 1;
151
    }
152

  
104 153
///////////////////////////////////////////////////////////////////////////////////////////////////
105 154

  
106 155
  MeshBase createCubitMesh(int cubit, int numLayers)
107 156
    {
108 157
    if( mMeshes==null )
109 158
      {
159
      FactoryCubit factory = FactoryCubit.getInstance();
160
      factory.clear();
110 161
      mMeshes = new MeshBase[ObjectList.CUBE.getNumVariants()];
111 162
      }
112 163

  
......
115 166

  
116 167
    if( mMeshes[index]==null )
117 168
      {
118
      mMeshes[index] = FactoryCubit.getInstance().createCubeMesh(index);
169
      int extraI, extraV, num;
170

  
171
      switch(numLayers)
172
        {
173
        case 2 : num = 6; extraI = 2; extraV = 2; break;
174
        case 3 : num = 5; extraI = 2; extraV = 2; break;
175
        case 4 : num = 5; extraI = 1; extraV = 2; break;
176
        default: num = 5; extraI = 1; extraV = 0; break;
177
        }
178

  
179
      float[][] bands     = new float[][] { {0.038f,35,0.5f,0.7f,num,extraI,extraV} };
180
      int[] bandIndexes   = new int[] { 0,0,0,0,0,0};
181
      float[][] corners   = new float[][] { {0.036f,0.12f} };
182
      int[] cornerIndexes = new int[] { 0,0,0,0,0,0,0,0 };
183

  
184
      FactoryCubit factory = FactoryCubit.getInstance();
185

  
186
      factory.createNewFaceTransform(VERTICES,VERT_INDEXES);
187
      mMeshes[index] = factory.createRoundedSolid(VERTICES, VERT_INDEXES,
188
                                                  bands, bandIndexes,
189
                                                  corners, cornerIndexes,
190
                                                  getNumCubitFaces() );
119 191
      }
120 192

  
121 193
    return mMeshes[index].copy(true);
......
125 197

  
126 198
  void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top)
127 199
    {
128
    float F =  0.5f;
129 200
    float R = 0.10f;
130 201
    float S = 0.08f;
131
    float[] vertices = { -F,-F, +F,-F, +F,+F, -F,+F};
132 202

  
133 203
    FactorySticker factory = FactorySticker.getInstance();
134
    factory.drawRoundedPolygon(canvas, paint, left, top, vertices, S, FACE_COLORS[face], R);
204
    factory.drawRoundedPolygon(canvas, paint, left, top, STICKERS[0], S, FACE_COLORS[face], R);
135 205
    }
136 206

  
137 207
///////////////////////////////////////////////////////////////////////////////////////////////////
138 208

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

  
144
    float diff = 0.5f*(size-1);
214
    float diff = 0.5f*(numLayers-1);
145 215
    int currentPosition = 0;
146 216

  
147
    for(int x = 0; x<size; x++)
148
      for(int y = 0; y<size; y++)
149
        for(int z = 0; z<size; z++)
150
          if( x==0 || x==size-1 || y==0 || y==size-1 || z==0 || z==size-1 )
217
    for(int x = 0; x<numLayers; x++)
218
      for(int y = 0; y<numLayers; y++)
219
        for(int z = 0; z<numLayers; z++)
220
          if( x==0 || x==numLayers-1 || y==0 || y==numLayers-1 || z==0 || z==numLayers-1 )
151 221
            {
152 222
            tmp[currentPosition++] = new float[] {x-diff,y-diff,z-diff};
153 223
            }
......
194 264

  
195 265
  int getNumStickerTypes(int numLayers)
196 266
    {
197
    return 1;
267
    return STICKERS.length;
198 268
    }
199 269

  
200 270
///////////////////////////////////////////////////////////////////////////////////////////////////

Also available in: Unified diff