commit ad7907b0e85431dc826c531dc79a140e84f6b183
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Aug 19 23:28:20 2021 +0200

    Important step towards making the implementation of an individual puzzle code-free (i.e. data-only): move the 'MeshBase[] mMeshes' variable from the individual classes to the parent TwistyObject.

diff --git a/src/main/java/org/distorted/helpers/FactoryCubit.java b/src/main/java/org/distorted/helpers/FactoryCubit.java
index c5113973..2a1ae53a 100644
--- a/src/main/java/org/distorted/helpers/FactoryCubit.java
+++ b/src/main/java/org/distorted/helpers/FactoryCubit.java
@@ -809,6 +809,16 @@ public class FactoryCubit
       }
     }
 
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public void createNewFaceTransform(final ObjectShape shape)
+    {
+    double[][] vertices = shape.getVertices();
+    int[][] indices = shape.getVertIndices();
+    createNewFaceTransform(vertices,indices);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private void computeConvexityCenter(double[] out, float[] in, FaceTransform ft)
@@ -843,6 +853,25 @@ public class FactoryCubit
       }
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public MeshBase createRoundedSolid(final ObjectShape shape)
+    {
+    double[][] vertices     = shape.getVertices();
+    int[][] vertIndexes     = shape.getVertIndices();
+    float[][] bands         = shape.getBands();
+    int[]   bandIndexes     = shape.getBandIndices();
+    float[][] corners       = shape.getCorners();
+    int[]   cornerIndexes   = shape.getCornerIndices();
+    float[][] centers       = shape.getCenters();
+    int[]   centerIndexes   = shape.getCenterIndices();
+    int numComponents       = shape.getNumComponents();
+    float[] convexityCenter = shape.getConvexityCenter();
+
+    return createRoundedSolid(vertices,vertIndexes,bands,bandIndexes,corners,cornerIndexes,
+                              centers,centerIndexes,numComponents,convexityCenter);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public MeshBase createRoundedSolid(final double[][] vertices, final int[][] vertIndexes,
diff --git a/src/main/java/org/distorted/helpers/ObjectShape.java b/src/main/java/org/distorted/helpers/ObjectShape.java
index 6aa14515..dc0ccf2d 100644
--- a/src/main/java/org/distorted/helpers/ObjectShape.java
+++ b/src/main/java/org/distorted/helpers/ObjectShape.java
@@ -26,18 +26,18 @@ public class ObjectShape
   private final double[][] mVertices;
   private final int[][] mVertIndices;
   private final float[][] mBands;
-  private final int[][] mBandIndices;
+  private final int[] mBandIndices;
   private final float[][] mCorners;
-  private final int[][] mCornerIndices;
+  private final int[] mCornerIndices;
   private final float[][] mCenters;
-  private final int[][] mCenterIndices;
+  private final int[] mCenterIndices;
   private final int mNumComponents;
   private final float[] mConvexityCenter;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public ObjectShape(double[][] vertices, int[][] vertIndices, float[][] bands, int[][] bandIndices,
-                     float[][] corners, int[][] cornIndices, float[][] centers, int[][] centIndices,
+  public ObjectShape(double[][] vertices, int[][] vertIndices, float[][] bands, int[] bandIndices,
+                     float[][] corners, int[] cornIndices, float[][] centers, int[] centIndices,
                      int numComponents, float[] convexityCenter)
     {
     mVertices        = vertices;
@@ -75,7 +75,7 @@ public class ObjectShape
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int[][] getBandIndices()
+  public int[] getBandIndices()
     {
     return mBandIndices;
     }
@@ -89,7 +89,7 @@ public class ObjectShape
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int[][] getCornerIndices()
+  public int[] getCornerIndices()
     {
     return mCornerIndices;
     }
@@ -103,7 +103,7 @@ public class ObjectShape
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public int[][] getCenterIndices()
+  public int[] getCenterIndices()
     {
     return mCenterIndices;
     }
diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index 6e2581d6..a5c81b0d 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -130,8 +130,6 @@ abstract class TwistyBandagedAbstract extends TwistyObject
 
   private static final ObjectSticker[] mStickers;
 
-  private static MeshBase[] mMeshes;
-
   static
     {
     mStickers = new ObjectSticker[NUM_STICKERS];
@@ -211,6 +209,8 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     {
     if( mMeshes==null )
       {
+      FactoryCubit factory = FactoryCubit.getInstance();
+      factory.clear();
       int LEN = mDimensions.length;
       mMeshes = new MeshBase[LEN];
 
@@ -271,7 +271,6 @@ abstract class TwistyBandagedAbstract extends TwistyObject
                 {-0.5f*(X-1),-0.5f*(Y-1),-0.5f*(Z-1)}
             };
 
-        FactoryCubit factory = FactoryCubit.getInstance();
         factory.createNewFaceTransform(vertices,vert_indices);
         mMeshes[i] = factory.createRoundedSolid(vertices,vert_indices,
                                                 bands, bandIndexes,
diff --git a/src/main/java/org/distorted/objects/TwistyCube.java b/src/main/java/org/distorted/objects/TwistyCube.java
index f527bfb5..5f8280ed 100644
--- a/src/main/java/org/distorted/objects/TwistyCube.java
+++ b/src/main/java/org/distorted/objects/TwistyCube.java
@@ -120,8 +120,6 @@ class TwistyCube extends TwistyObject
 
   private static final ObjectSticker[] mStickers;
 
-  private static MeshBase[] mMeshes;
-
   static
     {
     final float radius = 0.10f;
@@ -147,13 +145,10 @@ class TwistyCube extends TwistyObject
       {
       FactoryCubit factory = FactoryCubit.getInstance();
       factory.clear();
-      mMeshes = new MeshBase[ObjectList.CUBE.getNumVariants()];
+      mMeshes = new MeshBase[1];
       }
 
-    int ordinal= ObjectList.CUBE.ordinal();
-    int index  = ObjectList.getSizeIndex(ordinal,getNumLayers());
-
-    if( mMeshes[index]==null )
+    if( mMeshes[0]==null )
       {
       int extraI, extraV, num;
       float height;
@@ -176,14 +171,14 @@ class TwistyCube extends TwistyObject
       FactoryCubit factory = FactoryCubit.getInstance();
 
       factory.createNewFaceTransform(VERTICES,VERT_INDEXES);
-      mMeshes[index] = factory.createRoundedSolid(VERTICES, VERT_INDEXES,
-                                                  bands, bandIndexes,
-                                                  corners, cornerIndexes,
-                                                  centers, centerIndexes,
-                                                  getNumCubitFaces(), null );
+      mMeshes[0] = factory.createRoundedSolid(VERTICES, VERT_INDEXES,
+                                              bands, bandIndexes,
+                                              corners, cornerIndexes,
+                                              centers, centerIndexes,
+                                              getNumCubitFaces(), null );
       }
 
-    return mMeshes[index].copy(true);
+    return mMeshes[0].copy(true);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyDiamond.java b/src/main/java/org/distorted/objects/TwistyDiamond.java
index c3c7feca..39989495 100644
--- a/src/main/java/org/distorted/objects/TwistyDiamond.java
+++ b/src/main/java/org/distorted/objects/TwistyDiamond.java
@@ -138,8 +138,6 @@ public class TwistyDiamond extends TwistyObject
 
   private static final ObjectSticker[] mStickers;
 
-  private static MeshBase[] mMeshes;
-
   static
     {
     float radius = 0.06f;
diff --git a/src/main/java/org/distorted/objects/TwistyDino.java b/src/main/java/org/distorted/objects/TwistyDino.java
index 82c2834f..a3f76c13 100644
--- a/src/main/java/org/distorted/objects/TwistyDino.java
+++ b/src/main/java/org/distorted/objects/TwistyDino.java
@@ -103,8 +103,6 @@ public abstract class TwistyDino extends TwistyObject
              {3,2,0},
           };
 
-  private static MeshBase[] mMeshes;
-
   private static final float[][] STICKERS = new float[][]
           {
              { 0.0f, -1.0f/3, 0.5f, 1.0f/6, -0.5f, 1.0f/6 }
diff --git a/src/main/java/org/distorted/objects/TwistyHelicopter.java b/src/main/java/org/distorted/objects/TwistyHelicopter.java
index c7b35e72..df076053 100644
--- a/src/main/java/org/distorted/objects/TwistyHelicopter.java
+++ b/src/main/java/org/distorted/objects/TwistyHelicopter.java
@@ -221,8 +221,6 @@ public class TwistyHelicopter extends TwistyObject
             { 2,0,3 }
           };
 
-  private static MeshBase[] mMeshes;
-
   private static final float[][] STICKERS = new float[][]
           {
             { -0.5f, 0.25f, 0.25f, -0.5f, 0.25f, 0.25f }
diff --git a/src/main/java/org/distorted/objects/TwistyIvy.java b/src/main/java/org/distorted/objects/TwistyIvy.java
index 933e4612..55dcc6d4 100644
--- a/src/main/java/org/distorted/objects/TwistyIvy.java
+++ b/src/main/java/org/distorted/objects/TwistyIvy.java
@@ -94,8 +94,6 @@ public class TwistyIvy extends TwistyObject
            { 11, 12,12,12,12,12 },
          };
 
-  private static MeshBase[] mMeshes;
-
   private static final ObjectSticker[] mStickers;
 
   private static final float[][] STICKERS = new float[][]
diff --git a/src/main/java/org/distorted/objects/TwistyJing.java b/src/main/java/org/distorted/objects/TwistyJing.java
index 76b3a4be..6d817149 100644
--- a/src/main/java/org/distorted/objects/TwistyJing.java
+++ b/src/main/java/org/distorted/objects/TwistyJing.java
@@ -200,8 +200,6 @@ public class TwistyJing extends TwistyObject
              { 0.0f, -0.5f, 0.43301272f, 0.25f, -0.43301272f, 0.25f },
           };
 
-  private static MeshBase[] mMeshes;
-
   private static final ObjectSticker[] mStickers;
 
   static
diff --git a/src/main/java/org/distorted/objects/TwistyKilominx.java b/src/main/java/org/distorted/objects/TwistyKilominx.java
index a86a9b22..e480726f 100644
--- a/src/main/java/org/distorted/objects/TwistyKilominx.java
+++ b/src/main/java/org/distorted/objects/TwistyKilominx.java
@@ -37,8 +37,6 @@ import org.distorted.main.R;
 
 public class TwistyKilominx extends TwistyMinx
 {
-  private static MeshBase[][] mMeshes;
-
   private static final int[] mCenterFaceMap = new int[]
       {
         0,0,0,0,1,
@@ -501,47 +499,43 @@ public class TwistyKilominx extends TwistyMinx
     int[] sizes = ObjectList.KILO.getSizes();
     int variants = sizes.length;
     int highestSize = sizes[variants-1];
-    int lowestSize = sizes[0];
-    int indexCornerEdge = (numLayers-lowestSize)/2 - (lowestSize==3 ? 1:0);
     MeshBase mesh;
 
-    if( mMeshes==null ) mMeshes = new MeshBase[variants][highestSize-1];
+    if( mMeshes==null ) mMeshes = new MeshBase[highestSize-1];
 
     if( cubit < NUM_CORNERS*numCubitsPerCorner )
       {
-      if( mMeshes[indexCornerEdge][0]==null )
+      if( mMeshes[0]==null )
         {
         float width = (numLayers/3.0f)/(numLayers-1);
-        mMeshes[indexCornerEdge][0] = createCornerMesh(numLayers,width);
+        mMeshes[0] = createCornerMesh(numLayers,width);
         }
-      mesh = mMeshes[indexCornerEdge][0].copy(true);
+      mesh = mMeshes[0].copy(true);
       }
     else if( cubit<NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge )
       {
       int type = computeEdgeType(cubit,numCubitsPerCorner,numCubitsPerEdge);  // left-top, right-top, left-second, right-second, left-third...
 
-      if( mMeshes[indexCornerEdge][1+type]==null )
+      if( mMeshes[1+type]==null )
         {
         float tmp   = (numLayers/3.0f)/(numLayers-1);
         float height= tmp*COS18;
         float width = tmp + (type/2)*tmp*SIN18;
 
-        mMeshes[indexCornerEdge][1+type] = createEdgeMesh(numLayers,width,height, (type%2)==0 );
+        mMeshes[1+type] = createEdgeMesh(numLayers,width,height, (type%2)==0 );
         }
 
-      mesh = mMeshes[indexCornerEdge][1+type].copy(true);
+      mesh = mMeshes[1+type].copy(true);
       }
     else
       {
-      int indexCenter = (numLayers-3)/2;
-
-      if( mMeshes[indexCenter][highestSize-2]==null )
+      if( mMeshes[highestSize-2]==null )
         {
         float width = (1+0.5f*(numLayers-3)*SIN18)*(numLayers/3.0f)/(numLayers-1);
-        mMeshes[indexCenter][highestSize-2] = createCenterMesh(width);
+        mMeshes[highestSize-2] = createCenterMesh(width);
         }
 
-      mesh = mMeshes[indexCenter][highestSize-2].copy(true);
+      mesh = mMeshes[highestSize-2].copy(true);
       }
 
     Static4D q = QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
diff --git a/src/main/java/org/distorted/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objects/TwistyMegaminx.java
index fe67e9d9..01c6c94f 100644
--- a/src/main/java/org/distorted/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objects/TwistyMegaminx.java
@@ -44,8 +44,6 @@ public class TwistyMegaminx extends TwistyMinx
         16, 18, 22,  1, 20, 13, 14, 15,  0, 12,  2,  3
       };
 
-  private static MeshBase[][] mMeshes;
-
   private static final float[][] STICKERS = new float[][]
       {
         { -0.36327127f, -0.5f, 0.36327127f, -0.26393202f, 0.36327127f, 0.5f, -0.36327127f, 0.26393202f },
@@ -411,45 +409,44 @@ public class TwistyMegaminx extends TwistyMinx
     {
     int numCubitsPerCorner = numCubitsPerCorner(numLayers);
     int numCubitsPerEdge   = numCubitsPerEdge(numLayers);
-    int index = (numLayers-3)/2;
     int[] sizes = ObjectList.MEGA.getSizes();
     int variants = sizes.length;
     int numShapes = 2+(sizes[variants-1]-1)/2;
     MeshBase mesh;
 
-    if( mMeshes==null ) mMeshes = new MeshBase[variants][numShapes];
+    if( mMeshes==null ) mMeshes = new MeshBase[numShapes];
 
     if( cubit < NUM_CORNERS*numCubitsPerCorner )
       {
-      if( mMeshes[index][0]==null )
+      if( mMeshes[0]==null )
         {
         float width = (numLayers/3.0f)*(0.5f-MEGA_D)/(0.5f*(numLayers-1));
-        mMeshes[index][0] = createCornerMesh(numLayers, width);
+        mMeshes[0] = createCornerMesh(numLayers, width);
         }
-      mesh = mMeshes[index][0].copy(true);
+      mesh = mMeshes[0].copy(true);
       }
     else if( cubit<NUM_CORNERS*numCubitsPerCorner + NUM_EDGES*numCubitsPerEdge )
       {
       int type = computeEdgeType(cubit,numCubitsPerCorner,numCubitsPerEdge);
 
-      if( mMeshes[index][1+type]==null )
+      if( mMeshes[1+type]==null )
         {
         float height= (numLayers/3.0f)*(0.5f-MEGA_D)*COS18/((numLayers-1)*0.5f);
         float width = (numLayers/3.0f)*2*MEGA_D + 2*type*height*SIN18/COS18;
 
-        mMeshes[index][1+type] = createEdgeMesh(numLayers,width,height);
+        mMeshes[1+type] = createEdgeMesh(numLayers,width,height);
         }
-      mesh = mMeshes[index][1+type].copy(true);
+      mesh = mMeshes[1+type].copy(true);
       }
     else
       {
-      if( mMeshes[index][numShapes-1]==null )
+      if( mMeshes[numShapes-1]==null )
         {
         float width = 2 * (numLayers/3.0f) * (MEGA_D+(0.5f-MEGA_D)*SIN18);
-        mMeshes[index][numShapes-1] = createCenterMesh(numLayers,width);
+        mMeshes[numShapes-1] = createCenterMesh(numLayers,width);
         }
 
-      mesh = mMeshes[index][numShapes-1].copy(true);
+      mesh = mMeshes[numShapes-1].copy(true);
       }
 
     Static4D q = QUATS[getQuat(cubit,numCubitsPerCorner,numCubitsPerEdge)];
diff --git a/src/main/java/org/distorted/objects/TwistyObject.java b/src/main/java/org/distorted/objects/TwistyObject.java
index 4b6eae2b..515e1d0a 100644
--- a/src/main/java/org/distorted/objects/TwistyObject.java
+++ b/src/main/java/org/distorted/objects/TwistyObject.java
@@ -86,6 +86,7 @@ public abstract class TwistyObject extends DistortedNode
   private static final Static3D CENTER = new Static3D(0,0,0);
   private static final int POST_ROTATION_MILLISEC = 500;
 
+  MeshBase[] mMeshes;
   final Static4D[] QUATS;
   final Cubit[] CUBITS;
   final int NUM_FACES;
diff --git a/src/main/java/org/distorted/objects/TwistyPyraminx.java b/src/main/java/org/distorted/objects/TwistyPyraminx.java
index 7d233b72..e0a263bb 100644
--- a/src/main/java/org/distorted/objects/TwistyPyraminx.java
+++ b/src/main/java/org/distorted/objects/TwistyPyraminx.java
@@ -115,7 +115,6 @@ public class TwistyPyraminx extends TwistyObject
              { -0.4330127f, -0.25f, 0.4330127f, -0.25f, 0.0f, 0.5f }
           };
 
-  private static MeshBase[] mMeshes;
   private static float[] mRowChances;
 
   private static final ObjectSticker[] mStickers;
@@ -327,7 +326,6 @@ public class TwistyPyraminx extends TwistyObject
         int[] centerIndexes = new int[] { 0,0,0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
-
         factory.createNewFaceTransform(VERTICES_OCTA,VERT_INDEXES_OCTA);
         mMeshes[0] = factory.createRoundedSolid(VERTICES_OCTA, VERT_INDEXES_OCTA,
                                                 bands, bandIndexes,
@@ -349,15 +347,12 @@ public class TwistyPyraminx extends TwistyObject
         int[] centerIndexes = new int[] { 0,0,0,0 };
 
         FactoryCubit factory = FactoryCubit.getInstance();
-
         factory.createNewFaceTransform(VERTICES_TETRA,VERT_INDEXES_TETRA);
         mMeshes[1] = factory.createRoundedSolid(VERTICES_TETRA, VERT_INDEXES_TETRA,
                                                 bands, bandIndexes,
                                                 corners, cornerIndexes,
                                                 centers, centerIndexes,
                                                 getNumCubitFaces(), null );
-
-        factory.printStickerCoords();
         }
       mesh = mMeshes[1].copy(true);
       }
diff --git a/src/main/java/org/distorted/objects/TwistyRedi.java b/src/main/java/org/distorted/objects/TwistyRedi.java
index 4dc8d76d..44a1aa0c 100644
--- a/src/main/java/org/distorted/objects/TwistyRedi.java
+++ b/src/main/java/org/distorted/objects/TwistyRedi.java
@@ -187,8 +187,6 @@ public class TwistyRedi extends TwistyObject
              { -0.3125f, 0.4375f, -0.3125f, -0.1875f, 0.0f, -0.5f, 0.3125f, -0.1875f, 0.3125f, 0.4375f }
           };
 
-  private static MeshBase[] mMeshes;
-
   private static int[][] mScrambleTable;
   private static int[] mPossibleAxis, mPossibleLayers;
   private static int[] mNumOccurences;
diff --git a/src/main/java/org/distorted/objects/TwistyRex.java b/src/main/java/org/distorted/objects/TwistyRex.java
index eb7854c3..76751594 100644
--- a/src/main/java/org/distorted/objects/TwistyRex.java
+++ b/src/main/java/org/distorted/objects/TwistyRex.java
@@ -126,8 +126,6 @@ public class TwistyRex extends TwistyObject
            { 13,17, 18,18,18,18 },
          };
 
-  private static MeshBase[] mMeshes;
-
   private static final ObjectSticker[] mStickers;
 
   private static final float[][] STICKERS = new float[][]
diff --git a/src/main/java/org/distorted/objects/TwistySkewb.java b/src/main/java/org/distorted/objects/TwistySkewb.java
index 596a97a7..dd9881b4 100644
--- a/src/main/java/org/distorted/objects/TwistySkewb.java
+++ b/src/main/java/org/distorted/objects/TwistySkewb.java
@@ -173,8 +173,6 @@ public class TwistySkewb extends TwistyObject
              { -0.5f, 0.00f, 0.00f,  -0.5f, 0.50f, 0.0f, 0.0f, 0.5f }
           };
 
-  private static MeshBase[] mMeshes;
-
   private static final ObjectSticker[] mStickers;
 
   static
diff --git a/src/main/java/org/distorted/objects/TwistySquare.java b/src/main/java/org/distorted/objects/TwistySquare.java
index 3630b207..67ceffd4 100644
--- a/src/main/java/org/distorted/objects/TwistySquare.java
+++ b/src/main/java/org/distorted/objects/TwistySquare.java
@@ -156,7 +156,6 @@ abstract class TwistySquare extends TwistyObject
       { 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10,  9,  8,  7,  6,  5,  4,  3,  2,  1,  0,}
     };
 
-  static MeshBase[] mMeshes;
   int mLastRot;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/TwistyUltimate.java b/src/main/java/org/distorted/objects/TwistyUltimate.java
index feca45a3..d15010c7 100644
--- a/src/main/java/org/distorted/objects/TwistyUltimate.java
+++ b/src/main/java/org/distorted/objects/TwistyUltimate.java
@@ -217,8 +217,6 @@ class TwistyUltimate extends TwistyObject
            { -0.29389262f, -0.50000000f, 0.29389262f,-0.309017000f, 0.29389262f, 0.30901700f,-0.29389262f, 0.50000000f },                             // Small cubit 1st
          };
 
-  private static MeshBase[] mMeshes;
-
   private static final ObjectSticker[] mStickers;
 
   static
