commit f8c520904a21079d63c7af3e90714720a906b760
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Fri May 19 17:25:35 2023 +0200

    generalize FactoryBandagedCuboid: start removing 'cuboidal' assumptions from it.

diff --git a/src/main/java/org/distorted/bandaged/BandagedCubit.java b/src/main/java/org/distorted/bandaged/BandagedCubit.java
index a2f4fd23..7af13509 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCubit.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCubit.java
@@ -129,7 +129,8 @@ public class BandagedCubit
 
       computeMove(mPosition);
       mMove = new Static3D(0,0,0);
-      MeshBase mesh = mObject.createMesh(mVariant,mPosition,mRoundCorners);
+
+      MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
 
       mTexture = new DistortedTexture();
       if( mBitmap==null ) createBitmap(mObject.getColors());
@@ -163,7 +164,7 @@ public class BandagedCubit
       mPosition = tmpPosition;
 
       computeMove(mPosition);
-      MeshBase mesh = mObject.createMesh(mVariant,mPosition,mRoundCorners);
+      MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
       resetTextureMaps(mesh);
       mNode.setMesh(mesh);
       mMove.set( scale*mUnscaledX, scale*mUnscaledY, scale*mUnscaledZ);
@@ -183,7 +184,7 @@ public class BandagedCubit
       mPosition[2] = z;
 
       computeMove(mPosition);
-      MeshBase mesh = mObject.createMesh(mVariant,mPosition,mRoundCorners);
+      MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
       resetTextureMaps(mesh);
       mNode.setMesh(mesh);
       mMove.set( scale*mUnscaledX, scale*mUnscaledY, scale*mUnscaledZ);
diff --git a/src/main/java/org/distorted/bandaged/BandagedObject.java b/src/main/java/org/distorted/bandaged/BandagedObject.java
index bc0efc07..f78fbed4 100644
--- a/src/main/java/org/distorted/bandaged/BandagedObject.java
+++ b/src/main/java/org/distorted/bandaged/BandagedObject.java
@@ -55,7 +55,7 @@ public abstract class BandagedObject
    abstract boolean tryChangeObject(int x, int y, int z);
    abstract boolean isInsideFace(int face, float[] p);
    abstract TwistyObject createObject(int mode, float scale );
-   abstract MeshBase createMesh(int variant, float[] pos, boolean round);
+   abstract MeshBase createMesh(float[] pos, boolean round);
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/bandaged/BandagedObjectCuboid.java b/src/main/java/org/distorted/bandaged/BandagedObjectCuboid.java
index ac9fd9cb..20768642 100644
--- a/src/main/java/org/distorted/bandaged/BandagedObjectCuboid.java
+++ b/src/main/java/org/distorted/bandaged/BandagedObjectCuboid.java
@@ -66,7 +66,7 @@ public class BandagedObjectCuboid extends BandagedObject
 
   boolean isAdjacent(float dx, float dy, float dz)
     {
-    return dx*dx + dy*dy + dz*dz == 1;
+    return dx*dx + dy*dy + dz*dz <= 1;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -94,43 +94,6 @@ public class BandagedObjectCuboid extends BandagedObject
     return pos;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-  void getTouchedPosition(float[] output, int face, float pointX, float pointY)
-    {
-    float x = mSize[0];
-    float y = mSize[1];
-    float z = mSize[2];
-
-    switch(face)
-      {
-      case 0: output[0] = (x-1)/2;
-              output[1] = (int)( y*pointY+y/2)-(y-1)/2;
-              output[2] = (int)(-z*pointX-z/2)+(z-1)/2;
-              break;
-      case 1: output[0] =-(x-1)/2;
-              output[1] = (int)( y*pointY+y/2)-(y-1)/2;
-              output[2] = (int)( z*pointX+z/2)-(z-1)/2;
-              break;
-      case 2: output[0] = (int)( x*pointX+x/2)-(x-1)/2;
-              output[1] = (y-1)/2;
-              output[2] = (int)(-z*pointY-z/2)+(z-1)/2;
-              break;
-      case 3: output[0] = (int)( x*pointX+x/2)-(x-1)/2;
-              output[1] =-(y-1)/2;
-              output[2] = (int)( z*pointY+z/2)-(z-1)/2;
-              break;
-      case 4: output[0] = (int)( x*pointX+x/2)-(x-1)/2;
-              output[1] = (int)( y*pointY+y/2)-(y-1)/2;
-              output[2] = (z-1)/2;
-              break;
-      case 5: output[0] = (int)(-x*pointX-x/2)+(x-1)/2;
-              output[1] = (int)( y*pointY+y/2)-(y-1)/2;
-              output[2] =-(z-1)/2;
-              break;
-      }
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   boolean tryChangeObject(int x, int y, int z)
@@ -185,10 +148,10 @@ public class BandagedObjectCuboid extends BandagedObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createMesh(int variant, float[] pos, boolean round)
+  MeshBase createMesh(float[] pos, boolean round)
      {
      FactoryBandagedCuboid factory = FactoryBandagedCuboid.getInstance();
-     return factory.createMesh(pos,mSize[0],mSize[1],mSize[2],false,round);
+     return factory.createMesh(pos,mSize,false,round);
      }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java b/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
index 58aac497..64c6ce6f 100644
--- a/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
+++ b/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
@@ -27,10 +27,10 @@ import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
 
 public class BandagedObjectPyraminx extends BandagedObject
 {
-   BandagedObjectPyraminx(DistortedScreen screen)
-     {
-     super(screen);
-     }
+  BandagedObjectPyraminx(DistortedScreen screen)
+    {
+    super(screen);
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -80,25 +80,25 @@ public class BandagedObjectPyraminx extends BandagedObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   float[] getDist3D()
-     {
-     float d = mSize[0]*SQ6/12;
-     return new float[] {d,d,d,d};
-     }
+  float[] getDist3D()
+    {
+    float d = mSize[0]*SQ6/12;
+    return new float[] {d,d,d,d};
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   float getDist2D()
-     {
-     return SQ3/6;
-     }
+  float getDist2D()
+    {
+    return SQ3/6;
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-   int[] getColors()
-     {
-     return ShapeTetrahedron.FACE_COLORS;
-     }
+  int[] getColors()
+    {
+    return ShapeTetrahedron.FACE_COLORS;
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -110,26 +110,26 @@ public class BandagedObjectPyraminx extends BandagedObject
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   boolean tryChangeObject(int x, int y, int z)
-     {
-     if( mSize[0]!=x )
-       {
-       mSize[0] = x;
-       mMax = mSize[0];
-       int numOcta = (x-1)*x*(x+1)/6;
-       int numTetra= x*(x+1)*(x+2)/6;
-       mNumCubits = numOcta + numTetra;
-       return true;
-       }
+    {
+    if( mSize[0]!=x )
+      {
+      mSize[0] = x;
+      mMax = mSize[0];
+      int numOcta = (x-1)*x*(x+1)/6;
+      int numTetra= x*(x+1)*(x+2)/6;
+      mNumCubits = numOcta + numTetra;
+      return true;
+      }
 
-     return false;
-     }
+    return false;
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   int computeProjectionAngle()
-     {
-     return 120;
-     }
+    {
+    return 120;
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -166,18 +166,18 @@ public class BandagedObjectPyraminx extends BandagedObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  MeshBase createMesh(int variant, float[] pos, boolean round)
-     {
-     FactoryBandagedPyraminx factory = FactoryBandagedPyraminx.getInstance();
-     return factory.createMesh(variant,pos,mSize[0],false,round);
-     }
+  MeshBase createMesh(float[] pos, boolean round)
+    {
+    FactoryBandagedPyraminx factory = FactoryBandagedPyraminx.getInstance();
+    return factory.createMesh(pos,mSize[0],false,round);
+    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   TwistyObject createObject(int mode, float size)
-     {
-     float[][] pos = getCubitPositions();
-     InitData data = new InitData( mSize,pos);
-     return new TwistyBandagedPyraminx( TwistyObject.MESH_NICE, mode, ShapeTetrahedron.DEFAULT_ROT, new Static3D(0,0,0), size, data, null );
-     }
+    {
+    float[][] pos = getCubitPositions();
+    InitData data = new InitData( mSize,pos);
+    return new TwistyBandagedPyraminx( TwistyObject.MESH_NICE, mode, ShapeTetrahedron.DEFAULT_ROT, new Static3D(0,0,0), size, data, null );
+    }
 }
