commit 5ba13c05353a7df7b478298055b84318457e98b3
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Sun Mar 1 00:52:50 2020 +0000

    Convert RubikCube to the new V&F center schema!

diff --git a/src/main/java/org/distorted/effect/sizechange/SizeChangeEffectTransparency.java b/src/main/java/org/distorted/effect/sizechange/SizeChangeEffectTransparency.java
index 7d12226e..715edce4 100644
--- a/src/main/java/org/distorted/effect/sizechange/SizeChangeEffectTransparency.java
+++ b/src/main/java/org/distorted/effect/sizechange/SizeChangeEffectTransparency.java
@@ -60,7 +60,7 @@ class SizeChangeEffectTransparency extends SizeChangeEffect
     Dynamic5D d1 = new Dynamic5D(duration/2, 0.5f);
     d1.add(new Static5D( init_amplitude, length, init_phase, alpha, beta) );
     d1.add(new Static5D( end_amplitude , length, end_phase , alpha, beta) );
-    Static3D center = new Static3D(min*0.5f,min*0.5f,0);
+    Static3D center = new Static3D(0,0,0);
     mNodeEffects[0][0] = new VertexEffectWave(d1, center, null);
 
     return 2;
@@ -96,7 +96,7 @@ class SizeChangeEffectTransparency extends SizeChangeEffect
     Dynamic5D d1 = new Dynamic5D(duration/2, 0.5f);
     d1.add(new Static5D( init_amplitude, length, init_phase, alpha, beta) );
     d1.add(new Static5D( end_amplitude , length, end_phase , alpha, beta) );
-    Static3D center = new Static3D(min*0.5f,min*0.5f,0);
+    Static3D center = new Static3D(0,0,0);
     mNodeEffects[1][0] = new VertexEffectWave(d1, center, null);
 
     return 2;
diff --git a/src/main/java/org/distorted/effect/win/WinEffectGlow.java b/src/main/java/org/distorted/effect/win/WinEffectGlow.java
index 5c266f09..7beecd4f 100644
--- a/src/main/java/org/distorted/effect/win/WinEffectGlow.java
+++ b/src/main/java/org/distorted/effect/win/WinEffectGlow.java
@@ -63,9 +63,7 @@ public class WinEffectGlow extends WinEffect
     degreeDyn.add(new Static1D(2.5f));
     degreeDyn.add(new Static1D(1.0f));
 
-    float centerPoint = NODE_MESH_SIZE *0.5f;
-    Static3D center = new Static3D(centerPoint,centerPoint,centerPoint);
-
+    Static3D center = new Static3D(0,0,NODE_MESH_SIZE *0.5f);
     mNodeEffects[1] = new VertexEffectSink(degreeDyn,center);
     }
 
diff --git a/src/main/java/org/distorted/object/Cubit.java b/src/main/java/org/distorted/object/Cubit.java
index 103706d2..339d4785 100644
--- a/src/main/java/org/distorted/object/Cubit.java
+++ b/src/main/java/org/distorted/object/Cubit.java
@@ -160,7 +160,7 @@ class Cubit
     float z = position.get2();
 
     float nc = parent.mSize*0.5f;
-    Static3D vector = new Static3D(x-nc, y-nc, z-nc);
+    Static3D vector = new Static3D(x-nc+0.5f, y-nc+0.5f, z-nc+0.5f);
 
     mParent          = parent;
     mMesh            = mesh;
@@ -179,7 +179,6 @@ class Cubit
     mEffect.apply(mParent.mQuatAEffect);
     mEffect.apply(mParent.mQuatCEffect);
     mEffect.apply(mParent.mScaleEffect);
-    mEffect.apply(mParent.mMoveEffect);
 
     mNode = new DistortedNode(mParent.mTexture,mEffect,mMesh);
     }
diff --git a/src/main/java/org/distorted/object/RubikObject.java b/src/main/java/org/distorted/object/RubikObject.java
index 06e1985a..2f94d7ef 100644
--- a/src/main/java/org/distorted/object/RubikObject.java
+++ b/src/main/java/org/distorted/object/RubikObject.java
@@ -22,7 +22,6 @@ package org.distorted.object;
 import android.content.SharedPreferences;
 
 import org.distorted.library.effect.Effect;
-import org.distorted.library.effect.MatrixEffectMove;
 import org.distorted.library.effect.MatrixEffectQuaternion;
 import org.distorted.library.effect.MatrixEffectScale;
 import org.distorted.library.effect.VertexEffectSink;
@@ -48,7 +47,7 @@ public abstract class RubikObject extends DistortedNode
   private final int NUM_CUBITS;
   private int mRotRow;
   private Static3D mRotAxis;
-  private Static3D mMove, mScale, mNodeMove, mNodeScale;
+  private Static3D mScale, mNodeScale;
   private Static4D mQuatAccumulated;
   private Cubit[] mCubits;
 
@@ -58,7 +57,6 @@ public abstract class RubikObject extends DistortedNode
   DistortedTexture mTexture;
 
   VertexEffectSink mSinkEffect;
-  MatrixEffectMove mMoveEffect;
   MatrixEffectScale mScaleEffect;
   MatrixEffectQuaternion mQuatCEffect;
   MatrixEffectQuaternion mQuatAEffect;
@@ -78,28 +76,22 @@ public abstract class RubikObject extends DistortedNode
     mRotationAngleMiddle = new Static1D(0);
     mRotationAngleFinal  = new Static1D(0);
 
-    mMove     = new Static3D(0,0,0);
     mScale    = new Static3D(1,1,1);
-    mNodeMove = new Static3D(0,0,0);
     mNodeScale= new Static3D(1,1,1);
 
     mQuatAccumulated = quatAcc;
 
-    Static3D sinkCenter = new Static3D(0.5f,0.5f,0.5f);
-    Static3D matrCenter = new Static3D(0,0,0);
+    Static3D center = new Static3D(0,0,0);
     Static4D region = new Static4D(0,0,0,0.72f);
 
-    mSinkEffect = new VertexEffectSink( new Static1D(getSinkStrength()), sinkCenter, region );
-    mMoveEffect = new MatrixEffectMove(mMove);
+    mSinkEffect = new VertexEffectSink( new Static1D(getSinkStrength()), center, region );
     mScaleEffect = new MatrixEffectScale(mScale);
-    mQuatCEffect = new MatrixEffectQuaternion(quatCur, matrCenter);
-    mQuatAEffect = new MatrixEffectQuaternion(quatAcc, matrCenter);
+    mQuatCEffect = new MatrixEffectQuaternion(quatCur, center);
+    mQuatAEffect = new MatrixEffectQuaternion(quatAcc, center);
 
-    MatrixEffectMove  nodeMoveEffect  = new MatrixEffectMove(mNodeMove);
     MatrixEffectScale nodeScaleEffect = new MatrixEffectScale(mNodeScale);
 
     effects.apply(nodeScaleEffect);
-    effects.apply(nodeMoveEffect);
 
     mCubits = new Cubit[NUM_CUBITS];
     mTexture = new DistortedTexture();
@@ -167,29 +159,14 @@ public abstract class RubikObject extends DistortedNode
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void recomputeScaleFactor(int screenWidth, int screenHeight)
+  public void recomputeScaleFactor(int scrWidth, int scrHeight)
     {
-    float sizeX = getMesh().getStretchX();
-    float sizeY = getMesh().getStretchY();
+    float mx = getMesh().getStretchX();
+    float my = getMesh().getStretchY();
+    float factor = (my/mx > (float)scrHeight/scrWidth) ? (float)scrHeight/my : (float)scrWidth/mx;
+    float scaleFactor = (OBJECT_SCREEN_RATIO*mx/mSize);
 
-    if( sizeY/sizeX > (float)screenHeight/screenWidth )
-      {
-      float w = (screenHeight*sizeX)/sizeY;
-      float factor = (float)screenHeight/sizeY;
-      mNodeMove.set((screenWidth-w)*0.5f ,0, 0);
-      mNodeScale.set(factor,factor,factor);
-      }
-    else
-      {
-      float h = (screenWidth*sizeY)/sizeX;
-      float factor = (float)screenWidth/sizeX;
-      mNodeMove.set(0,(screenHeight-h)*0.5f,0);
-      mNodeScale.set(factor,factor,factor);
-      }
-
-    float scaleFactor = (OBJECT_SCREEN_RATIO*sizeX/mSize);
-
-    mMove.set( sizeX*0.5f , sizeY*0.5f , 0.0f );
+    mNodeScale.set(factor,factor,factor);
     mScale.set(scaleFactor,scaleFactor,scaleFactor);
     }
 
