commit 61b217a5b242f7e18b7ee7a6c4cb62769ff9254b
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Feb 25 12:33:39 2021 +0100

    Add Gigaminx dmesh.

diff --git a/src/main/java/org/distorted/objects/FactoryCubit.java b/src/main/java/org/distorted/objects/FactoryCubit.java
index 91838a89..63435290 100644
--- a/src/main/java/org/distorted/objects/FactoryCubit.java
+++ b/src/main/java/org/distorted/objects/FactoryCubit.java
@@ -727,15 +727,21 @@ class FactoryCubit
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createFacesMegaminxCorner()
+  MeshBase createFacesMegaminxCorner(int numLayers)
     {
     MeshBase[] meshes = new MeshPolygon[6];
 
     float Y = COS54/(2*SIN54);
 
     float[] vertices0 = { -0.5f, 0.0f, 0.0f, -Y, 0.5f, 0.0f, 0.0f, Y };
-    float[] bands0 = computeBands(0.04f,34,0.3f,0.2f,5);
-    float[] bands1 = computeBands(0.00f,34,0.3f,0.2f,2);
+
+    int numBands0 = numLayers==3 ? 5 : 3;
+    int numBands1 = numLayers==3 ? 2 : 2;
+    float h       = numLayers==3 ? 0.04f : 0.03f;
+    int   e       = numLayers==3 ? 4 : 1;
+
+    float[] bands0 = computeBands(h    ,34,0.3f,0.2f, numBands0);
+    float[] bands1 = computeBands(0.00f,34,0.3f,0.2f, numBands1);
 
     meshes[0] = new MeshPolygon(vertices0, bands0, 1, 1);
     meshes[0].setEffectAssociation(0, 1,0);
@@ -743,7 +749,7 @@ class FactoryCubit
     meshes[1].setEffectAssociation(0, 2,0);
     meshes[2] = meshes[0].copy(true);
     meshes[2].setEffectAssociation(0, 4,0);
-    meshes[3] = new MeshPolygon(vertices0, bands1, 1, 4);
+    meshes[3] = new MeshPolygon(vertices0, bands1, 1, e);
     meshes[3].setEffectAssociation(0, 8,0);
     meshes[4] = meshes[3].copy(true);
     meshes[4].setEffectAssociation(0,16,0);
@@ -755,7 +761,7 @@ class FactoryCubit
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createFacesMegaminxEdge(float width, float height)
+  MeshBase createFacesMegaminxEdge(int numLayers, float width, float height)
     {
     MeshBase[] meshes = new MeshPolygon[6];
 
@@ -773,8 +779,12 @@ class FactoryCubit
     float[] vertices1 = { -X1, Y3, -X1, -Y3, X1, -Y2, X1, Y2 };
     float[] vertices2 = { -X2, 0.0f, 0.0f, -Y4, X2, 0.0f, 0.0f, Y4 };
 
-    float[] bands0 = computeBands(0.03f,34,0.2f,0.2f,5);
-    float[] bands1 = computeBands(0.00f,34,0.3f,0.2f,2);
+    int numBands0 = numLayers==3 ? 5 : 3;
+    int numBands1 = numLayers==3 ? 2 : 2;
+    float h       = numLayers==3 ? 0.03f : 0.03f;
+
+    float[] bands0 = computeBands(h    ,34,0.2f,0.2f,numBands0);
+    float[] bands1 = computeBands(0.00f,34,0.3f,0.2f,numBands1);
 
     meshes[0] = new MeshPolygon(vertices0, bands0, 0, 0);
     meshes[0].setEffectAssociation(0, 1,0);
@@ -794,7 +804,7 @@ class FactoryCubit
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createFacesMegaminxCenter(float width)
+  MeshBase createFacesMegaminxCenter(int numLayers)
     {
     MeshBase[] meshes = new MeshPolygon[2];
 
@@ -805,8 +815,13 @@ class FactoryCubit
     float Y2 = R*SIN18;
 
     float[] vertices0 = { -X1,+Y1, -X2,-Y2, 0.0f,-R, +X2,-Y2, +X1,+Y1 };
-    float[] bands0 = computeBands(+0.04f,45, R/3,0.2f,4);
-    float[] bands1 = computeBands( 0.00f,34, R/3,0.2f,2);
+
+    int numBands0 = numLayers==3 ? 4 : 3;
+    int numBands1 = numLayers==3 ? 2 : 2;
+    float h       = numLayers==3 ? 0.04f : 0.04f;
+
+    float[] bands0 = computeBands( h    ,45, R/3,0.2f, numBands0);
+    float[] bands1 = computeBands( 0.00f,34, R/3,0.2f, numBands1);
 
     meshes[0] = new MeshPolygon(vertices0, bands0, 0, 0);
     meshes[0].setEffectAssociation(0,1,0);
@@ -1877,7 +1892,7 @@ class FactoryCubit
 
   MeshBase createMegaminxCornerMesh(int numLayers)
     {
-    MeshBase mesh = createFacesMegaminxCorner();
+    MeshBase mesh = createFacesMegaminxCorner(numLayers);
     VertexEffect[] effects = createVertexEffectsMegaminxCorner(numLayers);
     for( VertexEffect effect : effects ) mesh.apply(effect);
 
@@ -1907,9 +1922,9 @@ class FactoryCubit
 // numLayers==3 --> index=0; numLayers=5 --> index=1 ...
 // type: 0,1,... 0 --> edge, 1 --> 1 layer deeper, etc
 
-  MeshBase createMegaminxEdgeMesh(float width, float height)
+  MeshBase createMegaminxEdgeMesh(int numLayers, float width, float height)
     {
-    MeshBase mesh = createFacesMegaminxEdge(width,height);
+    MeshBase mesh = createFacesMegaminxEdge(numLayers,width,height);
     VertexEffect[] effects = createVertexEffectsMegaminxEdge(width,height);
     for( VertexEffect effect : effects ) mesh.apply(effect);
 
@@ -1920,9 +1935,9 @@ class FactoryCubit
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createMegaminxCenterMesh(float width)
+  MeshBase createMegaminxCenterMesh(int numLayers, float width)
     {
-    MeshBase mesh = createFacesMegaminxCenter(width);
+    MeshBase mesh = createFacesMegaminxCenter(numLayers);
     VertexEffect[] effects = createVertexEffectsMegaminxCenter(width);
     for( VertexEffect effect : effects ) mesh.apply(effect);
 
diff --git a/src/main/java/org/distorted/objects/ObjectList.java b/src/main/java/org/distorted/objects/ObjectList.java
index 41029cf0..4053664c 100644
--- a/src/main/java/org/distorted/objects/ObjectList.java
+++ b/src/main/java/org/distorted/objects/ObjectList.java
@@ -142,7 +142,7 @@ public enum ObjectList
   MEGA (
          new int[][] {
                        {3 , 21, R.raw.mega3, R.drawable.ui_small_mega3, R.drawable.ui_medium_mega3, R.drawable.ui_big_mega3, R.drawable.ui_huge_mega3} ,
-              //       {5 , 25, R.raw.kilo3, R.drawable.ui_small_mega5, R.drawable.ui_medium_mega5, R.drawable.ui_big_mega5, R.drawable.ui_huge_mega5} ,
+                       {5 , 25, R.raw.mega5, R.drawable.ui_small_mega5, R.drawable.ui_medium_mega5, R.drawable.ui_big_mega5, R.drawable.ui_huge_mega5} ,
                      },
          TwistyMegaminx.class,
          new MovementMinx(),
diff --git a/src/main/java/org/distorted/objects/TwistyMegaminx.java b/src/main/java/org/distorted/objects/TwistyMegaminx.java
index 88872523..f1e819f5 100644
--- a/src/main/java/org/distorted/objects/TwistyMegaminx.java
+++ b/src/main/java/org/distorted/objects/TwistyMegaminx.java
@@ -401,7 +401,7 @@ public class TwistyMegaminx extends TwistyMinx
         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;
 
-        mEdgeMeshes[index][type] = FactoryCubit.getInstance().createMegaminxEdgeMesh(width,height);
+        mEdgeMeshes[index][type] = FactoryCubit.getInstance().createMegaminxEdgeMesh(numLayers,width,height);
         }
 
       mesh = mEdgeMeshes[index][type].copy(true);
@@ -411,7 +411,7 @@ public class TwistyMegaminx extends TwistyMinx
       if( mCenterMeshes[index]==null )
         {
         float width = 2 * (numLayers/3.0f) * (MEGA_D+(0.5f-MEGA_D)*SIN18);
-        mCenterMeshes[index] = FactoryCubit.getInstance().createMegaminxCenterMesh(width);
+        mCenterMeshes[index] = FactoryCubit.getInstance().createMegaminxCenterMesh(numLayers,width);
         }
 
       mesh = mCenterMeshes[index].copy(true);
diff --git a/src/main/res/raw/mega5.dmesh b/src/main/res/raw/mega5.dmesh
new file mode 100644
index 00000000..17590efe
Binary files /dev/null and b/src/main/res/raw/mega5.dmesh differ
