commit c0b37c89ac65279bf2948ef20303ae7e9bc44264
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Sep 8 23:21:45 2020 +0100

    Convert RubikCubes to the new MeshPolygon - better quality of the mesh and less vertices!

diff --git a/src/main/java/org/distorted/objects/RubikCube.java b/src/main/java/org/distorted/objects/RubikCube.java
index d8f8200f..6941ea70 100644
--- a/src/main/java/org/distorted/objects/RubikCube.java
+++ b/src/main/java/org/distorted/objects/RubikCube.java
@@ -28,11 +28,11 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics;
 import org.distorted.library.effect.VertexEffectDeform;
 import org.distorted.library.effect.VertexEffectMove;
 import org.distorted.library.effect.VertexEffectRotate;
-import org.distorted.library.effect.VertexEffectSink;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.mesh.MeshJoined;
+import org.distorted.library.mesh.MeshPolygon;
 import org.distorted.library.mesh.MeshSquare;
 import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
@@ -196,23 +196,54 @@ class RubikCube extends RubikObject
     int size   = getSize();
     int ordinal= RubikObjectList.CUBE.ordinal();
     int index  = RubikObjectList.getSizeIndex(ordinal,size);
-    float[] loc;
+    float[] bands;
+    float D = 0.027f;
+    float E = 0.5f-D;
+    float[] vertices = { -E,-E, +E,-E, +E,+E, -E,+E };
+    int extraI, extraV;
 
     switch(size)
       {
-      case 5 : loc = new float[] { -0.5f, 0.05f, 0.1f, 0.35f, 0.35f, 0.1f, 0.05f };
+      case 2 : bands = new float[] { 1.0f    ,-D,
+                                     1.0f-D/2,-D*0.45f,
+                                     1.0f-D  ,-D*0.80f,
+                                     1.0f-2*D, 0.0f,
+                                     0.50f, 0.040f,
+                                     0.0f, 0.048f };
+               extraI = 2;
+               extraV = 2;
                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 };
+      case 3 : bands = new float[] { 1.0f    ,-D,
+                                     1.0f-D*1.2f,-D*0.55f,
+                                     1.0f-2*D, 0.0f,
+                                     0.50f, 0.040f,
+                                     0.0f, 0.048f };
+               extraI = 2;
+               extraV = 2;
+               break;
+      case 4 : bands = new float[] { 1.0f    ,-D,
+                                     1.0f-D*1.2f,-D*0.55f,
+                                     1.0f-2*D, 0.0f,
+                                     0.50f, 0.040f,
+                                     0.0f, 0.048f };
+               extraI = 1;
+               extraV = 2;
+               break;
+      default: bands = new float[] { 1.0f    ,-D,
+                                     1.0f-2*D, 0.0f,
+                                     0.50f, 0.025f,
+                                     0.0f, 0.030f };
+               extraI = 1;
+               extraV = 1;
                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);
+    return createCubitMesh(index,vertices,bands,extraI,extraV);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createCubitMesh(int index, float[] loc)
+  MeshBase createCubitMesh(int index, float[] vertices, float[] bands, int extraI, int extraV)
     {
     if( mMeshes==null )
       {
@@ -223,8 +254,8 @@ class RubikCube extends RubikObject
       {
       final int MESHES=6;
       int association = 1;
-      MeshBase[] meshes = new MeshSquare[MESHES];
-      meshes[0] = new MeshSquare(loc,loc);
+      MeshBase[] meshes = new MeshPolygon[MESHES];
+      meshes[0] = new MeshPolygon(vertices,bands,extraI,extraV);
       meshes[0].setEffectAssociation(0,association,0);
 
       for(int i=1; i<MESHES; i++)
@@ -290,8 +321,6 @@ class RubikCube extends RubikObject
       VertexEffectDeform effect12= new VertexEffectDeform(dVec6, dRad, dCen6, dReg);
       VertexEffectDeform effect13= new VertexEffectDeform(dVec7, dRad, dCen7, dReg);
 
-      VertexEffectSink   effect14= new VertexEffectSink( new Static1D(1.5f), center, new Static4D(0,0,0,0.72f) );
-
       mMeshes[index].apply(effect0);
       mMeshes[index].apply(effect1);
       mMeshes[index].apply(effect2);
@@ -306,7 +335,6 @@ class RubikCube extends RubikObject
       mMeshes[index].apply(effect11);
       mMeshes[index].apply(effect12);
       mMeshes[index].apply(effect13);
-      mMeshes[index].apply(effect14);
 
       mMeshes[index].mergeEffComponents();
       }
