Revision eaee1ddc
Added by Leszek Koltunski about 5 years ago
| src/main/java/org/distorted/objects/RubikCube.java | ||
|---|---|---|
| 158 | 158 |
return QUATS; |
| 159 | 159 |
} |
| 160 | 160 |
|
| 161 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 162 |
|
|
| 163 |
boolean shouldResetTextureMaps() |
|
| 164 |
{
|
|
| 165 |
return false; |
|
| 166 |
} |
|
| 167 |
|
|
| 161 | 168 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 162 | 169 |
|
| 163 | 170 |
int getNumFaces() |
| src/main/java/org/distorted/objects/RubikDino.java | ||
|---|---|---|
| 37 | 37 |
import org.distorted.library.type.Static1D; |
| 38 | 38 |
import org.distorted.library.type.Static3D; |
| 39 | 39 |
import org.distorted.library.type.Static4D; |
| 40 |
import org.distorted.main.RubikSurfaceView; |
|
| 41 | 40 |
|
| 42 | 41 |
import java.util.Random; |
| 43 | 42 |
|
| ... | ... | |
| 45 | 44 |
|
| 46 | 45 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 47 | 46 |
|
| 48 |
public class RubikDino extends RubikObject |
|
| 47 |
public abstract class RubikDino extends RubikObject
|
|
| 49 | 48 |
{
|
| 50 | 49 |
private static final float SQ2 = (float)Math.sqrt(2); |
| 51 | 50 |
private static final float SQ3 = (float)Math.sqrt(3); |
| ... | ... | |
| 75 | 74 |
}; |
| 76 | 75 |
|
| 77 | 76 |
// All legal rotation quats of a RubikDino |
| 78 |
private static final Static4D[] QUATS = new Static4D[]
|
|
| 77 |
static final Static4D[] QUATS = new Static4D[] |
|
| 79 | 78 |
{
|
| 80 | 79 |
new Static4D( 0.0f, 0.0f, 0.0f, 1.0f ), |
| 81 | 80 |
new Static4D( 0.5f, 0.5f, 0.5f, -0.5f ), |
| ... | ... | |
| 108 | 107 |
new Static3D(-1.5f, 0.0f,-1.5f ) |
| 109 | 108 |
}; |
| 110 | 109 |
|
| 111 |
private static final int[] mFaceMap = {4,2, 0,4, 4,3, 1,4,
|
|
| 112 |
2,0, 3,0, 3,1, 2,1, |
|
| 113 |
5,2, 0,5, 5,3, 1,5 }; |
|
| 114 |
|
|
| 115 | 110 |
private static MeshBase mMesh; |
| 116 | 111 |
|
| 117 | 112 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 118 | 113 |
|
| 119 |
RubikDino(int size, Static4D quat, DistortedTexture texture, |
|
| 120 |
MeshSquare mesh, DistortedEffects effects, int[][] moves, Resources res, int scrWidth)
|
|
| 114 |
RubikDino(int size, Static4D quat, DistortedTexture texture, MeshSquare mesh,
|
|
| 115 |
DistortedEffects effects, int[][] moves, RubikObjectList obj, Resources res, int scrWidth)
|
|
| 121 | 116 |
{
|
| 122 |
super(size, 60, quat, texture, mesh, effects, moves, RubikObjectList.DINO, res, scrWidth);
|
|
| 117 |
super(size, 60, quat, texture, mesh, effects, moves, obj, res, scrWidth);
|
|
| 123 | 118 |
} |
| 124 | 119 |
|
| 125 | 120 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| ... | ... | |
| 312 | 307 |
return mesh; |
| 313 | 308 |
} |
| 314 | 309 |
|
| 315 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 316 |
|
|
| 317 |
int getFaceColor(int cubit, int cubitface, int size) |
|
| 318 |
{
|
|
| 319 |
switch(cubitface) |
|
| 320 |
{
|
|
| 321 |
case 0 : return mFaceMap[2*cubit]; |
|
| 322 |
case 1 : return mFaceMap[2*cubit+1]; |
|
| 323 |
default: return NUM_FACES; |
|
| 324 |
} |
|
| 325 |
} |
|
| 326 |
|
|
| 327 | 310 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 328 | 311 |
|
| 329 | 312 |
void createFaceTexture(Canvas canvas, Paint paint, int face, int left, int top, int side) |
| ... | ... | |
| 468 | 451 |
} |
| 469 | 452 |
} |
| 470 | 453 |
|
| 471 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 472 |
// remember about the double cover or unit quaternions! |
|
| 473 |
|
|
| 474 |
private int mulQuat(int q1, int q2) |
|
| 475 |
{
|
|
| 476 |
Static4D result = RubikSurfaceView.quatMultiply(QUATS[q1],QUATS[q2]); |
|
| 477 |
|
|
| 478 |
float rX = result.get0(); |
|
| 479 |
float rY = result.get1(); |
|
| 480 |
float rZ = result.get2(); |
|
| 481 |
float rW = result.get3(); |
|
| 482 |
|
|
| 483 |
final float MAX_ERROR = 0.1f; |
|
| 484 |
float dX,dY,dZ,dW; |
|
| 485 |
|
|
| 486 |
for(int i=0; i<QUATS.length; i++) |
|
| 487 |
{
|
|
| 488 |
dX = QUATS[i].get0() - rX; |
|
| 489 |
dY = QUATS[i].get1() - rY; |
|
| 490 |
dZ = QUATS[i].get2() - rZ; |
|
| 491 |
dW = QUATS[i].get3() - rW; |
|
| 492 |
|
|
| 493 |
if( dX<MAX_ERROR && dX>-MAX_ERROR && |
|
| 494 |
dY<MAX_ERROR && dY>-MAX_ERROR && |
|
| 495 |
dZ<MAX_ERROR && dZ>-MAX_ERROR && |
|
| 496 |
dW<MAX_ERROR && dW>-MAX_ERROR ) return i; |
|
| 497 |
|
|
| 498 |
dX = QUATS[i].get0() + rX; |
|
| 499 |
dY = QUATS[i].get1() + rY; |
|
| 500 |
dZ = QUATS[i].get2() + rZ; |
|
| 501 |
dW = QUATS[i].get3() + rW; |
|
| 502 |
|
|
| 503 |
if( dX<MAX_ERROR && dX>-MAX_ERROR && |
|
| 504 |
dY<MAX_ERROR && dY>-MAX_ERROR && |
|
| 505 |
dZ<MAX_ERROR && dZ>-MAX_ERROR && |
|
| 506 |
dW<MAX_ERROR && dW>-MAX_ERROR ) return i; |
|
| 507 |
} |
|
| 508 |
|
|
| 509 |
return -1; |
|
| 510 |
} |
|
| 511 |
|
|
| 512 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 513 |
// Dino is solved if and only if: |
|
| 514 |
// |
|
| 515 |
// All four 'X' cubits (i.e. those whose longest edge goes along the X axis) are rotated |
|
| 516 |
// by the same quaternion qX, similarly all four 'Y' cubits by the same qY and all four 'Z' |
|
| 517 |
// by the same qZ, and then either: |
|
| 518 |
// |
|
| 519 |
// a) qX = qY = qZ |
|
| 520 |
// b) qY = qX*Q2 and qZ = qX*Q8 (i.e. swap of WHITE and YELLOW faces) |
|
| 521 |
// c) qX = qY*Q2 and qZ = qY*Q10 (i.e. swap of BLUE and GREEN faces) |
|
| 522 |
// d) qX = qZ*Q8 and qY = qZ*Q10 (i.e. swap of RED and BROWN faces) |
|
| 523 |
// |
|
| 524 |
// BUT: cases b), c) and d) are really the same - it's all just a mirror image of the original. |
|
| 525 |
// |
|
| 526 |
// X cubits: 0, 2, 8, 10 |
|
| 527 |
// Y cubits: 1, 3, 9, 11 |
|
| 528 |
// Z cubits: 4, 5, 6, 7 |
|
| 529 |
|
|
| 530 |
public boolean isSolved() |
|
| 531 |
{
|
|
| 532 |
int qX = CUBITS[0].mQuatIndex; |
|
| 533 |
int qY = CUBITS[1].mQuatIndex; |
|
| 534 |
int qZ = CUBITS[4].mQuatIndex; |
|
| 535 |
|
|
| 536 |
if( CUBITS[2].mQuatIndex != qX || CUBITS[8].mQuatIndex != qX || CUBITS[10].mQuatIndex != qX || |
|
| 537 |
CUBITS[3].mQuatIndex != qY || CUBITS[9].mQuatIndex != qY || CUBITS[11].mQuatIndex != qY || |
|
| 538 |
CUBITS[5].mQuatIndex != qZ || CUBITS[6].mQuatIndex != qZ || CUBITS[ 7].mQuatIndex != qZ ) |
|
| 539 |
{
|
|
| 540 |
return false; |
|
| 541 |
} |
|
| 542 |
|
|
| 543 |
return ( qX==qY && qX==qZ ) || ( qY==mulQuat(qX,2) && qZ==mulQuat(qX,8) ); |
|
| 544 |
} |
|
| 545 |
|
|
| 546 | 454 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 547 | 455 |
// only needed for solvers - there are no Dino solvers ATM) |
| 548 | 456 |
|
| src/main/java/org/distorted/objects/RubikDino4.java | ||
|---|---|---|
| 1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 2 |
// Copyright 2020 Leszek Koltunski // |
|
| 3 |
// // |
|
| 4 |
// This file is part of Magic Cube. // |
|
| 5 |
// // |
|
| 6 |
// Magic Cube is free software: you can redistribute it and/or modify // |
|
| 7 |
// it under the terms of the GNU General Public License as published by // |
|
| 8 |
// the Free Software Foundation, either version 2 of the License, or // |
|
| 9 |
// (at your option) any later version. // |
|
| 10 |
// // |
|
| 11 |
// Magic Cube is distributed in the hope that it will be useful, // |
|
| 12 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of // |
|
| 13 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
|
| 14 |
// GNU General Public License for more details. // |
|
| 15 |
// // |
|
| 16 |
// You should have received a copy of the GNU General Public License // |
|
| 17 |
// along with Magic Cube. If not, see <http://www.gnu.org/licenses/>. // |
|
| 18 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 19 |
|
|
| 20 |
package org.distorted.objects; |
|
| 21 |
|
|
| 22 |
import android.content.res.Resources; |
|
| 23 |
|
|
| 24 |
import org.distorted.library.main.DistortedEffects; |
|
| 25 |
import org.distorted.library.main.DistortedTexture; |
|
| 26 |
import org.distorted.library.mesh.MeshSquare; |
|
| 27 |
import org.distorted.library.type.Static4D; |
|
| 28 |
import org.distorted.main.RubikSurfaceView; |
|
| 29 |
|
|
| 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 31 |
|
|
| 32 |
public class RubikDino4 extends RubikDino |
|
| 33 |
{
|
|
| 34 |
private static final int[] mFaceMap = {4,4, 2,2, 2,2, 4,4,
|
|
| 35 |
0,0, 2,2, 1,1, 4,4, |
|
| 36 |
0,0, 0,0, 1,1, 1,1 }; |
|
| 37 |
|
|
| 38 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 39 |
|
|
| 40 |
RubikDino4(int size, Static4D quat, DistortedTexture texture, |
|
| 41 |
MeshSquare mesh, DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
| 42 |
{
|
|
| 43 |
super(size, quat, texture, mesh, effects, moves, RubikObjectList.DIN4, res, scrWidth); |
|
| 44 |
} |
|
| 45 |
|
|
| 46 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 47 |
|
|
| 48 |
int getFaceColor(int cubit, int cubitface, int size) |
|
| 49 |
{
|
|
| 50 |
switch(cubitface) |
|
| 51 |
{
|
|
| 52 |
case 0 : return mFaceMap[2*cubit]; |
|
| 53 |
case 1 : return mFaceMap[2*cubit+1]; |
|
| 54 |
default: return NUM_FACES; |
|
| 55 |
} |
|
| 56 |
} |
|
| 57 |
|
|
| 58 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 59 |
|
|
| 60 |
boolean shouldResetTextureMaps() |
|
| 61 |
{
|
|
| 62 |
return true; |
|
| 63 |
} |
|
| 64 |
|
|
| 65 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 66 |
// Dino4 is solved if and only if the four groups of three same-colored cubits each are rotate with |
|
| 67 |
// the same quaternion (actually we need to check only 3 first groups - if those are correct, the |
|
| 68 |
// fourth one also needs to be correct). |
|
| 69 |
// |
|
| 70 |
// White group : 6,10,11 |
|
| 71 |
// Red group : 0,3,7 |
|
| 72 |
// Blue group : 1,2,5 |
|
| 73 |
// Yellow group: 4,8,9 |
|
| 74 |
|
|
| 75 |
public boolean isSolved() |
|
| 76 |
{
|
|
| 77 |
int qR = CUBITS[0].mQuatIndex; |
|
| 78 |
int qB = CUBITS[1].mQuatIndex; |
|
| 79 |
int qY = CUBITS[4].mQuatIndex; |
|
| 80 |
|
|
| 81 |
return (CUBITS[3].mQuatIndex == qR && CUBITS[7].mQuatIndex == qR && |
|
| 82 |
CUBITS[2].mQuatIndex == qB && CUBITS[5].mQuatIndex == qB && |
|
| 83 |
CUBITS[8].mQuatIndex == qY && CUBITS[9].mQuatIndex == qY ); |
|
| 84 |
} |
|
| 85 |
} |
|
| src/main/java/org/distorted/objects/RubikDino6.java | ||
|---|---|---|
| 1 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 2 |
// Copyright 2020 Leszek Koltunski // |
|
| 3 |
// // |
|
| 4 |
// This file is part of Magic Cube. // |
|
| 5 |
// // |
|
| 6 |
// Magic Cube is free software: you can redistribute it and/or modify // |
|
| 7 |
// it under the terms of the GNU General Public License as published by // |
|
| 8 |
// the Free Software Foundation, either version 2 of the License, or // |
|
| 9 |
// (at your option) any later version. // |
|
| 10 |
// // |
|
| 11 |
// Magic Cube is distributed in the hope that it will be useful, // |
|
| 12 |
// but WITHOUT ANY WARRANTY; without even the implied warranty of // |
|
| 13 |
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // |
|
| 14 |
// GNU General Public License for more details. // |
|
| 15 |
// // |
|
| 16 |
// You should have received a copy of the GNU General Public License // |
|
| 17 |
// along with Magic Cube. If not, see <http://www.gnu.org/licenses/>. // |
|
| 18 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 19 |
|
|
| 20 |
package org.distorted.objects; |
|
| 21 |
|
|
| 22 |
import android.content.res.Resources; |
|
| 23 |
|
|
| 24 |
import org.distorted.library.main.DistortedEffects; |
|
| 25 |
import org.distorted.library.main.DistortedTexture; |
|
| 26 |
import org.distorted.library.mesh.MeshSquare; |
|
| 27 |
import org.distorted.library.type.Static4D; |
|
| 28 |
import org.distorted.main.RubikSurfaceView; |
|
| 29 |
|
|
| 30 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 31 |
|
|
| 32 |
public class RubikDino6 extends RubikDino |
|
| 33 |
{
|
|
| 34 |
private static final int[] mFaceMap = {4,2, 0,4, 4,3, 1,4,
|
|
| 35 |
2,0, 3,0, 3,1, 2,1, |
|
| 36 |
5,2, 0,5, 5,3, 1,5 }; |
|
| 37 |
|
|
| 38 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 39 |
|
|
| 40 |
RubikDino6(int size, Static4D quat, DistortedTexture texture, |
|
| 41 |
MeshSquare mesh, DistortedEffects effects, int[][] moves, Resources res, int scrWidth) |
|
| 42 |
{
|
|
| 43 |
super(size, quat, texture, mesh, effects, moves, RubikObjectList.DINO, res, scrWidth); |
|
| 44 |
} |
|
| 45 |
|
|
| 46 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 47 |
|
|
| 48 |
private int mulQuat(int q1, int q2) |
|
| 49 |
{
|
|
| 50 |
Static4D result = RubikSurfaceView.quatMultiply(QUATS[q1],QUATS[q2]); |
|
| 51 |
|
|
| 52 |
float rX = result.get0(); |
|
| 53 |
float rY = result.get1(); |
|
| 54 |
float rZ = result.get2(); |
|
| 55 |
float rW = result.get3(); |
|
| 56 |
|
|
| 57 |
final float MAX_ERROR = 0.1f; |
|
| 58 |
float dX,dY,dZ,dW; |
|
| 59 |
|
|
| 60 |
for(int i=0; i<QUATS.length; i++) |
|
| 61 |
{
|
|
| 62 |
dX = QUATS[i].get0() - rX; |
|
| 63 |
dY = QUATS[i].get1() - rY; |
|
| 64 |
dZ = QUATS[i].get2() - rZ; |
|
| 65 |
dW = QUATS[i].get3() - rW; |
|
| 66 |
|
|
| 67 |
if( dX<MAX_ERROR && dX>-MAX_ERROR && |
|
| 68 |
dY<MAX_ERROR && dY>-MAX_ERROR && |
|
| 69 |
dZ<MAX_ERROR && dZ>-MAX_ERROR && |
|
| 70 |
dW<MAX_ERROR && dW>-MAX_ERROR ) return i; |
|
| 71 |
|
|
| 72 |
dX = QUATS[i].get0() + rX; |
|
| 73 |
dY = QUATS[i].get1() + rY; |
|
| 74 |
dZ = QUATS[i].get2() + rZ; |
|
| 75 |
dW = QUATS[i].get3() + rW; |
|
| 76 |
|
|
| 77 |
if( dX<MAX_ERROR && dX>-MAX_ERROR && |
|
| 78 |
dY<MAX_ERROR && dY>-MAX_ERROR && |
|
| 79 |
dZ<MAX_ERROR && dZ>-MAX_ERROR && |
|
| 80 |
dW<MAX_ERROR && dW>-MAX_ERROR ) return i; |
|
| 81 |
} |
|
| 82 |
|
|
| 83 |
return -1; |
|
| 84 |
} |
|
| 85 |
|
|
| 86 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 87 |
|
|
| 88 |
int getFaceColor(int cubit, int cubitface, int size) |
|
| 89 |
{
|
|
| 90 |
switch(cubitface) |
|
| 91 |
{
|
|
| 92 |
case 0 : return mFaceMap[2*cubit]; |
|
| 93 |
case 1 : return mFaceMap[2*cubit+1]; |
|
| 94 |
default: return NUM_FACES; |
|
| 95 |
} |
|
| 96 |
} |
|
| 97 |
|
|
| 98 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 99 |
|
|
| 100 |
boolean shouldResetTextureMaps() |
|
| 101 |
{
|
|
| 102 |
return false; |
|
| 103 |
} |
|
| 104 |
|
|
| 105 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 106 |
// Dino6 is solved if and only if: |
|
| 107 |
// |
|
| 108 |
// All four 'X' cubits (i.e. those whose longest edge goes along the X axis) are rotated |
|
| 109 |
// by the same quaternion qX, similarly all four 'Y' cubits by the same qY and all four 'Z' |
|
| 110 |
// by the same qZ, and then either: |
|
| 111 |
// |
|
| 112 |
// a) qX = qY = qZ |
|
| 113 |
// b) qY = qX*Q2 and qZ = qX*Q8 (i.e. swap of WHITE and YELLOW faces) |
|
| 114 |
// c) qX = qY*Q2 and qZ = qY*Q10 (i.e. swap of BLUE and GREEN faces) |
|
| 115 |
// d) qX = qZ*Q8 and qY = qZ*Q10 (i.e. swap of RED and BROWN faces) |
|
| 116 |
// |
|
| 117 |
// BUT: cases b), c) and d) are really the same - it's all just a mirror image of the original. |
|
| 118 |
// |
|
| 119 |
// X cubits: 0, 2, 8, 10 |
|
| 120 |
// Y cubits: 1, 3, 9, 11 |
|
| 121 |
// Z cubits: 4, 5, 6, 7 |
|
| 122 |
|
|
| 123 |
public boolean isSolved() |
|
| 124 |
{
|
|
| 125 |
int qX = CUBITS[0].mQuatIndex; |
|
| 126 |
int qY = CUBITS[1].mQuatIndex; |
|
| 127 |
int qZ = CUBITS[4].mQuatIndex; |
|
| 128 |
|
|
| 129 |
if( CUBITS[2].mQuatIndex != qX || CUBITS[8].mQuatIndex != qX || CUBITS[10].mQuatIndex != qX || |
|
| 130 |
CUBITS[3].mQuatIndex != qY || CUBITS[9].mQuatIndex != qY || CUBITS[11].mQuatIndex != qY || |
|
| 131 |
CUBITS[5].mQuatIndex != qZ || CUBITS[6].mQuatIndex != qZ || CUBITS[ 7].mQuatIndex != qZ ) |
|
| 132 |
{
|
|
| 133 |
return false; |
|
| 134 |
} |
|
| 135 |
|
|
| 136 |
return ( qX==qY && qX==qZ ) || ( qY==mulQuat(qX,2) && qZ==mulQuat(qX,8) ); |
|
| 137 |
} |
|
| 138 |
} |
|
| src/main/java/org/distorted/objects/RubikHelicopter.java | ||
|---|---|---|
| 484 | 484 |
return QUATS; |
| 485 | 485 |
} |
| 486 | 486 |
|
| 487 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 488 |
|
|
| 489 |
boolean shouldResetTextureMaps() |
|
| 490 |
{
|
|
| 491 |
return false; |
|
| 492 |
} |
|
| 493 |
|
|
| 487 | 494 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 488 | 495 |
|
| 489 | 496 |
int getNumFaces() |
| src/main/java/org/distorted/objects/RubikObject.java | ||
|---|---|---|
| 209 | 209 |
CUBITS[i] = new Cubit(this,mOrigPos[i]); |
| 210 | 210 |
mMesh.setEffectAssociation(i, CUBITS[i].computeAssociation(), 0); |
| 211 | 211 |
} |
| 212 |
|
|
| 213 |
if( shouldResetTextureMaps() ) resetAllTextureMaps(); |
|
| 212 | 214 |
} |
| 213 | 215 |
else |
| 214 | 216 |
{
|
| ... | ... | |
| 694 | 696 |
abstract float returnMultiplier(); |
| 695 | 697 |
abstract float[] getRowChances(); |
| 696 | 698 |
abstract float getBasicStep(); |
| 699 |
abstract boolean shouldResetTextureMaps(); |
|
| 697 | 700 |
|
| 698 | 701 |
public abstract boolean isSolved(); |
| 699 | 702 |
public abstract Static3D[] getRotationAxis(); |
| src/main/java/org/distorted/objects/RubikObjectList.java | ||
|---|---|---|
| 61 | 61 |
new int[][] {
|
| 62 | 62 |
{3 , 10, R.raw.dino, R.drawable.ui_small_dino, R.drawable.ui_medium_dino, R.drawable.ui_big_dino, R.drawable.ui_huge_dino} ,
|
| 63 | 63 |
}, |
| 64 |
RubikDino.class, |
|
| 64 |
RubikDino6.class, |
|
| 65 |
new RubikMovementDino(), |
|
| 66 |
2 |
|
| 67 |
), |
|
| 68 |
|
|
| 69 |
DIN4 ( |
|
| 70 |
new int[][] {
|
|
| 71 |
{3 , 7, R.raw.dino, R.drawable.ui_small_din4, R.drawable.ui_medium_din4, R.drawable.ui_big_din4, R.drawable.ui_huge_din4} ,
|
|
| 72 |
}, |
|
| 73 |
RubikDino4.class, |
|
| 65 | 74 |
new RubikMovementDino(), |
| 66 | 75 |
2 |
| 67 | 76 |
), |
| ... | ... | |
| 457 | 466 |
{
|
| 458 | 467 |
case 0: return new RubikCube (size, quat, texture, mesh, effects, moves, res, scrWidth); |
| 459 | 468 |
case 1: return new RubikPyraminx (size, quat, texture, mesh, effects, moves, res, scrWidth); |
| 460 |
case 2: return new RubikDino (size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 461 |
case 3: return new RubikSkewb (size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 462 |
case 4: return new RubikHelicopter(size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 469 |
case 2: return new RubikDino6 (size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 470 |
case 3: return new RubikDino4 (size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 471 |
case 4: return new RubikSkewb (size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 472 |
case 5: return new RubikHelicopter(size, quat, texture, mesh, effects, moves, res, scrWidth); |
|
| 463 | 473 |
} |
| 464 | 474 |
|
| 465 | 475 |
return null; |
| src/main/java/org/distorted/objects/RubikPyraminx.java | ||
|---|---|---|
| 249 | 249 |
return 0.82f; |
| 250 | 250 |
} |
| 251 | 251 |
|
| 252 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 253 |
|
|
| 254 |
boolean shouldResetTextureMaps() |
|
| 255 |
{
|
|
| 256 |
return false; |
|
| 257 |
} |
|
| 258 |
|
|
| 252 | 259 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 253 | 260 |
|
| 254 | 261 |
int getFaceColor(int cubit, int cubitface, int size) |
| src/main/java/org/distorted/objects/RubikSkewb.java | ||
|---|---|---|
| 397 | 397 |
return FACE_COLORS.length; |
| 398 | 398 |
} |
| 399 | 399 |
|
| 400 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 401 |
|
|
| 402 |
boolean shouldResetTextureMaps() |
|
| 403 |
{
|
|
| 404 |
return false; |
|
| 405 |
} |
|
| 406 |
|
|
| 400 | 407 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 401 | 408 |
// Each face has two types of a texture: the central square and the triangle in the corner. |
| 402 | 409 |
|
| src/main/java/org/distorted/states/RubikStatePlay.java | ||
|---|---|---|
| 219 | 219 |
View popupView = mPlayPopup.getContentView(); |
| 220 | 220 |
popupView.setSystemUiVisibility(RubikActivity.FLAGS); |
| 221 | 221 |
|
| 222 |
final int sizeIndex = RubikObjectList.getSizeIndex(mObject,mSize); |
|
| 223 |
final int maxLevel = RubikObjectList.getMaxLevel(mObject, sizeIndex); |
|
| 224 |
final int levelsShown = Math.min(maxLevel,LEVELS_SHOWN); |
|
| 225 |
|
|
| 222 | 226 |
mPlayPopup.showAsDropDown(view, margin, margin, Gravity.RIGHT); |
| 223 |
mPlayPopup.update(view, mPlayLayoutWidth, (int)(LEVELS_SHOWN*(mMenuItemSize+margin)+margin));
|
|
| 227 |
mPlayPopup.update(view, mPlayLayoutWidth, (int)(levelsShown*(mMenuItemSize+margin)+2*margin));
|
|
| 224 | 228 |
|
| 225 | 229 |
mPlayPopup.setFocusable(true); |
| 226 | 230 |
mPlayPopup.update(); |
Also available in: Unified diff
Add the 4-color Dino.
Still one thing needs to be done about it: randomization of Moves (now sometimes in Level 1 the randomized move leads to an already solved position)