commit 380162cb0cf8df35323502054c85f91dc84f4609
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri Aug 7 01:13:06 2020 +0100

    Progress with RubikDino.

diff --git a/src/main/java/org/distorted/objects/RubikDino.java b/src/main/java/org/distorted/objects/RubikDino.java
index 8e31b318..d769814c 100644
--- a/src/main/java/org/distorted/objects/RubikDino.java
+++ b/src/main/java/org/distorted/objects/RubikDino.java
@@ -70,34 +70,34 @@ public class RubikDino extends RubikObject
   private static final Static4D[] QUATS = new Static4D[]
          {
            new Static4D(  0.0f,  0.0f,  0.0f,  1.0f ),
+           new Static4D(  0.5f,  0.5f,  0.5f, -0.5f ),
            new Static4D(  0.0f,  0.0f,  1.0f,  0.0f ),
-           new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
-           new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
+           new Static4D(  0.5f, -0.5f, -0.5f, -0.5f ),
            new Static4D(  0.5f,  0.5f,  0.5f,  0.5f ),
-           new Static4D(  0.5f,  0.5f,  0.5f, -0.5f ),
-           new Static4D(  0.5f,  0.5f, -0.5f,  0.5f ),
            new Static4D(  0.5f,  0.5f, -0.5f, -0.5f ),
-           new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
            new Static4D(  0.5f, -0.5f,  0.5f, -0.5f ),
            new Static4D(  0.5f, -0.5f, -0.5f,  0.5f ),
-           new Static4D(  0.5f, -0.5f, -0.5f, -0.5f )
+           new Static4D(  0.0f,  1.0f,  0.0f,  0.0f ),
+           new Static4D(  0.5f, -0.5f,  0.5f,  0.5f ),
+           new Static4D(  1.0f,  0.0f,  0.0f,  0.0f ),
+           new Static4D(  0.5f,  0.5f, -0.5f,  0.5f )
          };
 
   // centers of the 12 edges. Must be in the same order like QUATs above.
   private static final Static3D[] CENTERS = new Static3D[]
          {
            new Static3D( 0.0f, 0.5f, 0.5f ),
+           new Static3D( 0.5f, 0.0f, 0.5f ),
            new Static3D( 0.0f,-0.5f, 0.5f ),
-           new Static3D( 0.0f, 0.5f,-0.5f ),
-           new Static3D( 0.0f,-0.5f,-0.5f ),
+           new Static3D(-0.5f, 0.0f, 0.5f ),
            new Static3D( 0.5f, 0.5f, 0.0f ),
-           new Static3D( 0.5f, 0.0f, 0.5f ),
-           new Static3D(-0.5f, 0.0f,-0.5f ),
            new Static3D( 0.5f,-0.5f, 0.0f ),
-           new Static3D( 0.5f, 0.0f,-0.5f ),
            new Static3D(-0.5f,-0.5f, 0.0f ),
            new Static3D(-0.5f, 0.5f, 0.0f ),
-           new Static3D(-0.5f, 0.0f, 0.5f )
+           new Static3D( 0.0f, 0.5f,-0.5f ),
+           new Static3D( 0.5f, 0.0f,-0.5f ),
+           new Static3D( 0.0f,-0.5f,-0.5f ),
+           new Static3D(-0.5f, 0.0f,-0.5f )
          };
 
   private static MeshBase mMesh;
@@ -121,7 +121,7 @@ public class RubikDino extends RubikObject
     int association = 1;
     MeshBase[] meshes = new MeshTriangles[MESHES];
 
-    meshes[0] = new MeshTriangles(9);
+    meshes[0] = new MeshTriangles(11);
     meshes[0].setEffectAssociation(0,association,0);
 
     for(int i=1; i<MESHES; i++)
@@ -141,19 +141,20 @@ public class RubikDino extends RubikObject
     float tetraHeight = SQ2*SQ3/3;
     float d1 = 0.75f*tetraHeight;
     float d2 =-0.10f*tetraHeight;
-    float d3 = 0.20f*tetraHeight;
+    float d3 =-0.05f*tetraHeight;
+    float d4 = 0.15f*tetraHeight;
 
     Static3D dCen0 = new Static3D( d1*a0.get0(), d1*a0.get1(), d1*a0.get2() );
     Static3D dCen1 = new Static3D( d1*a1.get0(), d1*a1.get1(), d1*a1.get2() );
     Static3D dCen2 = new Static3D( d1*a2.get0(), d1*a2.get1(), d1*a2.get2() );
     Static3D dCen3 = new Static3D( d1*a3.get0(), d1*a3.get1(), d1*a3.get2() );
 
-    Static3D dVec0 = new Static3D( d2*a0.get0(), d2*a0.get1(), d2*a0.get2() );
-    Static3D dVec1 = new Static3D( d2*a1.get0(), d2*a1.get1(), d2*a1.get2() );
+    Static3D dVec0 = new Static3D( d3*a0.get0(), d3*a0.get1(), d3*a0.get2() );
+    Static3D dVec1 = new Static3D( d3*a1.get0(), d3*a1.get1(), d3*a1.get2() );
     Static3D dVec2 = new Static3D( d2*a2.get0(), d2*a2.get1(), d2*a2.get2() );
     Static3D dVec3 = new Static3D( d2*a3.get0(), d2*a3.get1(), d2*a3.get2() );
 
-    Static4D dReg  = new Static4D(0,0,0,d3);
+    Static4D dReg  = new Static4D(0,0,0,d4);
     Static1D dRad  = new Static1D(1);
 
     Static1D angle  = new Static1D(ANGLE_FACES);
@@ -215,20 +216,20 @@ public class RubikDino extends RubikObject
 
     MatrixEffectMove   moveEffect = new MatrixEffectMove  ( new Static3D(0.0f,SQ3*SQ2/12,SQ3/6) );
     MatrixEffectRotate rot1Effect = new MatrixEffectRotate( new Static1D(180+ANGLE_FACES/2), axis, cent);
-    MatrixEffectScale  scalEffect = new MatrixEffectScale ( new Static3D(1.0f, SQ2/2, SQ2*SQ3/6) );
+    MatrixEffectScale  scalEffect = new MatrixEffectScale ( new Static3D(1.0f, SQ2/2, 0.5f) );
     MatrixEffectRotate rot2Effect = new MatrixEffectRotate( new Static1D(-45), axis, cent);
 
-    mMesh.apply(moveEffect,0xffffffff,0);
-    mMesh.apply(rot1Effect,0xffffffff,0);
-    mMesh.apply(scalEffect,0xffffffff,0);
-    mMesh.apply(rot2Effect,0xffffffff,0);
+    mMesh.apply(moveEffect, 0xffffffff, 0);
+    mMesh.apply(rot1Effect, 0xffffffff, 0);
+    mMesh.apply(scalEffect, 0xffffffff, 0);
+    mMesh.apply(rot2Effect, 0xffffffff, 0);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   float getScreenRatio()
     {
-    return 1.0f;
+    return 1.5f;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikDinoMovement.java b/src/main/java/org/distorted/objects/RubikDinoMovement.java
index f2feae69..8411c3c2 100644
--- a/src/main/java/org/distorted/objects/RubikDinoMovement.java
+++ b/src/main/java/org/distorted/objects/RubikDinoMovement.java
@@ -32,6 +32,6 @@ class RubikDinoMovement extends RubikObjectMovement
 
   boolean isInsideFace(float[] p)
     {
-    return ( p[0]<=0.5f && p[0]>=-0.5f && p[1]<=0.5f && p[1]>=-0.5f );
+    return false;//( p[0]<=0.5f && p[0]>=-0.5f && p[1]<=0.5f && p[1]>=-0.5f );
     }
 }
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index 2cee6464..1ba3f196 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -494,6 +494,27 @@ public abstract class RubikObject extends DistortedNode
     boolean belongs;
     final float ratio = 1.0f/(NUM_FACES+1);
 
+    if( 3*ROTATION_AXIS.length == 2*NUM_FACES ) // Dino
+      {
+      final Static4D[] maps = new Static4D[NUM_CUBITS*NUM_CUBIT_FACES];
+
+      final int[] map = {2,4, 4,0, 3,4, 4,1,
+                         0,2, 0,3, 1,3, 1,2,
+                         2,5, 5,0, 3,5, 5,1 };
+
+      for(int i=0; i<NUM_CUBITS; i++)
+        {
+        maps[NUM_CUBIT_FACES*i    ] = new Static4D( map[2*i  ]*ratio, 0.0f, ratio, 1.0f);
+        maps[NUM_CUBIT_FACES*i + 1] = new Static4D( map[2*i+1]*ratio, 0.0f, ratio, 1.0f);
+        maps[NUM_CUBIT_FACES*i + 2] = new Static4D( NUM_FACES *ratio, 0.0f, ratio, 1.0f);
+        maps[NUM_CUBIT_FACES*i + 3] = new Static4D( NUM_FACES *ratio, 0.0f, ratio, 1.0f);
+        }
+
+      mMesh.setTextureMap(maps,0);
+      return;
+      }
+
+
     for(int cubit=0; cubit<NUM_CUBITS; cubit++)
       {
       final Static4D[] maps = new Static4D[NUM_CUBIT_FACES];
@@ -514,14 +535,6 @@ public abstract class RubikObject extends DistortedNode
           maps[i] = new Static4D( (belongs?i:NUM_FACES)*ratio, 0.0f, ratio, 1.0f);
           }
         }
-      else if( 3*ROTATION_AXIS.length == 2*NUM_FACES ) // Dino  TODO
-        {
-        for(int i=0; i<NUM_CUBIT_FACES; i++)
-          {
-          belongs = true;//isOnFace(cubit, i, 0 );
-          maps[i] = new Static4D( (belongs?i:NUM_FACES)*ratio, 0.0f, ratio, 1.0f);
-          }
-        }
 
       mMesh.setTextureMap(maps,NUM_CUBIT_FACES*cubit);
       }
