Revision eab9d8f8
Added by Leszek Koltunski over 4 years ago
src/main/java/org/distorted/objects/RubikCube.java | ||
---|---|---|
167 | 167 |
return FACE_COLORS.length; |
168 | 168 |
} |
169 | 169 | |
170 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
171 | ||
172 |
int getNumStickerTypes() |
|
173 |
{ |
|
174 |
return 1; |
|
175 |
} |
|
176 | ||
170 | 177 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
171 | 178 | |
172 | 179 |
int getNumCubitFaces() |
src/main/java/org/distorted/objects/RubikDino.java | ||
---|---|---|
266 | 266 |
return FACE_COLORS.length; |
267 | 267 |
} |
268 | 268 | |
269 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
270 | ||
271 |
int getNumStickerTypes() |
|
272 |
{ |
|
273 |
return 1; |
|
274 |
} |
|
275 | ||
269 | 276 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
270 | 277 | |
271 | 278 |
int getNumCubitFaces() |
src/main/java/org/distorted/objects/RubikObject.java | ||
---|---|---|
70 | 70 |
final Static4D[] QUATS; |
71 | 71 |
final Cubit[] CUBITS; |
72 | 72 |
final int NUM_FACES; |
73 |
final int NUM_TEXTURES; |
|
73 | 74 |
final int NUM_CUBIT_FACES; |
74 | 75 |
final int NUM_AXIS; |
75 | 76 |
final int NUM_CUBITS; |
... | ... | |
122 | 123 |
mInitScreenRatio = mObjectScreenRatio; |
123 | 124 |
NUM_FACES = getNumFaces(); |
124 | 125 |
NUM_CUBIT_FACES = getNumCubitFaces(); |
126 |
NUM_TEXTURES = getNumStickerTypes()*NUM_FACES; |
|
125 | 127 | |
126 | 128 |
mSize = size; |
127 | 129 |
computeStartAndStep(mOrigPos); |
... | ... | |
385 | 387 |
Bitmap bitmap; |
386 | 388 | |
387 | 389 |
Paint paint = new Paint(); |
388 |
bitmap = Bitmap.createBitmap( (NUM_FACES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888);
|
|
390 |
bitmap = Bitmap.createBitmap( (NUM_TEXTURES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, Bitmap.Config.ARGB_8888);
|
|
389 | 391 |
Canvas canvas = new Canvas(bitmap); |
390 | 392 | |
391 | 393 |
paint.setAntiAlias(true); |
... | ... | |
393 | 395 |
paint.setStyle(Paint.Style.FILL); |
394 | 396 | |
395 | 397 |
paint.setColor(INTERIOR_COLOR); |
396 |
canvas.drawRect(0, 0, (NUM_FACES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, paint);
|
|
398 |
canvas.drawRect(0, 0, (NUM_TEXTURES+1)*TEXTURE_HEIGHT, TEXTURE_HEIGHT, paint);
|
|
397 | 399 | |
398 |
for(int i=0; i<NUM_FACES; i++)
|
|
400 |
for(int i=0; i<NUM_TEXTURES; i++)
|
|
399 | 401 |
{ |
400 | 402 |
createFaceTexture(canvas, paint, i, i*TEXTURE_HEIGHT, 0, TEXTURE_HEIGHT); |
401 | 403 |
} |
... | ... | |
486 | 488 | |
487 | 489 |
public void resetAllTextureMaps() |
488 | 490 |
{ |
489 |
final float ratio = 1.0f/(NUM_FACES+1);
|
|
491 |
final float ratio = 1.0f/(NUM_TEXTURES+1);
|
|
490 | 492 |
int color; |
491 | 493 | |
492 | 494 |
for(int cubit=0; cubit<NUM_CUBITS; cubit++) |
... | ... | |
507 | 509 | |
508 | 510 |
public void setTextureMap(int cubit, int face, int newColor) |
509 | 511 |
{ |
510 |
final float ratio = 1.0f/(NUM_FACES+1);
|
|
512 |
final float ratio = 1.0f/(NUM_TEXTURES+1);
|
|
511 | 513 |
final Static4D[] maps = new Static4D[NUM_CUBIT_FACES]; |
512 | 514 | |
513 | 515 |
maps[face] = new Static4D( newColor*ratio, 0.0f, ratio, 1.0f); |
... | ... | |
686 | 688 |
abstract Static3D[] getCubitPositions(int size); |
687 | 689 |
abstract Static4D[] getQuats(); |
688 | 690 |
abstract int getNumFaces(); |
691 |
abstract int getNumStickerTypes(); |
|
689 | 692 |
abstract int getNumCubitFaces(); |
690 | 693 |
abstract MeshBase createCubitMesh(int cubit); |
691 | 694 |
abstract void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top, int side); |
src/main/java/org/distorted/objects/RubikPyraminx.java | ||
---|---|---|
221 | 221 |
return FACE_COLORS.length; |
222 | 222 |
} |
223 | 223 | |
224 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
225 | ||
226 |
int getNumStickerTypes() |
|
227 |
{ |
|
228 |
return 1; |
|
229 |
} |
|
230 | ||
224 | 231 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
225 | 232 | |
226 | 233 |
int getNumCubitFaces() |
src/main/java/org/distorted/objects/RubikSkewb.java | ||
---|---|---|
107 | 107 |
new Static3D(-0.5f,-0.5f, 0.5f ), |
108 | 108 |
new Static3D(-0.5f,-0.5f,-0.5f ), |
109 | 109 | |
110 |
new Static3D( 0.5f, 0.0f, 0.0f ),
|
|
111 |
new Static3D(-0.5f, 0.0f, 0.0f ),
|
|
112 |
new Static3D( 0.0f, 0.5f, 0.0f ),
|
|
113 |
new Static3D( 0.0f,-0.5f, 0.0f ),
|
|
114 |
new Static3D( 0.0f, 0.0f, 0.5f ),
|
|
115 |
new Static3D( 0.0f, 0.0f,-0.5f ),
|
|
110 |
new Static3D( 0.49f, 0.0f, 0.0f ),
|
|
111 |
new Static3D(-0.49f, 0.0f, 0.0f ),
|
|
112 |
new Static3D( 0.0f, 0.49f, 0.0f ),
|
|
113 |
new Static3D( 0.0f,-0.49f, 0.0f ),
|
|
114 |
new Static3D( 0.0f, 0.0f, 0.49f ),
|
|
115 |
new Static3D( 0.0f, 0.0f,-0.49f ),
|
|
116 | 116 |
}; |
117 | 117 | |
118 | 118 |
// Colors of the faces of cubits. Each cubit, even the face pyramid, has 6 faces |
119 | 119 |
// (the face has one extra 'fake' face so that everything would have the same number) |
120 | 120 |
private static final int[][] mFaceMap = new int[][] |
121 | 121 |
{ |
122 |
{ 4,2,0, 6,6,6 },
|
|
123 |
{ 2,5,0, 6,6,6 },
|
|
124 |
{ 3,4,0, 6,6,6 },
|
|
125 |
{ 5,3,0, 6,6,6 },
|
|
126 |
{ 1,2,4, 6,6,6 },
|
|
127 |
{ 5,2,1, 6,6,6 },
|
|
128 |
{ 4,3,1, 6,6,6 },
|
|
129 |
{ 1,3,5, 6,6,6 },
|
|
130 | ||
131 |
{ 0, 6,6,6,6,6 },
|
|
132 |
{ 1, 6,6,6,6,6 },
|
|
133 |
{ 2, 6,6,6,6,6 },
|
|
134 |
{ 3, 6,6,6,6,6 },
|
|
135 |
{ 4, 6,6,6,6,6 },
|
|
136 |
{ 5, 6,6,6,6,6 },
|
|
122 |
{ 4,2,0, 12,12,12 },
|
|
123 |
{ 2,5,0, 12,12,12 },
|
|
124 |
{ 3,4,0, 12,12,12 },
|
|
125 |
{ 5,3,0, 12,12,12 },
|
|
126 |
{ 1,2,4, 12,12,12 },
|
|
127 |
{ 5,2,1, 12,12,12 },
|
|
128 |
{ 4,3,1, 12,12,12 },
|
|
129 |
{ 1,3,5, 12,12,12 },
|
|
130 | ||
131 |
{ 6 , 12,12,12,12,12 },
|
|
132 |
{ 7 , 12,12,12,12,12 },
|
|
133 |
{ 8 , 12,12,12,12,12 },
|
|
134 |
{ 9 , 12,12,12,12,12 },
|
|
135 |
{ 10, 12,12,12,12,12 },
|
|
136 |
{ 11, 12,12,12,12,12 },
|
|
137 | 137 |
}; |
138 | 138 | |
139 | 139 |
private static MeshBase mCornerMesh, mFaceMesh; |
... | ... | |
174 | 174 |
meshes[2].setEffectAssociation(0,4,0); |
175 | 175 | |
176 | 176 |
float[] vertices1 = { 0,0, F,0, F/2,(SQ3/2)*F }; |
177 |
float[] bands1 = { 1.0f, 0.0f, 0.0f, 0.0f }; |
|
177 |
float[] bands1 = { 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f };
|
|
178 | 178 | |
179 |
meshes[3] = new MeshPolygon(vertices1,bands1,0,0);
|
|
179 |
meshes[3] = new MeshPolygon(vertices1,bands1,1,5);
|
|
180 | 180 |
meshes[3].setEffectAssociation(0,8,0); |
181 | 181 |
meshes[4] = meshes[3].copy(true); |
182 | 182 |
meshes[4].setEffectAssociation(0,16,0); |
... | ... | |
281 | 281 |
float E = SQ2/4; |
282 | 282 |
float[] vertices0 = { -E,-E, +E,-E, +E,+E, -E,+E }; |
283 | 283 | |
284 |
float[] bands0 = { 1.0f ,0, |
|
285 |
1.0f-D/2,D*0.45f,
|
|
286 |
1.0f-D ,D*0.75f,
|
|
287 |
1.0f-2*D,D,
|
|
288 |
0.60f, 0.052f,
|
|
289 |
0.30f, 0.060f,
|
|
290 |
0.0f, 0.065f };
|
|
284 |
float[] bands0 = { 1.0f , 0,
|
|
285 |
1.0f-D/2, D*0.30f,
|
|
286 |
1.0f- D , D*0.50f,
|
|
287 |
1.0f-2*D, D*0.80f,
|
|
288 |
0.60f , D*1.40f,
|
|
289 |
0.30f , D*1.60f,
|
|
290 |
0.0f , D*1.70f };
|
|
291 | 291 | |
292 | 292 |
MeshBase[] meshes = new MeshBase[FACES_PER_CUBIT]; |
293 | 293 |
meshes[0] = new MeshPolygon(vertices0, bands0, 3, 3); |
... | ... | |
296 | 296 |
association <<= 1; |
297 | 297 | |
298 | 298 |
float[] vertices1 = { -E,-SQ3*E, +E,-SQ3*E, 0,0 }; |
299 |
float[] bands1 = { 1.0f, 0.0f, 0.0f, 0.0f }; |
|
299 |
float[] bands1 = { 1.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f };
|
|
300 | 300 | |
301 | 301 |
meshes[1] = new MeshPolygon(vertices1,bands1,0,0); |
302 | 302 |
meshes[1].setEffectAssociation(0,association,0); |
... | ... | |
319 | 319 |
Static3D axis2 = new Static3D(0,0,1); |
320 | 320 |
float angle = -(float)((180.0f/Math.PI)*Math.acos(SQ3/3)); |
321 | 321 | |
322 |
float f = 0.06f;
|
|
322 |
float f = 0.05f;
|
|
323 | 323 |
float r = 0.10f; |
324 | 324 |
float d = 0.5f; |
325 | 325 |
float e = +D*0.6f; |
... | ... | |
394 | 394 |
return FACE_COLORS.length; |
395 | 395 |
} |
396 | 396 | |
397 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
398 |
// Each face has two types of a texture: the central square and the triangle in the corner. |
|
399 | ||
400 |
int getNumStickerTypes() |
|
401 |
{ |
|
402 |
return 2; |
|
403 |
} |
|
404 | ||
397 | 405 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
398 | 406 | |
399 | 407 |
int getNumCubitFaces() |
... | ... | |
464 | 472 |
} |
465 | 473 | |
466 | 474 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
467 |
// TODO |
|
468 | 475 | |
469 | 476 |
void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top, int side) |
470 | 477 |
{ |
471 |
paint.setColor(FACE_COLORS[face]); |
|
472 |
paint.setStyle(Paint.Style.FILL); |
|
473 |
canvas.drawRect(left,top,left+side,top+side,paint); |
|
478 |
int COLORS = FACE_COLORS.length; |
|
479 | ||
480 |
if( face<COLORS ) |
|
481 |
{ |
|
482 |
float STROKE = 0.035f*side; |
|
483 |
float L= left+0.125f*side; |
|
484 |
float H= 0.375f*side; |
|
485 |
float LEN = 0.5f*side; |
|
486 | ||
487 |
paint.setAntiAlias(true); |
|
488 |
paint.setStrokeWidth(STROKE); |
|
489 |
paint.setColor(FACE_COLORS[face]); |
|
490 |
paint.setStyle(Paint.Style.FILL); |
|
491 | ||
492 |
canvas.drawRect(left,top,left+side,top+side,paint); |
|
493 | ||
494 |
paint.setColor(INTERIOR_COLOR); |
|
495 |
paint.setStyle(Paint.Style.STROKE); |
|
496 | ||
497 |
canvas.drawLine( L , H, L+LEN, H , paint); |
|
498 |
canvas.drawLine( L , H, L+LEN, H+LEN, paint); |
|
499 |
canvas.drawLine( L+LEN, H, L+LEN, H+LEN, paint); |
|
500 | ||
501 |
float S1 = 0.125f*side; |
|
502 |
float S2 = 0.070f*side; |
|
503 |
float X = 0.7f*S2; |
|
504 | ||
505 |
float LA = left+0.625f*side; |
|
506 |
float RA = left+0.125f*side; |
|
507 |
float TA = 0.375f*side; |
|
508 |
float BA = 0.875f*side; |
|
509 | ||
510 |
canvas.drawArc( LA-S1, TA , LA , TA+S1, 270, 90, false, paint); |
|
511 |
canvas.drawArc( RA+X , TA , RA+X+S2, TA+S2, 135,135, false, paint); |
|
512 |
canvas.drawArc( LA-S2, BA-X-S2, LA , BA-X , 0,135, false, paint); |
|
513 |
} |
|
514 |
else |
|
515 |
{ |
|
516 |
final float R = (SQ2/2)*side*0.10f; |
|
517 |
final float M = side*(0.5f-SQ2/4+0.018f); |
|
518 | ||
519 |
paint.setColor(FACE_COLORS[face-COLORS]); |
|
520 |
paint.setStyle(Paint.Style.FILL); |
|
521 |
canvas.drawRoundRect( left+M, top+M, left+side-M, top+side-M, R, R, paint); |
|
522 |
} |
|
474 | 523 |
} |
475 | 524 | |
476 | 525 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
Also available in: Unified diff
Progress with the Skewb.