commit f0fa83ae6be2ce5b68c29240699ef7c918eae52c
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Mar 9 22:42:40 2020 +0000

    Some fixes for the Pyraminx.

diff --git a/src/main/java/org/distorted/effect/scramble/ScrambleEffect.java b/src/main/java/org/distorted/effect/scramble/ScrambleEffect.java
index d1b0c470..6bda74e3 100644
--- a/src/main/java/org/distorted/effect/scramble/ScrambleEffect.java
+++ b/src/main/java/org/distorted/effect/scramble/ScrambleEffect.java
@@ -124,7 +124,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// only works if basicAngle<=4, i.e. wont work for something whose basic rotations are by less
+// only works if basicAngle<=4, i.e. wont work for something whose basic rotations are by no less
 // than 90 degrees.
 
   private void addNewScramble()
@@ -154,7 +154,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
         android.util.Log.e("effect", "ERROR: "+mNumDoubleScramblesLeft);
         }
 
-      mCurrentBaseEffectID = mObject.addNewRotation(mLastVector, row, angle*90, durationMillis, this );
+      mCurrentBaseEffectID = mObject.addNewRotation(mLastVector, row, angle*(360/mBasicAngle), durationMillis, this );
       }
     else
       {
diff --git a/src/main/java/org/distorted/object/RubikCube.java b/src/main/java/org/distorted/object/RubikCube.java
index 3f4bdf28..76b44be9 100644
--- a/src/main/java/org/distorted/object/RubikCube.java
+++ b/src/main/java/org/distorted/object/RubikCube.java
@@ -25,6 +25,7 @@ import android.graphics.Paint;
 import org.distorted.library.effect.MatrixEffect;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectRotate;
+import org.distorted.library.effect.VertexEffectSink;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
@@ -117,6 +118,33 @@ class RubikCube extends RubikObject
     return FACE_COLORS.length;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getScreenRatio()
+    {
+    return 0.5f;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  VertexEffectSink getSink(int size)
+    {
+    Static3D center = new Static3D(0,0,0);
+    Static4D region = new Static4D(0,0,0,0.72f);
+    float strength;
+
+    switch(size)
+      {
+      case 1 : strength= 1.1f; break;
+      case 2 : strength= 1.5f; break;
+      case 3 : strength= 1.8f; break;
+      case 4 : strength= 2.0f; break;
+      default: strength= 3.0f - 4.0f/size;
+      }
+
+    return new VertexEffectSink( new Static1D(strength), center, region );
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   Static3D[] getRotationAxis()
diff --git a/src/main/java/org/distorted/object/RubikObject.java b/src/main/java/org/distorted/object/RubikObject.java
index 84489486..f4513b0f 100644
--- a/src/main/java/org/distorted/object/RubikObject.java
+++ b/src/main/java/org/distorted/object/RubikObject.java
@@ -46,10 +46,11 @@ import static org.distorted.magic.RubikRenderer.NODE_FBO_SIZE;
 public abstract class RubikObject extends DistortedNode
   {
   static final int TEXTURE_HEIGHT = 128;
-  static final float OBJECT_SCREEN_RATIO = 0.5f;
   final float[] LEGAL_QUATS;
   final Static3D[] ROTATION_AXIS;
 
+  static float OBJECT_SCREEN_RATIO;
+
   private static final int POST_ROTATION_MILLISEC = 500;
   private final int NUM_CUBITS;
   private int mRotRow;
@@ -83,6 +84,7 @@ public abstract class RubikObject extends DistortedNode
     LEGAL_QUATS = getLegalQuats();
     NUM_CUBITS  = mOrigPos.length;
     ROTATION_AXIS = getRotationAxis();
+    OBJECT_SCREEN_RATIO = getScreenRatio();
 
     mSize = size;
     computeStartAndStep(mOrigPos);
@@ -97,9 +99,8 @@ public abstract class RubikObject extends DistortedNode
     mQuatAccumulated = quatAcc;
 
     Static3D center = new Static3D(0,0,0);
-    Static4D region = new Static4D(0,0,0,0.65f); // 0.72 for a Cube  // TODO
 
-    mSinkEffect = new VertexEffectSink( new Static1D(getSinkStrength()), center, region );
+    mSinkEffect  = getSink(mSize);
     mScaleEffect = new MatrixEffectScale(mScale);
     mQuatCEffect = new MatrixEffectQuaternion(quatCur, center);
     mQuatAEffect = new MatrixEffectQuaternion(quatAcc, center);
@@ -199,20 +200,6 @@ public abstract class RubikObject extends DistortedNode
     rotationAngle.add(mRotationAngleFinal);
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  private float getSinkStrength()
-    {
-    switch(mSize)
-      {
-      case 1 : return 1.1f;
-      case 2 : return 1.5f;
-      case 3 : return 1.8f;
-      case 4 : return 2.0f;
-      default: return 3.0f - 4.0f/mSize;
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Clamp all rotated positions to one of those original ones to avoid accumulating errors.
 
@@ -296,7 +283,7 @@ public abstract class RubikObject extends DistortedNode
 
   public void recomputeScaleFactor(int scrWidth, int scrHeight)
     {
-    float factor = scrWidth>scrHeight ? scrHeight : scrWidth;
+    float factor = Math.min(scrWidth,scrHeight);
     float scaleFactor = OBJECT_SCREEN_RATIO*NODE_FBO_SIZE/mSize;
 
     mNodeScale.set(factor,factor,factor);
@@ -465,6 +452,8 @@ public abstract class RubikObject extends DistortedNode
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
+  abstract float getScreenRatio();
+  abstract VertexEffectSink getSink(int size);
   abstract Static3D[] getCubitPositions(int size);
   abstract float[] getLegalQuats();
   abstract int getNumFaces();
diff --git a/src/main/java/org/distorted/object/RubikPyraminx.java b/src/main/java/org/distorted/object/RubikPyraminx.java
index f02f0da4..ed2087b5 100644
--- a/src/main/java/org/distorted/object/RubikPyraminx.java
+++ b/src/main/java/org/distorted/object/RubikPyraminx.java
@@ -26,6 +26,7 @@ import org.distorted.library.effect.MatrixEffect;
 import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectRotate;
 import org.distorted.library.effect.MatrixEffectScale;
+import org.distorted.library.effect.VertexEffectSink;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
@@ -191,6 +192,22 @@ public class RubikPyraminx extends RubikObject
     return FACE_COLORS.length;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getScreenRatio()
+    {
+    return 0.7f;
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  VertexEffectSink getSink(int size)
+    {
+    Static3D center = new Static3D(0,0,0);
+    Static4D region = new Static4D(0,0,0,0.6f);
+    return new VertexEffectSink( new Static1D(1.3f), center, region );
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   Static3D[] getRotationAxis()
@@ -203,7 +220,7 @@ public class RubikPyraminx extends RubikObject
   void createFaceTexture(Canvas canvas, Paint paint, int face)
     {
     int xoffset = face*TEXTURE_HEIGHT;
-    float STROKE = 0.05f*TEXTURE_HEIGHT;
+    float STROKE = 0.06f*TEXTURE_HEIGHT;
     float OFF = STROKE/2 -1;
     float OFF2 = 0.5f*TEXTURE_HEIGHT + OFF;
     float HEIGHT = TEXTURE_HEIGHT - OFF;
diff --git a/src/main/java/org/distorted/object/RubikPyraminxMovement.java b/src/main/java/org/distorted/object/RubikPyraminxMovement.java
index 3c1d2b0e..42c09ddd 100644
--- a/src/main/java/org/distorted/object/RubikPyraminxMovement.java
+++ b/src/main/java/org/distorted/object/RubikPyraminxMovement.java
@@ -40,8 +40,6 @@ class RubikPyraminxMovement extends RubikObjectMovement
 
     public boolean faceTouched(Static4D rotatedTouchPoint, Static4D rotatedCamera)
       {
-      float cubeHalfSize= RubikObject.OBJECT_SCREEN_RATIO*0.5f;
-
       return false;
       }
 
