commit 789769bda8bc87f68d7927967d5897bdd3be5323
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue May 16 14:03:18 2023 +0200

    Progress with BandagedObjectPyraminx.

diff --git a/src/main/java/org/distorted/bandaged/BandagedCreatorTouchControl.java b/src/main/java/org/distorted/bandaged/BandagedCreatorTouchControl.java
index 73a67306..62c92180 100644
--- a/src/main/java/org/distorted/bandaged/BandagedCreatorTouchControl.java
+++ b/src/main/java/org/distorted/bandaged/BandagedCreatorTouchControl.java
@@ -26,7 +26,6 @@ public class BandagedCreatorTouchControl
   private final int mNumFaces;
 
   private float[] mDist3D;
-  private int mLastTouchedFace;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // Convert the 3D point3D into a 2D point on the same face surface, but in a different
@@ -128,19 +127,19 @@ public class BandagedCreatorTouchControl
     mCamera[1] = rotatedCamera.get1()/mObjectRatio;
     mCamera[2] = rotatedCamera.get2()/mObjectRatio;
 
-    for( mLastTouchedFace=0; mLastTouchedFace<mNumFaces; mLastTouchedFace++)
+    for( int face=0; face<mNumFaces; face++)
       {
-      if( faceIsVisible(mLastTouchedFace) )
+      if( faceIsVisible(face) )
         {
-        castTouchPointOntoFace(mLastTouchedFace, mTouch);
+        castTouchPointOntoFace(face, mTouch);
 
-        float ax = mFaceAxis[mLastTouchedFace].get0();
-        float ay = mFaceAxis[mLastTouchedFace].get1();
-        float az = mFaceAxis[mLastTouchedFace].get2();
+        float ax = mFaceAxis[face].get0();
+        float ay = mFaceAxis[face].get1();
+        float az = mFaceAxis[face].get2();
 
         convertTo2Dcoords(mTouch, ax,ay,az, mPoint2D);
 
-        if( mObject.isInsideFace(mLastTouchedFace,mPoint2D) ) return true;
+        if( mObject.isInsideFace(face,mPoint2D) ) return true;
         }
       }
 
@@ -197,7 +196,7 @@ public class BandagedCreatorTouchControl
 
     if( !touched ) return -1;
 
-    return mObject.whichCubitTouched(mLastTouchedFace,mPoint2D[0],mPoint2D[1]);
+    return mObject.whichCubitTouched(mTouch);
     }
 }
 
diff --git a/src/main/java/org/distorted/bandaged/BandagedObject.java b/src/main/java/org/distorted/bandaged/BandagedObject.java
index aef41f57..bc0efc07 100644
--- a/src/main/java/org/distorted/bandaged/BandagedObject.java
+++ b/src/main/java/org/distorted/bandaged/BandagedObject.java
@@ -22,7 +22,6 @@ public abstract class BandagedObject
 {
     private final DistortedScreen mScreen;
     private final float[][] mFaceAxis;
-    private final float[] mTmp;
     private BandagedCubit[] mCubits;
 
     final int[] mSize;
@@ -38,7 +37,6 @@ public abstract class BandagedObject
      mScreen = screen;
      mSize = new int[3];
      mDist2D = getDist2D();
-     mTmp = new float[3];
      Static3D[] axis = getFaceAxis();
      int numAxis = axis.length;
      mFaceAxis = new float[numAxis][];
@@ -55,18 +53,10 @@ public abstract class BandagedObject
    abstract boolean isAdjacent(float dx, float dy, float dz);
    abstract int computeProjectionAngle();
    abstract boolean tryChangeObject(int x, int y, int z);
-   abstract void getTouchedPosition(float[] output, int face, float pointX, float pointY);
    abstract boolean isInsideFace(int face, float[] p);
    abstract TwistyObject createObject(int mode, float scale );
    abstract MeshBase createMesh(int variant, float[] pos, boolean round);
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-   int[] getSize()
-     {
-     return mSize;
-     }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
    void createCubits(Static4D quatT, Static4D quatA, Static3D scale)
@@ -244,9 +234,14 @@ public abstract class BandagedObject
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  int whichCubitTouched(int face, float pointX, float pointY)
+  int whichCubitTouched(float[] point3D)
     {
-    getTouchedPosition(mTmp, face, pointX, pointY);
+    float x = point3D[0]*mMax;
+    float y = point3D[1]*mMax;
+    float z = point3D[2]*mMax;
+
+    int minIndex = -1;
+    float minDist = Float.MAX_VALUE;
 
     for(int c=0; c<mNumCubits; c++)
       if( mCubits[c].isAttached() )
@@ -256,16 +251,20 @@ public abstract class BandagedObject
 
         for(int p=0; p<len; p++)
           {
-          float dx = pos[3*p  ]-mTmp[0];
-          float dy = pos[3*p+1]-mTmp[1];
-          float dz = pos[3*p+2]-mTmp[2];
-
-          if( dx*dx + dy*dy + dz*dz < 0.01f ) return c;
+          float dx = pos[3*p  ]-x;
+          float dy = pos[3*p+1]-y;
+          float dz = pos[3*p+2]-z;
+          float dist = dx*dx + dy*dy + dz*dz;
+
+          if( dist<minDist )
+            {
+            minDist = dist;
+            minIndex = c;
+            }
           }
         }
 
-    android.util.Log.e("D", "whichCubitTouched: IMPOSSIBLE!!");
-    return -1;
+    return minIndex;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java b/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
index 7ca15162..58aac497 100644
--- a/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
+++ b/src/main/java/org/distorted/bandaged/BandagedObjectPyraminx.java
@@ -138,14 +138,6 @@ public class BandagedObjectPyraminx extends BandagedObject
     return dx*dx + dy*dy + dz*dz < (SQ3/4)*1.01f;
     }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-// TODO
-
-  void getTouchedPosition(float[] output, int face, float pointX, float pointY)
-    {
-
-    }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   float[][][] getPositions()
