commit 302600e56d71077bb1d757a764b374033c97c3c0
Author: leszek <leszek@koltunski.pl>
Date:   Thu Jan 30 13:12:38 2025 +0100

    compiles now

diff --git a/src/main/java/org/distorted/dialogs/DialogPattern.java b/src/main/java/org/distorted/dialogs/DialogPattern.java
index ec550d39..f1b899f2 100644
--- a/src/main/java/org/distorted/dialogs/DialogPattern.java
+++ b/src/main/java/org/distorted/dialogs/DialogPattern.java
@@ -18,6 +18,7 @@ import android.widget.ExpandableListView;
 import androidx.fragment.app.FragmentActivity;
 
 import org.distorted.main.R;
+import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.patterns.RubikPattern;
 import org.distorted.objectlib.patterns.RubikPatternList;
@@ -110,7 +111,7 @@ public class DialogPattern extends DialogAbstract
       public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id)
         {
         RubikPattern pattern = RubikPattern.getInstance();
-        int[][] moves = pattern.reInitialize(mPatternOrdinal, groupPosition, childPosition);
+        ObjectMove[] moves = pattern.reInitialize(mPatternOrdinal, groupPosition, childPosition);
         if( control!=null ) control.initializeObject(moves);
 
         ScreenPattern state = (ScreenPattern) ScreenList.PATT.getScreenClass();
diff --git a/src/main/java/org/distorted/patterns/ScreenPattern.java b/src/main/java/org/distorted/patterns/ScreenPattern.java
index 74a4a9b0..7557f45c 100644
--- a/src/main/java/org/distorted/patterns/ScreenPattern.java
+++ b/src/main/java/org/distorted/patterns/ScreenPattern.java
@@ -21,6 +21,7 @@ import org.distorted.dialogs.DialogPattern;
 import org.distorted.helpers.TransparentButton;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
+import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.patterns.RubikPattern;
 
@@ -315,7 +316,7 @@ public class ScreenPattern extends ScreenAbstract
         }
       }
 
-    int[][] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
+    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
     ObjectControl control = act.getControl();
     if( control!=null ) control.initializeObject(moves);
     }
@@ -345,7 +346,7 @@ public class ScreenPattern extends ScreenAbstract
         }
       }
 
-    int[][] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
+    ObjectMove[] moves = patt.reInitialize(mPatternOrdinal, mCategory, mPattern);
     ObjectControl control = act.getControl();
     if( control!=null ) control.initializeObject(moves);
     }
diff --git a/src/main/java/org/distorted/solvers/ScreenSetupPosition.java b/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
index 0e142558..8f54ca88 100644
--- a/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
+++ b/src/main/java/org/distorted/solvers/ScreenSetupPosition.java
@@ -32,6 +32,7 @@ import org.distorted.dialogs.DialogSolvers;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.MainActivity;
 import org.distorted.main.R;
+import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.helpers.OperatingSystemInterface;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObject;
@@ -535,7 +536,7 @@ public class ScreenSetupPosition extends ScreenAbstract implements ResultScreen
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void setSolved(final int[][] moves, final int phaseNumber, final int[][] subphases)
+  public void setSolved(final ObjectMove[] moves, final int phaseNumber, final int[][] subphases)
     {
     final SolverActivity act = mWeakAct.get();
 
diff --git a/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java b/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
index 34cab6f5..28527b1d 100644
--- a/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
+++ b/src/main/java/org/distorted/solvers/ScreenSolutionMultiphased.java
@@ -27,6 +27,7 @@ import org.distorted.library.type.Static2D;
 import org.distorted.library.type.Static4D;
 import org.distorted.main.R;
 import org.distorted.objectlib.helpers.MovesFinished;
+import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.main.ObjectControl;
 import org.distorted.objectlib.main.TwistyObject;
 
@@ -48,7 +49,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
   private TextView mMovesText, mMovesPhase;
   private String[] mPhaseNames;
   private int mNumPhases;
-  private int[][][] mMoves;
+  private ObjectMove[][] mMoves;
   private int[][] mCubitsNotInvolved;
   private int mNumMoves,mCurrMove,mCurrPhase;
   private boolean mCanMove;
@@ -255,7 +256,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
 
     if( mCurrMove>0 )
       {
-      int[][] moves = transformMoves(mMoves[mCurrPhase],0,mCurrMove, false);
+      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mCurrMove, false);
       control.applyScrambles(moves);
       mCurrMove = 0;
       }
@@ -264,7 +265,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
       mCurrPhase--;
       mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
       mCurrMove = 0;
-      int[][] moves = transformMoves(mMoves[mCurrPhase],0,mNumMoves, false);
+      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],0,mNumMoves, false);
       control.applyScrambles(moves);
       }
     else
@@ -272,7 +273,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
       mCurrPhase = mNumPhases-1;
       mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
       mCurrMove = mNumMoves;
-      int[][] moves = transformMoves(mMoves, true);
+      ObjectMove[] moves = transformMoves(mMoves, true);
       control.applyScrambles(moves);
       }
 
@@ -289,7 +290,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
     if( mCurrPhase<mNumPhases-1 )
       {
       glowCubits(mCubitsNotInvolved[mCurrPhase]);
-      int[][] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
+      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
       control.applyScrambles(moves);
       mCurrPhase++;
       mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
@@ -298,7 +299,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
     else if( mCurrMove<mNumMoves )
       {
       glowCubits(mCubitsNotInvolved[mCurrPhase]);
-      int[][] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
+      ObjectMove[] moves = transformMoves(mMoves[mCurrPhase],mCurrMove,mNumMoves, true);
       control.applyScrambles(moves);
       mCurrMove = mNumMoves;
       }
@@ -307,7 +308,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
       mCurrPhase = 0;
       mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
       mCurrMove = 0;
-      int[][] moves = transformMoves(mMoves, false);
+      ObjectMove[] moves = transformMoves(mMoves, false);
       control.applyScrambles(moves);
       }
 
@@ -344,20 +345,15 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int[][] transformMoves(int[][] moves, int start, int end, boolean front)
+  private ObjectMove[] transformMoves(ObjectMove[] moves, int start, int end, boolean front)
     {
-    int mult = front ? 1:-1;
     int len = end-start;
-    int[][] ret = new int[len][];
+    ObjectMove[] ret = new ObjectMove[len];
 
     for(int m=0; m<len; m++)
       {
-      int[] mv = moves[front ? start+m : end-1-m];
-      int[] rt = new int[3];
-      rt[0] = mv[0];
-      rt[1] = (1<<mv[1]);
-      rt[2] = mult*mv[2];
-      ret[m] = rt;
+      ObjectMove mv = moves[front ? start+m : end-1-m];
+      ret[m] = new ObjectMove( mv.getAxis(), mv.getRowBitmap(), front ? mv.getAngle() : -mv.getAngle() );
       }
 
     return ret;
@@ -365,29 +361,24 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  private int[][] transformMoves(int[][][] moves, boolean front)
+  private ObjectMove[] transformMoves(ObjectMove[][] moves, boolean front)
     {
     int len = moves.length;
     int totalLen = 0;
-    for (int[][] move : moves) totalLen += (move==null ? 0 : move.length);
+    for( ObjectMove[] move : moves ) totalLen += (move==null ? 0 : move.length);
 
-    int[][] ret = new int[totalLen][];
-    int mult = front ? 1:-1;
+    ObjectMove[] ret = new ObjectMove[totalLen];
     int index = 0;
 
     for(int m=0; m<len; m++)
       {
-      int[][] mv = moves[front ? m : len-1-m];
+      ObjectMove[] mv = moves[front ? m : len-1-m];
       int l = (mv==null ? 0 : mv.length);
 
       for(int p=0; p<l; p++)
         {
-        int[] mve = mv[front ? p : l-1-p];
-        int[] rt = new int[3];
-        rt[0] = mve[0];
-        rt[1] = (1<<mve[1]);
-        rt[2] = mult*mve[2];
-        ret[index++] = rt;
+        ObjectMove mve = mv[front ? p : l-1-p];
+        ret[index++] = new ObjectMove( mve.getAxis(), mve.getRowBitmap(), front ? mve.getAngle() : -mve.getAngle() );
         }
       }
 
@@ -451,10 +442,10 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
       if( mCurrMove>0 )
         {
         mCanMove = false;
-        int[] move = mMoves[mCurrPhase][--mCurrMove];
+        ObjectMove move = mMoves[mCurrPhase][--mCurrMove];
         ObjectControl control = act.getControl();
         control.blockTouch(MOVES_PLACE_0);
-        control.addRotation(this, move[0], (1<<move[1]), -move[2], MILLIS_PER_DEGREE);
+        control.addRotation(this, move.getAxis(), move.getRowBitmap(), -move.getAngle(), MILLIS_PER_DEGREE);
         }
       else if( mCurrPhase>0 )
         {
@@ -468,7 +459,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
         mCurrPhase = mNumPhases-1;
         mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
         mCurrMove = mNumMoves;
-        int[][] moves = transformMoves(mMoves, true);
+        ObjectMove[] moves = transformMoves(mMoves, true);
         ObjectControl control = act.getControl();
         control.applyScrambles(moves);
         glowCubits(mCubitsNotInvolved[mCurrPhase]);
@@ -489,10 +480,10 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
       if( mCurrMove<mNumMoves )
         {
         mCanMove = false;
-        int[] move = mMoves[mCurrPhase][mCurrMove++];
+        ObjectMove move = mMoves[mCurrPhase][mCurrMove++];
         ObjectControl control = act.getControl();
         control.blockTouch(MOVES_PLACE_1);
-        control.addRotation(this, move[0], (1<<move[1]), move[2], MILLIS_PER_DEGREE);
+        control.addRotation(this, move.getAxis(), move.getRowBitmap(), move.getAngle(), MILLIS_PER_DEGREE);
         if( mCurrMove==mNumMoves && mCurrPhase==mNumPhases-1 ) glowCubits(mCubitsNotInvolved[mCurrPhase]);
         }
       else if( mCurrPhase<mNumPhases-1 )
@@ -507,7 +498,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
         mCurrPhase = 0;
         mNumMoves = mMoves[mCurrPhase]==null ? 0 : mMoves[mCurrPhase].length;
         mCurrMove = 0;
-        int[][] moves = transformMoves(mMoves, false);
+        ObjectMove[] moves = transformMoves(mMoves, false);
         ObjectControl control = act.getControl();
         control.applyScrambles(moves);
         }
@@ -522,7 +513,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
     {
     mPhaseNames = names;
     mNumPhases = names.length;
-    mMoves = new int[mNumPhases][][];
+    mMoves = new ObjectMove[mNumPhases][];
     mCubitsNotInvolved = new int[mNumPhases][];
     mCanMove = true;
     if( mAct!=null ) setSolution(null,0,null);
@@ -530,7 +521,7 @@ public class ScreenSolutionMultiphased extends ScreenAbstract implements MovesFi
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void setSolution(int[][] moves, int phase, int[][] subphases)
+  public void setSolution(ObjectMove[] moves, int phase, int[][] subphases)
     {
     SolverActivity act=mAct.get();
 
diff --git a/src/main/java/org/distorted/solvers/ScreenSolutionSinglephased.java b/src/main/java/org/distorted/solvers/ScreenSolutionSinglephased.java
index 807ab42a..b8465c48 100644
--- a/src/main/java/org/distorted/solvers/ScreenSolutionSinglephased.java
+++ b/src/main/java/org/distorted/solvers/ScreenSolutionSinglephased.java
@@ -20,6 +20,7 @@ import android.widget.TextView;
 import org.distorted.helpers.TransparentImageButton;
 import org.distorted.main.R;
 import org.distorted.objectlib.helpers.MovesFinished;
+import org.distorted.objectlib.helpers.ObjectMove;
 import org.distorted.objectlib.main.ObjectControl;
 
 import java.lang.ref.WeakReference;
@@ -32,7 +33,7 @@ public class ScreenSolutionSinglephased extends ScreenAbstract implements MovesF
 
   private TransparentImageButton mPrevButton, mNextButton, mBackButton;
   private TextView mMovesText;
-  private int[][] mMoves;
+  private ObjectMove[] mMoves;
   private int mCurrMove, mNumMoves;
   private boolean mCanRotate;
   private float mButtonSize;
@@ -190,9 +191,9 @@ public class ScreenSolutionSinglephased extends ScreenAbstract implements MovesF
         }
       else
         {
-        int axis      = mMoves[mCurrMove-1][0];
-		int rowBitmap = mMoves[mCurrMove-1][1];
-		int bareAngle = mMoves[mCurrMove-1][2];
+        int axis      = mMoves[mCurrMove-1].getAxis();
+		int rowBitmap = mMoves[mCurrMove-1].getRowBitmap();
+		int bareAngle = mMoves[mCurrMove-1].getAngle();
 
         if( bareAngle!=0 )
           {
@@ -226,9 +227,9 @@ public class ScreenSolutionSinglephased extends ScreenAbstract implements MovesF
         }
       else
         {
-        int axis      = mMoves[mCurrMove][0];
-	    int rowBitmap = mMoves[mCurrMove][1];
-	    int bareAngle = mMoves[mCurrMove][2];
+        int axis      = mMoves[mCurrMove].getAxis();
+	    int rowBitmap = mMoves[mCurrMove].getRowBitmap();
+	    int bareAngle = mMoves[mCurrMove].getAngle();
 
         if( bareAngle!=0 )
           {
@@ -249,7 +250,7 @@ public class ScreenSolutionSinglephased extends ScreenAbstract implements MovesF
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void setSolution(int[][] moves)
+  void setSolution(ObjectMove[] moves)
     {
     mCanRotate= true;
     mCurrMove = 0;
