Revision f0fa83ae
Added by Leszek Koltunski about 4 years ago
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(); |
Also available in: Unified diff
Some fixes for the Pyraminx.