Revision eab9d8f8
Added by Leszek Koltunski about 5 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.