commit d464f54f95274220096c33c0aeaff8e4e8e5faef
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Sep 6 22:56:28 2021 +0200

    Remove statics from the Dino classes.

diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index a743ce73..3531481b 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -342,7 +342,7 @@ class TwistyCube extends TwistyObject
 
   int getFaceColor(int cubit, int cubitface, int numLayers)
     {
-    return CUBITS[cubit].mRotationRow[cubitface/2] == (cubitface%2==0 ? (1<<(numLayers-1)):1) ? cubitface : NUM_FACES;
+    return CUBITS[cubit].mRotationRow[cubitface/2] == (cubitface%2==0 ? (1<<(numLayers-1)):1) ? cubitface : NUM_TEXTURES;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index 4e217dce..3467f56a 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -45,8 +45,6 @@ public abstract class TwistyDino extends TwistyObject
            new Static3D(+SQ3/3,-SQ3/3,-SQ3/3)
          };
 
-  private static final int[] BASIC_ANGLE = new int[] { 3,3,3,3 };
-
   private static final int[] FACE_COLORS = new int[]
          {
            COLOR_YELLOW, COLOR_WHITE,
@@ -54,77 +52,15 @@ public abstract class TwistyDino extends TwistyObject
            COLOR_RED   , COLOR_ORANGE
          };
 
-  // All legal rotation quats of a RubikDino
-  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.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.
-  static final float[][] CENTERS = new float[][]
-         {
-             { 0.0f, 1.5f, 1.5f },
-             { 1.5f, 0.0f, 1.5f },
-             { 0.0f,-1.5f, 1.5f },
-             {-1.5f, 0.0f, 1.5f },
-             { 1.5f, 1.5f, 0.0f },
-             { 1.5f,-1.5f, 0.0f },
-             {-1.5f,-1.5f, 0.0f },
-             {-1.5f, 1.5f, 0.0f },
-             { 0.0f, 1.5f,-1.5f },
-             { 1.5f, 0.0f,-1.5f },
-             { 0.0f,-1.5f,-1.5f },
-             {-1.5f, 0.0f,-1.5f }
-         };
-
-  private static final double[][] VERTICES = new double[][]
-          {
-             {-1.5, 0.0, 0.0},
-             { 1.5, 0.0, 0.0},
-             { 0.0,-1.5, 0.0},
-             { 0.0, 0.0,-1.5}
-          };
-
-  private static final int[][] VERT_INDEXES = new int[][]
-          {
-             {2,1,0},   // counterclockwise!
-             {3,0,1},
-             {2,3,1},
-             {3,2,0},
-          };
-
-  private static final float[][] STICKERS = new float[][]
-          {
-             { 0.0f, -1.0f/3, 0.5f, 1.0f/6, -0.5f, 1.0f/6 }
-          };
-
-  private static final ObjectSticker[] mStickers;
-
-  static
-    {
-    float radius = 0.025f;
-    float stroke = 0.050f;
-    float[] radii = new float[] {radius,radius,radius};
-    mStickers = new ObjectSticker[STICKERS.length];
-    mStickers[0] = new ObjectSticker(STICKERS[0],null,radii,stroke);
-    }
-
   private int mCurrState;
   private int mIndexExcluded;
-  ScrambleState[] mStates;
   private int[][] mScrambleTable;
   private int[] mNumOccurences;
+  private int[] mBasicAngle;
+  private Static4D[] mQuats;
+  private ObjectSticker[] mStickers;
+  float[][] mCenters;
+  ScrambleState[] mStates;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -134,6 +70,27 @@ public abstract class TwistyDino extends TwistyObject
     super(size, size, quat, texture, mesh, effects, moves, obj, res, scrWidth);
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void initializeQuats()
+    {
+    mQuats = 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.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 )
+         };
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   float getScreenRatio()
@@ -145,7 +102,8 @@ public abstract class TwistyDino extends TwistyObject
 
   Static4D[] getQuats()
     {
-    return QUATS;
+    if( mQuats==null ) initializeQuats();
+    return mQuats;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -167,7 +125,7 @@ public abstract class TwistyDino extends TwistyObject
 
   int getNumStickerTypes(int numLayers)
     {
-    return STICKERS.length;
+    return 1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -181,27 +139,49 @@ public abstract class TwistyDino extends TwistyObject
 
   float[][] getCubitPositions(int size)
     {
-    return CENTERS;
+    if( mCenters ==null )
+      {
+      mCenters = new float[][]
+         {
+             { 0.0f, 1.5f, 1.5f },
+             { 1.5f, 0.0f, 1.5f },
+             { 0.0f,-1.5f, 1.5f },
+             {-1.5f, 0.0f, 1.5f },
+             { 1.5f, 1.5f, 0.0f },
+             { 1.5f,-1.5f, 0.0f },
+             {-1.5f,-1.5f, 0.0f },
+             {-1.5f, 1.5f, 0.0f },
+             { 0.0f, 1.5f,-1.5f },
+             { 1.5f, 0.0f,-1.5f },
+             { 0.0f,-1.5f,-1.5f },
+             {-1.5f, 0.0f,-1.5f }
+         };
+      }
+
+    return mCenters;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   ObjectShape getObjectShape(int cubit, int numLayers)
     {
+    double[][] vertices = new double[][] { {-1.5, 0.0, 0.0},{ 1.5, 0.0, 0.0},{ 0.0,-1.5, 0.0},{ 0.0, 0.0,-1.5} };
+    int[][] vert_indices= new int[][] { {2,1,0},{3,0,1},{2,3,1},{3,2,0} };
     float[][] bands     = new float[][] { {0.035f,30,0.16f,0.8f,6,2,2}, {0.010f,30,0.16f,0.2f,6,2,2} };
     int[] bandIndices   = new int[] { 0,0,1,1 };
     float[][] corners   = new float[][] { {0.07f,0.40f}, {0.05f,0.30f} };
     int[] cornerIndices = new int[] { 0,0,1,1 };
     float[][] centers   = new float[][] { {0.0f, -0.75f, -0.75f} };
     int[] centerIndices = new int[] { 0,0,0,0 };
-    return new ObjectShape(VERTICES,VERT_INDEXES,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
+    return new ObjectShape(vertices,vert_indices,bands,bandIndices,corners,cornerIndices,centers,centerIndices,getNumCubitFaces(), null);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   Static4D getQuat(int cubit, int numLayers)
     {
-    return QUATS[cubit];
+    if( mQuats==null ) initializeQuats();
+    return mQuats[cubit];
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -229,6 +209,16 @@ public abstract class TwistyDino extends TwistyObject
 
   ObjectSticker retSticker(int face)
     {
+    if( mStickers==null )
+      {
+      float[][] STICKERS = new float[][] { { 0.0f, -1.0f/3, 0.5f, 1.0f/6, -0.5f, 1.0f/6 } };
+      float radius = 0.025f;
+      float stroke = 0.050f;
+      float[] radii = new float[] {radius,radius,radius};
+      mStickers     = new ObjectSticker[STICKERS.length];
+      mStickers[0]  = new ObjectSticker(STICKERS[0],null,radii,stroke);
+      }
+
     return mStickers[face/NUM_FACES];
     }
 
@@ -299,7 +289,8 @@ public abstract class TwistyDino extends TwistyObject
 
   public int[] getBasicAngle()
     {
-    return BASIC_ANGLE;
+    if( mBasicAngle==null ) mBasicAngle = new int[] { 3,3,3,3 };
+    return mBasicAngle;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDino4.java b/src/main/java/org/distorted/objects/TwistyDino4.java
index c4a9447f..76b62805 100644
--- a/src/main/java/org/distorted/objects/TwistyDino4.java
+++ b/src/main/java/org/distorted/objects/TwistyDino4.java
@@ -32,7 +32,7 @@ import org.distorted.main.R;
 
 public class TwistyDino4 extends TwistyDino
 {
-  private static final int[] mFaceMap = { 4, 2, 2, 4, 0, 2, 1, 4, 0, 0, 1, 1 };
+  private int[] mFaceMap;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -66,6 +66,7 @@ public class TwistyDino4 extends TwistyDino
 
   int getFaceColor(int cubit, int cubitface, int size)
     {
+    if( mFaceMap==null ) mFaceMap = new int[] { 4, 2, 2, 4, 0, 2, 1, 4, 0, 0, 1, 1 };
     return (cubitface==0 || cubitface==1) ? mFaceMap[cubit] : NUM_TEXTURES;
     }
 
diff --git a/src/main/java/org/distorted/objects/TwistyDino6.java b/src/main/java/org/distorted/objects/TwistyDino6.java
index 7ec901b4..d848380a 100644
--- a/src/main/java/org/distorted/objects/TwistyDino6.java
+++ b/src/main/java/org/distorted/objects/TwistyDino6.java
@@ -32,9 +32,7 @@ import org.distorted.main.R;
 
 public class TwistyDino6 extends TwistyDino
 {
-  private static final int[] mFaceMap = {4,2, 0,4, 4,3, 1,4,
-                                         2,0, 3,0, 3,1, 2,1,
-                                         5,2, 0,5, 5,3, 1,5 };
+  private int[] mFaceMap;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -68,11 +66,16 @@ public class TwistyDino6 extends TwistyDino
 
   int getFaceColor(int cubit, int cubitface, int size)
     {
+    if( mFaceMap==null )
+      {
+      mFaceMap = new int[] { 4,2, 0,4, 4,3, 1,4, 2,0, 3,0, 3,1, 2,1, 5,2, 0,5, 5,3, 1,5 };
+      }
+
     switch(cubitface)
       {
       case 0 : return mFaceMap[2*cubit];
       case 1 : return mFaceMap[2*cubit+1];
-      default: return NUM_FACES;
+      default: return NUM_TEXTURES;
       }
     }
 
