commit fbca0033d0429127b4eeb49d6abf3ee535c74e4e
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Jun 27 23:00:45 2020 +0100

    Re-introduce possibility to dynamically create object mesh: part 2.

diff --git a/src/main/java/org/distorted/objects/RubikCube.java b/src/main/java/org/distorted/objects/RubikCube.java
index 0975d3ae..a7d14c1b 100644
--- a/src/main/java/org/distorted/objects/RubikCube.java
+++ b/src/main/java/org/distorted/objects/RubikCube.java
@@ -94,8 +94,7 @@ class RubikCube extends RubikObject
          new Static4D( -0.5f,   0.5f,   0.5f,   0.5f)
          };
 
-  private static MeshBase mMeshBig = null;
-  private static MeshBase mMeshSma = null;
+  private static MeshBase[] mMeshes;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -164,22 +163,38 @@ class RubikCube extends RubikObject
 
   MeshBase createCubitMesh(int cubit)
     {
-    return createCubitMesh(getSize()<=3);
+    int size   = getSize();
+    int ordinal= RubikObjectList.CUBE.ordinal();
+    int index  = RubikObjectList.getSizeIndex(ordinal,size);
+    float[] loc;
+
+    switch(size)
+      {
+      case 5 : loc = new float[] { -0.5f, 0.05f, 0.1f, 0.35f, 0.35f, 0.1f, 0.05f };
+               break;
+      case 2 : loc = new float[] { -0.5f, 0.03f, 0.05f, 0.07f, 0.20f, 0.30f, 0.20f, 0.07f, 0.05f, 0.03f };
+               break;
+      default: loc = new float[] { -0.5f, 0.04f, 0.06f, 0.25f, 0.30f, 0.25f, 0.06f, 0.04f };
+      }
+
+    return createCubitMesh(index,loc);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(boolean big)
+  MeshBase createCubitMesh(int index, float[] loc)
     {
-    MeshBase mesh = big ? mMeshBig : mMeshSma;
-    int size = big ? 14 : 9;
+    if( mMeshes==null )
+      {
+      mMeshes = new MeshBase[RubikObjectList.CUBE.getNumVariants()];
+      }
 
-    if( mesh==null )
+    if( mMeshes[index]==null )
       {
       final int MESHES=6;
       int association = 1;
       MeshBase[] meshes = new MeshRectangles[MESHES];
-      meshes[0] = new MeshRectangles(size,size);
+      meshes[0] = new MeshRectangles(loc,loc);
       meshes[0].setEffectAssociation(0,association,0);
 
       for(int i=1; i<MESHES; i++)
@@ -189,7 +204,7 @@ class RubikCube extends RubikObject
         meshes[i].setEffectAssociation(0,association,0);
         }
 
-      mesh = new MeshJoined(meshes);
+      mMeshes[index] = new MeshJoined(meshes);
 
       Static3D axisY   = new Static3D(0,1,0);
       Static3D axisX   = new Static3D(1,0,0);
@@ -247,26 +262,26 @@ class RubikCube extends RubikObject
 
       VertexEffectSink   effect14= new VertexEffectSink( new Static1D(1.5f), center, new Static4D(0,0,0,0.72f) );
 
-      mesh.apply(effect0);
-      mesh.apply(effect1);
-      mesh.apply(effect2);
-      mesh.apply(effect3);
-      mesh.apply(effect4);
-      mesh.apply(effect5);
-      mesh.apply(effect6);
-      mesh.apply(effect7);
-      mesh.apply(effect8);
-      mesh.apply(effect9);
-      mesh.apply(effect10);
-      mesh.apply(effect11);
-      mesh.apply(effect12);
-      mesh.apply(effect13);
-      mesh.apply(effect14);
-
-      mesh.mergeEffComponents();
+      mMeshes[index].apply(effect0);
+      mMeshes[index].apply(effect1);
+      mMeshes[index].apply(effect2);
+      mMeshes[index].apply(effect3);
+      mMeshes[index].apply(effect4);
+      mMeshes[index].apply(effect5);
+      mMeshes[index].apply(effect6);
+      mMeshes[index].apply(effect7);
+      mMeshes[index].apply(effect8);
+      mMeshes[index].apply(effect9);
+      mMeshes[index].apply(effect10);
+      mMeshes[index].apply(effect11);
+      mMeshes[index].apply(effect12);
+      mMeshes[index].apply(effect13);
+      mMeshes[index].apply(effect14);
+
+      mMeshes[index].mergeEffComponents();
       }
 
-    return mesh.copy(true);
+    return mMeshes[index].copy(true);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index 38ed9892..26aa5b78 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -320,6 +320,13 @@ public enum RubikObjectList
     return mResourceIDs;
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  public int getNumVariants()
+    {
+    return mObjectSizes.length;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public RubikObject create(int size, Static4D quat, int[][] moves, Resources res, int scrWidth)
diff --git a/src/main/java/org/distorted/objects/RubikPyraminx.java b/src/main/java/org/distorted/objects/RubikPyraminx.java
index 50bf3d8c..2303a4c7 100644
--- a/src/main/java/org/distorted/objects/RubikPyraminx.java
+++ b/src/main/java/org/distorted/objects/RubikPyraminx.java
@@ -228,7 +228,7 @@ public class RubikPyraminx extends RubikObject
     int association = 1;
     MeshBase[] meshes = new MeshTriangles[MESHES];
 
-    meshes[0] = new MeshTriangles(5);
+    meshes[0] = new MeshTriangles(9);
     meshes[0].setEffectAssociation(0,association,0);
 
     for(int i=1; i<MESHES; i++)
