commit f20119c6a65a9b5ed02473b6884c2850e9477108
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sat Jun 5 00:02:32 2021 +0200

    Square-1: implement the fact that corners might bandage the puzzle.

diff --git a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
index a600caee..950ce39c 100644
--- a/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
+++ b/src/main/java/org/distorted/objects/TwistyBandagedAbstract.java
@@ -514,6 +514,8 @@ abstract class TwistyBandagedAbstract extends TwistyObject
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
+// this implements the fact that certain cubits have multiple 'centers' and this means the cubit
+// might span more than one layer along a given axis - i.e. that this is a bandaged puzzle.
 
   int computeBitmapFromRow(int rowBitmap, int axis)
     {
diff --git a/src/main/java/org/distorted/objects/TwistyObject.java b/src/main/java/org/distorted/objects/TwistyObject.java
index b4684601..a3e406bb 100644
--- a/src/main/java/org/distorted/objects/TwistyObject.java
+++ b/src/main/java/org/distorted/objects/TwistyObject.java
@@ -418,6 +418,7 @@ public abstract class TwistyObject extends DistortedNode
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Clamp all rotated positions to one of those original ones to avoid accumulating errors.
+// Do so only if minimal Error is appropriately low (shape-shifting puzzles - Square-1)
 
   void clampPos(float[] pos, int offset)
     {
@@ -452,7 +453,7 @@ public abstract class TwistyObject extends DistortedNode
         }
       }
 
-    if( minError< 0.1f )
+    if( minError< 0.1f ) // TODO: 0.1 ?
       {
       pos[offset  ] = mOrigPos[minErrorIndex1][3*minErrorIndex2  ];
       pos[offset+1] = mOrigPos[minErrorIndex1][3*minErrorIndex2+1];
diff --git a/src/main/java/org/distorted/objects/TwistySquare1.java b/src/main/java/org/distorted/objects/TwistySquare1.java
index 04bafed8..192f9aa5 100644
--- a/src/main/java/org/distorted/objects/TwistySquare1.java
+++ b/src/main/java/org/distorted/objects/TwistySquare1.java
@@ -110,14 +110,14 @@ class TwistySquare1 extends TwistyObject
       { 0.0f,-1.0f,-1.5f },
       {-1.5f,-1.0f, 0.0f },
 
-      { 1.5f, 1.0f, 1.5f },
-      { 1.5f, 1.0f,-1.5f },
-      {-1.5f, 1.0f,-1.5f },
-      {-1.5f, 1.0f, 1.5f },
-      { 1.5f,-1.0f, 1.5f },
-      { 1.5f,-1.0f,-1.5f },
-      {-1.5f,-1.0f,-1.5f },
-      {-1.5f,-1.0f, 1.5f },
+      { 1.0f, 1.0f, 2.0f, 2.0f, 1.0f, 1.0f },
+      { 1.0f, 1.0f,-2.0f, 2.0f, 1.0f,-1.0f },
+      {-1.0f, 1.0f,-2.0f,-2.0f, 1.0f,-1.0f },
+      {-1.0f, 1.0f, 2.0f,-2.0f, 1.0f, 1.0f },
+      { 1.0f,-1.0f, 2.0f, 2.0f,-1.0f, 1.0f },
+      { 1.0f,-1.0f,-2.0f, 2.0f,-1.0f,-1.0f },
+      {-1.0f,-1.0f,-2.0f,-2.0f,-1.0f,-1.0f },
+      {-1.0f,-1.0f, 2.0f,-2.0f,-1.0f, 1.0f }
     };
 
   private static final double[][] VERTICES_MIDDLE = new double[][]
@@ -439,6 +439,28 @@ class TwistySquare1 extends TwistyObject
     return new float[][] { {-0.5f,+0.5f}, {0.0f} };
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+// this implements the fact that corner cubits have multiple 'centers' and this means the cubit
+// might span more than one layer along a given axis - i.e. that this is a bandaged puzzle.
+
+  int computeBitmapFromRow(int rowBitmap, int axis)
+    {
+    int bitmap, initBitmap=0;
+
+    while( initBitmap!=rowBitmap )
+      {
+      initBitmap = rowBitmap;
+
+      for(int cubit=0; cubit<NUM_CUBITS; cubit++)
+        {
+        bitmap = CUBITS[cubit].mRotationRow[axis];
+        if( (rowBitmap & bitmap) != 0 ) rowBitmap |= bitmap;
+        }
+      }
+
+    return rowBitmap;
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC API
 
