Project

General

Profile

« Previous | Next » 

Revision f0fa83ae

Added by Leszek Koltunski about 4 years ago

Some fixes for the Pyraminx.

View differences:

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