commit 7403cdfa66cfc519b9fd5a97062d7585cef0eaa3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Sep 18 11:42:04 2020 +0100

    Fix rotations of the Helicopter.

diff --git a/src/main/java/org/distorted/objects/RubikCube.java b/src/main/java/org/distorted/objects/RubikCube.java
index 056bfb73..c48f5581 100644
--- a/src/main/java/org/distorted/objects/RubikCube.java
+++ b/src/main/java/org/distorted/objects/RubikCube.java
@@ -165,6 +165,13 @@ class RubikCube extends RubikObject
     return FACE_COLORS.length;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getBasicStep()
+    {
+    return 1.0f;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getNumStickerTypes()
diff --git a/src/main/java/org/distorted/objects/RubikDino.java b/src/main/java/org/distorted/objects/RubikDino.java
index 159a9bc1..3c6fc078 100644
--- a/src/main/java/org/distorted/objects/RubikDino.java
+++ b/src/main/java/org/distorted/objects/RubikDino.java
@@ -271,6 +271,13 @@ public class RubikDino extends RubikObject
     return FACE_COLORS.length;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getBasicStep()
+    {
+    return SQ3;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getNumStickerTypes()
diff --git a/src/main/java/org/distorted/objects/RubikHelicopter.java b/src/main/java/org/distorted/objects/RubikHelicopter.java
index bbb48496..9bc7c8f1 100644
--- a/src/main/java/org/distorted/objects/RubikHelicopter.java
+++ b/src/main/java/org/distorted/objects/RubikHelicopter.java
@@ -474,7 +474,7 @@ public class RubikHelicopter extends RubikObject
 
   float getScreenRatio()
     {
-    return 2.0f;
+    return 1.5f;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -498,6 +498,13 @@ public class RubikHelicopter extends RubikObject
     return 1;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getBasicStep()
+    {
+    return SQ2/2;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getNumCubitFaces()
@@ -620,7 +627,7 @@ public class RubikHelicopter extends RubikObject
 
   public int computeRowFromOffset(float offset)
     {
-    return offset<0.125f ? 0:3;
+    return offset<0.166f ? 0:2;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikMovementHelicopter.java b/src/main/java/org/distorted/objects/RubikMovementHelicopter.java
index 61029571..bfea69c2 100644
--- a/src/main/java/org/distorted/objects/RubikMovementHelicopter.java
+++ b/src/main/java/org/distorted/objects/RubikMovementHelicopter.java
@@ -25,7 +25,7 @@ class RubikMovementHelicopter extends RubikMovement
 {
   RubikMovementHelicopter()
     {
-    super(RubikHelicopter.ROT_AXIS, RubikHelicopter.FACE_AXIS, 0.125f, 0.125f);
+    super(RubikHelicopter.ROT_AXIS, RubikHelicopter.FACE_AXIS, 0.166f, 0.166f);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -50,7 +50,7 @@ class RubikMovementHelicopter extends RubikMovement
 
   boolean isInsideFace(float[] p)
     {
-    return ( p[0]<=0.125f && p[0]>=-0.125f && p[1]<=0.125f && p[1]>=-0.125f );
+    return ( p[0]<=0.166f && p[0]>=-0.166f && p[1]<=0.166f && p[1]>=-0.166f );
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -61,9 +61,6 @@ class RubikMovementHelicopter extends RubikMovement
 
     int quarter = getQuarter(touchPoint);
 
-
-android.util.Log.e("heli", "point= "+touchPoint[0]+" "+touchPoint[1]+" face="+face+" q:"+quarter);
-
     switch(face)
       {
       case 0: switch(quarter)
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index d6eeb200..9f4b7602 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -59,7 +59,7 @@ public abstract class RubikObject extends DistortedNode
   private static final float MAX_SIZE_CHANGE = 1.3f;
   private static final float MIN_SIZE_CHANGE = 0.8f;
 
-  private static boolean mCreateFromDMesh = true;
+  private static boolean mCreateFromDMesh = false;
 
   private static final Static3D CENTER = new Static3D(0,0,0);
   static final int INTERIOR_COLOR = 0xff000000;
@@ -74,6 +74,7 @@ public abstract class RubikObject extends DistortedNode
   final int NUM_CUBIT_FACES;
   final int NUM_AXIS;
   final int NUM_CUBITS;
+  final float BASIC_STEP;
 
   private static float mInitScreenRatio,mObjectScreenRatio;
 
@@ -124,6 +125,7 @@ public abstract class RubikObject extends DistortedNode
     NUM_FACES = getNumFaces();
     NUM_CUBIT_FACES = getNumCubitFaces();
     NUM_TEXTURES = getNumStickerTypes()*NUM_FACES;
+    BASIC_STEP = getBasicStep();
 
     mSize = size;
     computeStartAndStep(mOrigPos);
@@ -274,7 +276,7 @@ public abstract class RubikObject extends DistortedNode
       }
 
     mStart = min;
-    mStep  = (max-min+1.0f)/mSize;
+    mStep  = (max-min+BASIC_STEP)/mSize;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -695,6 +697,7 @@ public abstract class RubikObject extends DistortedNode
   abstract int getFaceColor(int cubit, int cubitface, int size);
   abstract float returnMultiplier();
   abstract float[] getRowChances();
+  abstract float getBasicStep();
 
   public abstract boolean isSolved();
   public abstract Static3D[] getRotationAxis();
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index bf950764..7fc2dc35 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -77,7 +77,7 @@ public enum RubikObjectList
 
   HELI (
          new int[][] {
-                       {4 , 18, R.raw.skewb, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
+                       {3 , 18, R.raw.skewb, R.drawable.ui_small_skewb, R.drawable.ui_medium_skewb, R.drawable.ui_big_skewb, R.drawable.ui_huge_skewb} ,
                      },
          RubikHelicopter.class,
          new RubikMovementHelicopter(),
diff --git a/src/main/java/org/distorted/objects/RubikPyraminx.java b/src/main/java/org/distorted/objects/RubikPyraminx.java
index c395741e..f175972d 100644
--- a/src/main/java/org/distorted/objects/RubikPyraminx.java
+++ b/src/main/java/org/distorted/objects/RubikPyraminx.java
@@ -228,6 +228,13 @@ public class RubikPyraminx extends RubikObject
     return 1;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getBasicStep()
+    {
+    return SQ6/3;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getNumCubitFaces()
@@ -446,11 +453,11 @@ public class RubikPyraminx extends RubikObject
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// I don't quite understand it, but 0.82 works better than the theoretically correct SQ3/2 ( 0.866 )
+// SQ6/3 = height of the tetrahedron
 
   float returnMultiplier()
     {
-    return getSize()/0.82f;//(SQ3/2);
+    return getSize()/(SQ6/3);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -487,11 +494,10 @@ public class RubikPyraminx extends RubikObject
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
-// 0.82?? see returnMultiplier()
 
   public int computeRowFromOffset(float offset)
     {
-    return (int)(getSize()*offset/0.82f);
+    return (int)(getSize()*offset/(SQ6/3));
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikSkewb.java b/src/main/java/org/distorted/objects/RubikSkewb.java
index ab8d052b..ddf4958e 100644
--- a/src/main/java/org/distorted/objects/RubikSkewb.java
+++ b/src/main/java/org/distorted/objects/RubikSkewb.java
@@ -405,6 +405,13 @@ public class RubikSkewb extends RubikObject
     return 2;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  float getBasicStep()
+    {
+    return SQ3;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int getNumCubitFaces()
