commit 20dea800b0a72b43fc16b0221dc518401725c789
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Thu Apr 29 18:24:04 2021 +0200

    Fix the long-standing issue with the double 'READY' state which, as I now see, was causing some impossible records.

diff --git a/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java b/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
index 12855f4e..f16c7090 100644
--- a/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
+++ b/src/main/java/org/distorted/effects/scramble/ScrambleEffect.java
@@ -71,6 +71,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
   private long mDurationSingleTurn;
   private final Random mRnd;
   private int mBasicAngle;
+  private boolean mRotReady, mPluginReady;
 
   TwistyObject mObject;
   Effect[] mNodeEffects;
@@ -119,6 +120,9 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
     mDurationSingleTurn = duration/(mNumScramblesLeft+mNumDoubleScramblesLeft);
     mNumScrambles = 0;
 
+    mRotReady    = false;
+    mPluginReady = false;
+
     addNewScramble();
     }
 
@@ -153,7 +157,8 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
       {
       if( mEffectReturned == mCubeEffectNumber+mNodeEffectNumber )
         {
-        mController.effectFinished(FAKE_EFFECT_ID);
+        mRotReady = true;
+        if( mPluginReady ) mController.effectFinished(FAKE_EFFECT_ID);
         }
       }
     }
@@ -226,6 +231,25 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
     addNewScramble();
     }
 
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+  private void effectFinishedAction(final long effectID, final long id)
+    {
+    mEffectReturned++;
+    effectFinishedPlugin(effectID);
+
+    if( mEffectReturned == mCubeEffectNumber+mNodeEffectNumber )
+      {
+      disassignEffects();
+
+      if( mNumScramblesLeft==0 )
+        {
+        mPluginReady = true;
+        if( mRotReady ) mController.effectFinished(FAKE_EFFECT_ID);
+        }
+      }
+    }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
   public void effectFinished(final long effectID)
@@ -236,19 +260,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
 
       if( effectID == id )
         {
-        mEffectReturned++;
-        effectFinishedPlugin(effectID);
-
-        if( mEffectReturned == mCubeEffectNumber+mNodeEffectNumber )
-          {
-          disassignEffects();
-
-          if( mNumScramblesLeft==0 )
-            {
-            mController.effectFinished(FAKE_EFFECT_ID);
-            }
-          }
-
+        effectFinishedAction(effectID,id);
         return;
         }
       }
@@ -259,19 +271,7 @@ public abstract class ScrambleEffect extends BaseEffect implements EffectListene
 
       if( effectID == id )
         {
-        mEffectReturned++;
-        effectFinishedPlugin(effectID);
-
-        if( mEffectReturned == mCubeEffectNumber+mNodeEffectNumber )
-          {
-          disassignEffects();
-
-          if( mNumScramblesLeft==0 )
-            {
-            mController.effectFinished(FAKE_EFFECT_ID);
-            }
-          }
-
+        effectFinishedAction(effectID,id);
         return;
         }
       }
