Revision f0fa83ae
Added by Leszek Koltunski over 5 years ago
| src/main/java/org/distorted/effect/scramble/ScrambleEffect.java | ||
|---|---|---|
| 124 | 124 |
} |
| 125 | 125 |
|
| 126 | 126 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 127 |
// only works if basicAngle<=4, i.e. wont work for something whose basic rotations are by less |
|
| 127 |
// only works if basicAngle<=4, i.e. wont work for something whose basic rotations are by no less
|
|
| 128 | 128 |
// than 90 degrees. |
| 129 | 129 |
|
| 130 | 130 |
private void addNewScramble() |
| ... | ... | |
| 154 | 154 |
android.util.Log.e("effect", "ERROR: "+mNumDoubleScramblesLeft);
|
| 155 | 155 |
} |
| 156 | 156 |
|
| 157 |
mCurrentBaseEffectID = mObject.addNewRotation(mLastVector, row, angle*90, durationMillis, this );
|
|
| 157 |
mCurrentBaseEffectID = mObject.addNewRotation(mLastVector, row, angle*(360/mBasicAngle), durationMillis, this );
|
|
| 158 | 158 |
} |
| 159 | 159 |
else |
| 160 | 160 |
{
|
| src/main/java/org/distorted/object/RubikCube.java | ||
|---|---|---|
| 25 | 25 |
import org.distorted.library.effect.MatrixEffect; |
| 26 | 26 |
import org.distorted.library.effect.MatrixEffectMove; |
| 27 | 27 |
import org.distorted.library.effect.MatrixEffectRotate; |
| 28 |
import org.distorted.library.effect.VertexEffectSink; |
|
| 28 | 29 |
import org.distorted.library.main.DistortedEffects; |
| 29 | 30 |
import org.distorted.library.main.DistortedTexture; |
| 30 | 31 |
import org.distorted.library.mesh.MeshBase; |
| ... | ... | |
| 117 | 118 |
return FACE_COLORS.length; |
| 118 | 119 |
} |
| 119 | 120 |
|
| 121 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 122 |
|
|
| 123 |
float getScreenRatio() |
|
| 124 |
{
|
|
| 125 |
return 0.5f; |
|
| 126 |
} |
|
| 127 |
|
|
| 128 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 129 |
|
|
| 130 |
VertexEffectSink getSink(int size) |
|
| 131 |
{
|
|
| 132 |
Static3D center = new Static3D(0,0,0); |
|
| 133 |
Static4D region = new Static4D(0,0,0,0.72f); |
|
| 134 |
float strength; |
|
| 135 |
|
|
| 136 |
switch(size) |
|
| 137 |
{
|
|
| 138 |
case 1 : strength= 1.1f; break; |
|
| 139 |
case 2 : strength= 1.5f; break; |
|
| 140 |
case 3 : strength= 1.8f; break; |
|
| 141 |
case 4 : strength= 2.0f; break; |
|
| 142 |
default: strength= 3.0f - 4.0f/size; |
|
| 143 |
} |
|
| 144 |
|
|
| 145 |
return new VertexEffectSink( new Static1D(strength), center, region ); |
|
| 146 |
} |
|
| 147 |
|
|
| 120 | 148 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 121 | 149 |
|
| 122 | 150 |
Static3D[] getRotationAxis() |
| src/main/java/org/distorted/object/RubikObject.java | ||
|---|---|---|
| 46 | 46 |
public abstract class RubikObject extends DistortedNode |
| 47 | 47 |
{
|
| 48 | 48 |
static final int TEXTURE_HEIGHT = 128; |
| 49 |
static final float OBJECT_SCREEN_RATIO = 0.5f; |
|
| 50 | 49 |
final float[] LEGAL_QUATS; |
| 51 | 50 |
final Static3D[] ROTATION_AXIS; |
| 52 | 51 |
|
| 52 |
static float OBJECT_SCREEN_RATIO; |
|
| 53 |
|
|
| 53 | 54 |
private static final int POST_ROTATION_MILLISEC = 500; |
| 54 | 55 |
private final int NUM_CUBITS; |
| 55 | 56 |
private int mRotRow; |
| ... | ... | |
| 83 | 84 |
LEGAL_QUATS = getLegalQuats(); |
| 84 | 85 |
NUM_CUBITS = mOrigPos.length; |
| 85 | 86 |
ROTATION_AXIS = getRotationAxis(); |
| 87 |
OBJECT_SCREEN_RATIO = getScreenRatio(); |
|
| 86 | 88 |
|
| 87 | 89 |
mSize = size; |
| 88 | 90 |
computeStartAndStep(mOrigPos); |
| ... | ... | |
| 97 | 99 |
mQuatAccumulated = quatAcc; |
| 98 | 100 |
|
| 99 | 101 |
Static3D center = new Static3D(0,0,0); |
| 100 |
Static4D region = new Static4D(0,0,0,0.65f); // 0.72 for a Cube // TODO |
|
| 101 | 102 |
|
| 102 |
mSinkEffect = new VertexEffectSink( new Static1D(getSinkStrength()), center, region );
|
|
| 103 |
mSinkEffect = getSink(mSize);
|
|
| 103 | 104 |
mScaleEffect = new MatrixEffectScale(mScale); |
| 104 | 105 |
mQuatCEffect = new MatrixEffectQuaternion(quatCur, center); |
| 105 | 106 |
mQuatAEffect = new MatrixEffectQuaternion(quatAcc, center); |
| ... | ... | |
| 199 | 200 |
rotationAngle.add(mRotationAngleFinal); |
| 200 | 201 |
} |
| 201 | 202 |
|
| 202 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 203 |
|
|
| 204 |
private float getSinkStrength() |
|
| 205 |
{
|
|
| 206 |
switch(mSize) |
|
| 207 |
{
|
|
| 208 |
case 1 : return 1.1f; |
|
| 209 |
case 2 : return 1.5f; |
|
| 210 |
case 3 : return 1.8f; |
|
| 211 |
case 4 : return 2.0f; |
|
| 212 |
default: return 3.0f - 4.0f/mSize; |
|
| 213 |
} |
|
| 214 |
} |
|
| 215 |
|
|
| 216 | 203 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 217 | 204 |
// Clamp all rotated positions to one of those original ones to avoid accumulating errors. |
| 218 | 205 |
|
| ... | ... | |
| 296 | 283 |
|
| 297 | 284 |
public void recomputeScaleFactor(int scrWidth, int scrHeight) |
| 298 | 285 |
{
|
| 299 |
float factor = scrWidth>scrHeight ? scrHeight : scrWidth;
|
|
| 286 |
float factor = Math.min(scrWidth,scrHeight);
|
|
| 300 | 287 |
float scaleFactor = OBJECT_SCREEN_RATIO*NODE_FBO_SIZE/mSize; |
| 301 | 288 |
|
| 302 | 289 |
mNodeScale.set(factor,factor,factor); |
| ... | ... | |
| 465 | 452 |
|
| 466 | 453 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 467 | 454 |
|
| 455 |
abstract float getScreenRatio(); |
|
| 456 |
abstract VertexEffectSink getSink(int size); |
|
| 468 | 457 |
abstract Static3D[] getCubitPositions(int size); |
| 469 | 458 |
abstract float[] getLegalQuats(); |
| 470 | 459 |
abstract int getNumFaces(); |
| src/main/java/org/distorted/object/RubikPyraminx.java | ||
|---|---|---|
| 26 | 26 |
import org.distorted.library.effect.MatrixEffectMove; |
| 27 | 27 |
import org.distorted.library.effect.MatrixEffectRotate; |
| 28 | 28 |
import org.distorted.library.effect.MatrixEffectScale; |
| 29 |
import org.distorted.library.effect.VertexEffectSink; |
|
| 29 | 30 |
import org.distorted.library.main.DistortedEffects; |
| 30 | 31 |
import org.distorted.library.main.DistortedTexture; |
| 31 | 32 |
import org.distorted.library.mesh.MeshBase; |
| ... | ... | |
| 191 | 192 |
return FACE_COLORS.length; |
| 192 | 193 |
} |
| 193 | 194 |
|
| 195 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 196 |
|
|
| 197 |
float getScreenRatio() |
|
| 198 |
{
|
|
| 199 |
return 0.7f; |
|
| 200 |
} |
|
| 201 |
|
|
| 202 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
| 203 |
|
|
| 204 |
VertexEffectSink getSink(int size) |
|
| 205 |
{
|
|
| 206 |
Static3D center = new Static3D(0,0,0); |
|
| 207 |
Static4D region = new Static4D(0,0,0,0.6f); |
|
| 208 |
return new VertexEffectSink( new Static1D(1.3f), center, region ); |
|
| 209 |
} |
|
| 210 |
|
|
| 194 | 211 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
| 195 | 212 |
|
| 196 | 213 |
Static3D[] getRotationAxis() |
| ... | ... | |
| 203 | 220 |
void createFaceTexture(Canvas canvas, Paint paint, int face) |
| 204 | 221 |
{
|
| 205 | 222 |
int xoffset = face*TEXTURE_HEIGHT; |
| 206 |
float STROKE = 0.05f*TEXTURE_HEIGHT;
|
|
| 223 |
float STROKE = 0.06f*TEXTURE_HEIGHT;
|
|
| 207 | 224 |
float OFF = STROKE/2 -1; |
| 208 | 225 |
float OFF2 = 0.5f*TEXTURE_HEIGHT + OFF; |
| 209 | 226 |
float HEIGHT = TEXTURE_HEIGHT - OFF; |
| src/main/java/org/distorted/object/RubikPyraminxMovement.java | ||
|---|---|---|
| 40 | 40 |
|
| 41 | 41 |
public boolean faceTouched(Static4D rotatedTouchPoint, Static4D rotatedCamera) |
| 42 | 42 |
{
|
| 43 |
float cubeHalfSize= RubikObject.OBJECT_SCREEN_RATIO*0.5f; |
|
| 44 |
|
|
| 45 | 43 |
return false; |
| 46 | 44 |
} |
| 47 | 45 |
|
Also available in: Unified diff
Some fixes for the Pyraminx.