commit 9e79b20f97975768cd8bf591a619d872762fe1d2
Author: leszek <leszek@koltunski.pl>
Date:   Mon Sep 11 22:04:08 2023 +0200

    progress with TwistyBandagedMegaminx.

diff --git a/src/main/java/org/distorted/objectlib/bandaged/BandagedCubit.java b/src/main/java/org/distorted/objectlib/bandaged/BandagedCubit.java
index 01dc2551..a0672642 100644
--- a/src/main/java/org/distorted/objectlib/bandaged/BandagedCubit.java
+++ b/src/main/java/org/distorted/objectlib/bandaged/BandagedCubit.java
@@ -9,10 +9,6 @@
 
 package org.distorted.objectlib.bandaged;
 
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-
 import org.distorted.library.effect.EffectType;
 import org.distorted.library.effect.FragmentEffectBrightness;
 import org.distorted.library.effect.MatrixEffectMove;
@@ -21,22 +17,17 @@ import org.distorted.library.effect.MatrixEffectScale;
 import org.distorted.library.main.DistortedEffects;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedTexture;
-import org.distorted.library.helpers.QuatHelper;
 import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.type.Static1D;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
-import org.distorted.objectlib.helpers.FactoryCubit;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class BandagedCubit
 {
     private static final Static3D CENTER = new Static3D(0,0,0);
-    private static final float[] mTmp = new float[4];
     private static final Static1D mAlpha = new Static1D(20.0f);
-    private static Bitmap mBitmap;
-    private static Static4D[] mTextureMaps;
 
     private final BandagedObject mObject;
     private final DistortedNode mNode;
@@ -51,58 +42,6 @@ public class BandagedCubit
     private boolean mIsAttached;
     private long mMarkedEffectID;
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    private static void createBitmap(int[] colors)
-      {
-      final int NUM = colors.length;
-      final int SIZE= 32;
-
-      mTextureMaps = new Static4D[NUM];
-
-      Paint paint = new Paint();
-      paint.setStyle(Paint.Style.FILL);
-      mBitmap = Bitmap.createBitmap( NUM*SIZE, SIZE, Bitmap.Config.ARGB_4444);
-      Canvas canvas = new Canvas(mBitmap);
-
-      for(int color=0; color<NUM; color++)
-        {
-        paint.setColor(colors[color]);
-        canvas.drawRect(color*SIZE, 0, (color+1)*SIZE, SIZE, paint);
-        mTextureMaps[color] = new Static4D( ((float)color)/NUM, 0.0f, 1.0f/NUM, 1.0f );
-        }
-      }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    private void resetTextureMaps(MeshBase mesh)
-      {
-      FactoryCubit fact = FactoryCubit.getInstance();
-      int numComponents = mesh.getNumTexComponents();
-      Static4D[] maps = new Static4D[numComponents];
-
-      if( mTextureMaps==null || mTextureMaps.length!=numComponents || mBitmap==null )
-        {
-        createBitmap(mObject.getColors());
-        }
-
-      for(int i=0; i<numComponents; i++)
-        {
-        Static4D q = fact.getQuaternion(i);
-        QuatHelper.rotateVectorByQuat(mTmp,0,0,1,0,q);
-        int index = mObject.computeMapsIndex(mTmp);
-
-        if( index>=mTextureMaps.length )
-          {
-          android.util.Log.e("D", "index="+index+" texMapLen="+mTextureMaps.length);
-          }
-
-        maps[i] = mTextureMaps[index];
-        }
-
-      mesh.setTextureMap(maps,0);
-      }
-
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     private void computeMove(float[] position)
@@ -144,10 +83,8 @@ public class BandagedCubit
       MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
 
       mTexture = new DistortedTexture();
-      if( mBitmap==null ) createBitmap(mObject.getColors());
-      mTexture.setTextureAlreadyInverted(mBitmap);
-
-      resetTextureMaps(mesh);
+      mObject.recreateBitmap(mTexture);
+      mObject.resetTextureMaps(mesh);
 
       MatrixEffectScale scaleEffect = new MatrixEffectScale(scale);
       MatrixEffectQuaternion quat1Effect = new MatrixEffectQuaternion(quat1, CENTER);
@@ -177,7 +114,7 @@ public class BandagedCubit
 
       computeMove(mPosition);
       MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
-      resetTextureMaps(mesh);
+      mObject.resetTextureMaps(mesh);
       mNode.setMesh(mesh);
       mMove.set( scale*mUnscaledX, scale*mUnscaledY, scale*mUnscaledZ);
       }
@@ -197,17 +134,16 @@ public class BandagedCubit
 
       computeMove(mPosition);
       MeshBase mesh = mObject.createMesh(mPosition,mRoundCorners);
-      resetTextureMaps(mesh);
+      mObject.resetTextureMaps(mesh);
       mNode.setMesh(mesh);
       mMove.set( scale*mUnscaledX, scale*mUnscaledY, scale*mUnscaledZ);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    public void recreateBitmap()
+    public DistortedTexture getTexture()
       {
-      if( mBitmap==null ) createBitmap(mObject.getColors());
-      mTexture.setTextureAlreadyInverted(mBitmap);
+      return mTexture;
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/bandaged/BandagedObject.java b/src/main/java/org/distorted/objectlib/bandaged/BandagedObject.java
index e818b17b..70e08655 100644
--- a/src/main/java/org/distorted/objectlib/bandaged/BandagedObject.java
+++ b/src/main/java/org/distorted/objectlib/bandaged/BandagedObject.java
@@ -9,21 +9,32 @@
 
 package org.distorted.objectlib.bandaged;
 
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+
+import org.distorted.library.helpers.QuatHelper;
 import org.distorted.library.main.DistortedNode;
 import org.distorted.library.main.DistortedScreen;
+import org.distorted.library.main.DistortedTexture;
 import org.distorted.library.mesh.MeshBase;
 import org.distorted.library.type.Static3D;
 import org.distorted.library.type.Static4D;
+import org.distorted.objectlib.helpers.FactoryCubit;
 import org.distorted.objectlib.main.TwistyObject;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public abstract class BandagedObject
 {
+    private static final float[] mTmp = new float[4];
+
     private final DistortedScreen mScreen;
     private final float[][] mFaceAxis;
     private BandagedCubit[] mCubits;
     private final float[][] mRotAxis;
+    private Bitmap mBitmap;
+    private Static4D[] mTextureMaps;
 
     float[][] mCuts;
     final int[] mSize;
@@ -63,6 +74,53 @@ public abstract class BandagedObject
    public abstract Static3D[] getFaceAxis();
    public abstract float getScreenRatio();
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void createBitmap(int[] colors)
+    {
+    final int NUM = colors.length;
+    final int SIZE= 32;
+
+    mTextureMaps = new Static4D[NUM];
+
+    Paint paint = new Paint();
+    paint.setStyle(Paint.Style.FILL);
+    mBitmap = Bitmap.createBitmap( NUM*SIZE, SIZE, Bitmap.Config.ARGB_4444);
+    Canvas canvas = new Canvas(mBitmap);
+
+    for(int color=0; color<NUM; color++)
+      {
+      paint.setColor(colors[color]);
+      canvas.drawRect(color*SIZE, 0, (color+1)*SIZE, SIZE, paint);
+      mTextureMaps[color] = new Static4D( ((float)color)/NUM, 0.0f, 1.0f/NUM, 1.0f );
+      }
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void resetTextureMaps(MeshBase mesh)
+    {
+    FactoryCubit fact = FactoryCubit.getInstance();
+    int numComponents = mesh.getNumTexComponents();
+    Static4D[] maps = new Static4D[numComponents];
+
+    if( mTextureMaps==null || mBitmap==null )
+      {
+      android.util.Log.e("D", "RECREATING TEXTURE");
+      createBitmap(getColors());
+      }
+
+    for(int i=0; i<numComponents; i++)
+      {
+      Static4D q = fact.getQuaternion(i);
+      QuatHelper.rotateVectorByQuat(mTmp,0,0,1,0,q);
+      int index = computeMapsIndex(mTmp);
+      maps[i] = mTextureMaps[index];
+      }
+
+    mesh.setTextureMap(maps,0);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   private float getRotRow(int ax, float d)
@@ -248,10 +306,22 @@ public abstract class BandagedObject
         }
       else
         {
-        for(int i=0; i<mNumCubits; i++) mCubits[i].recreateBitmap();
+        for(int i=0; i<mNumCubits; i++)
+          {
+          DistortedTexture tex = mCubits[i].getTexture();
+          recreateBitmap(tex);
+          }
         }
      }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  void recreateBitmap(DistortedTexture tex)
+    {
+    if( mBitmap==null ) createBitmap(getColors());
+    tex.setTextureAlreadyInverted(mBitmap);
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void touchCubit(int index)
diff --git a/src/main/java/org/distorted/objectlib/helpers/ObjectSignature.java b/src/main/java/org/distorted/objectlib/helpers/ObjectSignature.java
index 239535ee..a12013b6 100644
--- a/src/main/java/org/distorted/objectlib/helpers/ObjectSignature.java
+++ b/src/main/java/org/distorted/objectlib/helpers/ObjectSignature.java
@@ -30,6 +30,8 @@ import org.distorted.library.helpers.QuatHelper;
 import org.distorted.objectlib.bandaged.BandagedObjectMegaminx;
 import org.distorted.objectlib.bandaged.FactoryBandagedMegaminx;
 import org.distorted.objectlib.bandaged.FactoryBandagedPyraminx;
+import org.distorted.objectlib.objects.TwistyBandagedMegaminx;
+import org.distorted.objectlib.objects.TwistyBandagedPyraminx;
 import org.distorted.objectlib.touchcontrol.TouchControlDodecahedron;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -162,7 +164,7 @@ public class ObjectSignature implements Comparable<ObjectSignature>
 
     char name = shortName.charAt(0);
 
-    if( name == 'P' )
+    if( name == TwistyBandagedPyraminx.MARKER )
       {
       mTmp = new float[4];
       int x=shortName.charAt(1)-'0';
@@ -172,7 +174,7 @@ public class ObjectSignature implements Comparable<ObjectSignature>
       prepareTouchRowsPyraminx();
       prepareAllCyclesPyraminx();
       }
-    else if( name == 'M' )
+    else if( name == TwistyBandagedMegaminx.MARKER )
       {
       mTmp = new float[4];
       mParam=shortName.charAt(1)-'0';
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedMegaminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedMegaminx.java
index a8ee5e9b..df4c097f 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedMegaminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedMegaminx.java
@@ -34,6 +34,7 @@ public class TwistyBandagedMegaminx extends TwistyDodecahedron
   public static final int MEGAMINX5 = 5;
 
   public static final String OBJECT_NAME_MEGAMINX = "LOCAL_MEGAMINX";
+  public static final char MARKER = 'm';  // keep lowercase
 
   // TODO
   private static final int OCT_1 = 0;
@@ -407,7 +408,7 @@ public class TwistyBandagedMegaminx extends TwistyDodecahedron
     {
     if( mSignature==null ) mSignature = getSignature();
     int param = getInitData().getParam();
-    return "M"+param+"_"+mSignature.getString();
+    return MARKER+(param+"_"+mSignature.getString());
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedPyraminx.java b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedPyraminx.java
index cc21bf4c..9fe5e437 100644
--- a/src/main/java/org/distorted/objectlib/objects/TwistyBandagedPyraminx.java
+++ b/src/main/java/org/distorted/objectlib/objects/TwistyBandagedPyraminx.java
@@ -32,6 +32,7 @@ import org.distorted.objectlib.touchcontrol.TouchControlTetrahedron;
 public class TwistyBandagedPyraminx extends ShapeTetrahedron
 {
   public static final String OBJECT_NAME_PYRAMINX = "LOCAL_PYRAMINX";
+  public static final char MARKER = 'p'; // keep lowercase
 
   private static final Static3D[] ROT_AXIS = new Static3D[]
         {
@@ -411,7 +412,7 @@ public class TwistyBandagedPyraminx extends ShapeTetrahedron
     {
     if( mSignature==null ) mSignature = getSignature();
     int[] numLayers = getNumLayers();
-    return "P"+numLayers[0]+"_"+mSignature.getString();
+    return MARKER+(numLayers[0]+"_"+mSignature.getString());
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
