commit 09cf2a362eed69ac7fe831e2293a1046afb4707f
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Tue Dec 7 23:17:18 2021 +0100

    Introduce 'Simple' and 'Nice' meshes.

diff --git a/src/main/java/org/distorted/config/ConfigActivity.java b/src/main/java/org/distorted/config/ConfigActivity.java
index 35613d33..ea4e681b 100644
--- a/src/main/java/org/distorted/config/ConfigActivity.java
+++ b/src/main/java/org/distorted/config/ConfigActivity.java
@@ -222,14 +222,47 @@ public class ConfigActivity extends AppCompatActivity
         int jsonID = object.getJsonID();
         int meshID = object.getMeshID();
 
+        int meshState = object.getMeshState();
+
         InputStream jsonStream = ObjectJson.getStream(jsonID,this);
         InputStream meshStream = ObjectMesh.getStream(meshID,this);
-        control.changeIfDifferent(object.getOrdinal(),jsonStream,meshStream);
+
+        control.changeIfDifferent(object.getOrdinal(),meshState,jsonStream,meshStream);
         }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 // PUBLIC API
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void changeObject(RubikObject object)
+      {
+      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
+      ObjectControl control = view.getObjectControl();
+      changeIfDifferent(object,control);
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    public void changeMeshState(RubikObject object)
+      {
+      if( object!=null )
+        {
+        ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
+        ObjectControl control = view.getObjectControl();
+
+        int jsonID = object.getJsonID();
+        int meshID = object.getMeshID();
+
+        int meshState = object.getMeshState();
+
+        InputStream jsonStream = ObjectJson.getStream(jsonID,this);
+        InputStream meshStream = ObjectMesh.getStream(meshID,this);
+
+        control.changeObject(object.getOrdinal(),meshState,jsonStream,meshStream);
+        }
+      }
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
     public FirebaseAnalytics getAnalytics()
@@ -308,13 +341,4 @@ public class ConfigActivity extends AppCompatActivity
       ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
       return view.isVertical();
       }
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-
-    public void changeObject(RubikObject object)
-      {
-      ConfigSurfaceView view = findViewById(R.id.configSurfaceView);
-      ObjectControl control = view.getObjectControl();
-      changeIfDifferent(object,control);
-      }
 }
diff --git a/src/main/java/org/distorted/config/ConfigScreenPane.java b/src/main/java/org/distorted/config/ConfigScreenPane.java
index 3b187481..55d4e49f 100644
--- a/src/main/java/org/distorted/config/ConfigScreenPane.java
+++ b/src/main/java/org/distorted/config/ConfigScreenPane.java
@@ -19,6 +19,8 @@
 
 package org.distorted.config;
 
+import java.io.InputStream;
+
 import android.util.TypedValue;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
@@ -32,15 +34,13 @@ import org.distorted.objectlib.json.JsonReader;
 import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 
-import java.io.InputStream;
+import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
+import static org.distorted.objectlib.main.TwistyObject.MESH_FAST;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class ConfigScreenPane
 {
-  public static final int MESH_NICE = 0;
-  public static final int MESH_FAST = 1;
-
   private static final int[] IMAGES =
     {
     R.id.configDifficulty0,
@@ -64,8 +64,8 @@ public class ConfigScreenPane
   private void switchMeshState(ConfigActivity act, int meshState)
     {
     RubikObjectList.setMeshState(mObjectOrdinal,meshState);
-
-    // TODO: rebuild the mesh
+    RubikObject object = RubikObjectList.getObject(mObjectOrdinal);
+    act.changeMeshState(object);
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/main/RubikActivity.java b/src/main/java/org/distorted/main/RubikActivity.java
index 02280698..8be28f14 100644
--- a/src/main/java/org/distorted/main/RubikActivity.java
+++ b/src/main/java/org/distorted/main/RubikActivity.java
@@ -61,6 +61,8 @@ import org.distorted.screens.ScreenList;
 import org.distorted.screens.RubikScreenPlay;
 import org.distorted.tutorials.TutorialActivity;
 
+import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class RubikActivity extends AppCompatActivity
@@ -485,9 +487,12 @@ public class RubikActivity extends AppCompatActivity
 
     public void changeIfDifferent(int ordinal, ObjectControl control)
       {
+      RubikObject object = RubikObjectList.getObject(ordinal);
+      int meshState = object!=null ? object.getMeshState() : MESH_NICE;
+
       InputStream jsonStream = ObjectJson.getStream(this,ordinal);
       InputStream meshStream = ObjectMesh.getStream(this,ordinal);
-      control.changeIfDifferent(ordinal,jsonStream,meshStream);
+      control.changeIfDifferent(ordinal,meshState,jsonStream,meshStream);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/objects/RubikObject.java b/src/main/java/org/distorted/objects/RubikObject.java
index cb01c80a..7e4c908a 100644
--- a/src/main/java/org/distorted/objects/RubikObject.java
+++ b/src/main/java/org/distorted/objects/RubikObject.java
@@ -24,7 +24,7 @@ import org.distorted.jsons.ObjectJson;
 import org.distorted.objectlib.main.ObjectType;
 import org.distorted.patterns.RubikPatternList;
 
-import static org.distorted.config.ConfigScreenPane.MESH_NICE;
+import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/main/java/org/distorted/objects/RubikObjectList.java b/src/main/java/org/distorted/objects/RubikObjectList.java
index 143a6125..cd6c1bdc 100644
--- a/src/main/java/org/distorted/objects/RubikObjectList.java
+++ b/src/main/java/org/distorted/objects/RubikObjectList.java
@@ -29,7 +29,7 @@ import org.distorted.screens.ScreenList;
 
 import java.util.ArrayList;
 
-import static org.distorted.config.ConfigScreenPane.MESH_NICE;
+import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
 import static org.distorted.objectlib.main.ObjectType.NUM_OBJECTS;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/main/java/org/distorted/tutorials/TutorialActivity.java b/src/main/java/org/distorted/tutorials/TutorialActivity.java
index 530aae0a..50063099 100644
--- a/src/main/java/org/distorted/tutorials/TutorialActivity.java
+++ b/src/main/java/org/distorted/tutorials/TutorialActivity.java
@@ -42,8 +42,11 @@ import org.distorted.objectlib.main.ObjectControl;
 
 import org.distorted.main.R;
 import org.distorted.dialogs.RubikDialogError;
+import org.distorted.objects.RubikObject;
 import org.distorted.objects.RubikObjectList;
 
+import static org.distorted.objectlib.main.TwistyObject.MESH_NICE;
+
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class TutorialActivity extends AppCompatActivity
@@ -222,11 +225,14 @@ public class TutorialActivity extends AppCompatActivity
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    private void changeIfDifferent(int objectOrdinal,ObjectControl control)
+    private void changeIfDifferent(int ordinal,ObjectControl control)
       {
-      InputStream jsonStream = ObjectJson.getStream(this,objectOrdinal);
-      InputStream meshStream = ObjectMesh.getStream(this,objectOrdinal);
-      control.changeIfDifferent(objectOrdinal,jsonStream,meshStream);
+      RubikObject object = RubikObjectList.getObject(ordinal);
+      int meshState = object!=null ? object.getMeshState() : MESH_NICE;
+
+      InputStream jsonStream = ObjectJson.getStream(this,ordinal);
+      InputStream meshStream = ObjectMesh.getStream(this,ordinal);
+      control.changeIfDifferent(ordinal,meshState,jsonStream,meshStream);
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
