commit 411fca0c7ea84bdb00fae4e7866e500408f9a5a8
Author: leszek <leszek@koltunski.pl>
Date:   Mon Apr 3 23:39:57 2017 +0100

    Improve Olimpic (still buggy!)

diff --git a/src/main/java/org/distorted/examples/olimpic/OlimpicActivity.java b/src/main/java/org/distorted/examples/olimpic/OlimpicActivity.java
index db737f2..7ffc723 100644
--- a/src/main/java/org/distorted/examples/olimpic/OlimpicActivity.java
+++ b/src/main/java/org/distorted/examples/olimpic/OlimpicActivity.java
@@ -26,7 +26,6 @@ import android.app.Activity;
 import android.opengl.GLSurfaceView;
 import android.os.Bundle;
 import android.view.View;
-import android.widget.Button;
 import android.widget.CheckBox;
 import android.widget.TextView;
 
@@ -35,85 +34,106 @@ import android.widget.TextView;
 public class OlimpicActivity extends Activity 
 {
     private TextView mText;
+    private boolean[] mBlue, mBlack, mRed, mYellow, mGreen;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    void setText(String text)
+    @Override
+    protected void onCreate(Bundle savedState)
       {
-      mText.setText(text);
+      super.onCreate(savedState);
+      setContentView(R.layout.olimpiclayout);
+      mText = (TextView)findViewById(R.id.olimpicText);
+
+      int num = OlimpicRenderer.NUM_LEAVES+1;
+
+      mBlue   = new boolean[num];
+      mBlack  = new boolean[num];
+      mRed    = new boolean[num];
+      mYellow = new boolean[num];
+      mGreen  = new boolean[num];
+
+      if( savedState==null )
+        {
+        for (int i = 0; i < num; i++)
+          {
+          mBlue[i]   = true;
+          mBlack[i]  = true;
+          mRed[i]    = true;
+          mYellow[i] = true;
+          mGreen[i]  = true;
+          }
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  public void onClick(View view)
-    {
-    CheckBox box = (CheckBox)view;
-    int id = box.getId();
-    boolean checked = box.isChecked();
-    OlimpicSurfaceView sView = (OlimpicSurfaceView) this.findViewById(R.id.olimpicSurfaceView);
-
-    switch(id)
+    void setText(String text)
       {
-      case R.id.olimpicCheckBoxBlue0  : sView.getRenderer().pressed(0,0,checked); break;
-      case R.id.olimpicCheckBoxBlue1  : sView.getRenderer().pressed(0,1,checked); break;
-      case R.id.olimpicCheckBoxBlue2  : sView.getRenderer().pressed(0,2,checked); break;
-      case R.id.olimpicCheckBoxBlue3  : sView.getRenderer().pressed(0,3,checked); break;
-      case R.id.olimpicCheckBoxBlue4  : sView.getRenderer().pressed(0,4,checked); break;
-      case R.id.olimpicCheckBoxBlue5  : sView.getRenderer().pressed(0,5,checked); break;
-      case R.id.olimpicCheckBoxBlue6  : sView.getRenderer().pressed(0,6,checked); break;
-      case R.id.olimpicCheckBoxBlue7  : sView.getRenderer().pressed(0,7,checked); break;
-      case R.id.olimpicCheckBoxBlue8  : sView.getRenderer().pressed(0,8,checked); break;
-
-      case R.id.olimpicCheckBoxBlack0 : sView.getRenderer().pressed(1,0,checked); break;
-      case R.id.olimpicCheckBoxBlack1 : sView.getRenderer().pressed(1,1,checked); break;
-      case R.id.olimpicCheckBoxBlack2 : sView.getRenderer().pressed(1,2,checked); break;
-      case R.id.olimpicCheckBoxBlack3 : sView.getRenderer().pressed(1,3,checked); break;
-      case R.id.olimpicCheckBoxBlack4 : sView.getRenderer().pressed(1,4,checked); break;
-      case R.id.olimpicCheckBoxBlack5 : sView.getRenderer().pressed(1,5,checked); break;
-      case R.id.olimpicCheckBoxBlack6 : sView.getRenderer().pressed(1,6,checked); break;
-      case R.id.olimpicCheckBoxBlack7 : sView.getRenderer().pressed(1,7,checked); break;
-      case R.id.olimpicCheckBoxBlack8 : sView.getRenderer().pressed(1,8,checked); break;
-
-      case R.id.olimpicCheckBoxRed0   : sView.getRenderer().pressed(2,0,checked); break;
-      case R.id.olimpicCheckBoxRed1   : sView.getRenderer().pressed(2,1,checked); break;
-      case R.id.olimpicCheckBoxRed2   : sView.getRenderer().pressed(2,2,checked); break;
-      case R.id.olimpicCheckBoxRed3   : sView.getRenderer().pressed(2,3,checked); break;
-      case R.id.olimpicCheckBoxRed4   : sView.getRenderer().pressed(2,4,checked); break;
-      case R.id.olimpicCheckBoxRed5   : sView.getRenderer().pressed(2,5,checked); break;
-      case R.id.olimpicCheckBoxRed6   : sView.getRenderer().pressed(2,6,checked); break;
-      case R.id.olimpicCheckBoxRed7   : sView.getRenderer().pressed(2,7,checked); break;
-      case R.id.olimpicCheckBoxRed8   : sView.getRenderer().pressed(2,8,checked); break;
-
-      case R.id.olimpicCheckBoxYellow0: sView.getRenderer().pressed(3,0,checked); break;
-      case R.id.olimpicCheckBoxYellow1: sView.getRenderer().pressed(3,1,checked); break;
-      case R.id.olimpicCheckBoxYellow2: sView.getRenderer().pressed(3,2,checked); break;
-      case R.id.olimpicCheckBoxYellow3: sView.getRenderer().pressed(3,3,checked); break;
-      case R.id.olimpicCheckBoxYellow4: sView.getRenderer().pressed(3,4,checked); break;
-      case R.id.olimpicCheckBoxYellow5: sView.getRenderer().pressed(3,5,checked); break;
-      case R.id.olimpicCheckBoxYellow6: sView.getRenderer().pressed(3,6,checked); break;
-      case R.id.olimpicCheckBoxYellow7: sView.getRenderer().pressed(3,7,checked); break;
-      case R.id.olimpicCheckBoxYellow8: sView.getRenderer().pressed(3,8,checked); break;
-
-      case R.id.olimpicCheckBoxGreen0 : sView.getRenderer().pressed(4,0,checked); break;
-      case R.id.olimpicCheckBoxGreen1 : sView.getRenderer().pressed(4,1,checked); break;
-      case R.id.olimpicCheckBoxGreen2 : sView.getRenderer().pressed(4,2,checked); break;
-      case R.id.olimpicCheckBoxGreen3 : sView.getRenderer().pressed(4,3,checked); break;
-      case R.id.olimpicCheckBoxGreen4 : sView.getRenderer().pressed(4,4,checked); break;
-      case R.id.olimpicCheckBoxGreen5 : sView.getRenderer().pressed(4,5,checked); break;
-      case R.id.olimpicCheckBoxGreen6 : sView.getRenderer().pressed(4,6,checked); break;
-      case R.id.olimpicCheckBoxGreen7 : sView.getRenderer().pressed(4,7,checked); break;
-      case R.id.olimpicCheckBoxGreen8 : sView.getRenderer().pressed(4,8,checked); break;
+      mText.setText(text);
       }
-    }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    @Override
-    protected void onCreate(Bundle icicle) 
+    public void onClick(View view)
       {
-      super.onCreate(icicle);
-      setContentView(R.layout.olimpiclayout);
-      mText = (TextView)findViewById(R.id.olimpicText);
+      CheckBox box = (CheckBox)view;
+      int id = box.getId();
+      boolean checked = box.isChecked();
+      OlimpicSurfaceView sView = (OlimpicSurfaceView) this.findViewById(R.id.olimpicSurfaceView);
+
+      switch(id)
+        {
+        case R.id.olimpicCheckBoxBlue0  : sView.getRenderer().pressed(0,0,checked); mBlue[0]  =checked; break;
+        case R.id.olimpicCheckBoxBlue1  : sView.getRenderer().pressed(0,1,checked); mBlue[1]  =checked; break;
+        case R.id.olimpicCheckBoxBlue2  : sView.getRenderer().pressed(0,2,checked); mBlue[2]  =checked; break;
+        case R.id.olimpicCheckBoxBlue3  : sView.getRenderer().pressed(0,3,checked); mBlue[3]  =checked; break;
+        case R.id.olimpicCheckBoxBlue4  : sView.getRenderer().pressed(0,4,checked); mBlue[4]  =checked; break;
+        case R.id.olimpicCheckBoxBlue5  : sView.getRenderer().pressed(0,5,checked); mBlue[5]  =checked; break;
+        case R.id.olimpicCheckBoxBlue6  : sView.getRenderer().pressed(0,6,checked); mBlue[6]  =checked; break;
+        case R.id.olimpicCheckBoxBlue7  : sView.getRenderer().pressed(0,7,checked); mBlue[7]  =checked; break;
+        case R.id.olimpicCheckBoxBlue8  : sView.getRenderer().pressed(0,8,checked); mBlue[8]  =checked; break;
+
+        case R.id.olimpicCheckBoxBlack0 : sView.getRenderer().pressed(1,0,checked); mBlack[0] =checked; break;
+        case R.id.olimpicCheckBoxBlack1 : sView.getRenderer().pressed(1,1,checked); mBlack[1] =checked; break;
+        case R.id.olimpicCheckBoxBlack2 : sView.getRenderer().pressed(1,2,checked); mBlack[2] =checked; break;
+        case R.id.olimpicCheckBoxBlack3 : sView.getRenderer().pressed(1,3,checked); mBlack[3] =checked; break;
+        case R.id.olimpicCheckBoxBlack4 : sView.getRenderer().pressed(1,4,checked); mBlack[4] =checked; break;
+        case R.id.olimpicCheckBoxBlack5 : sView.getRenderer().pressed(1,5,checked); mBlack[5] =checked; break;
+        case R.id.olimpicCheckBoxBlack6 : sView.getRenderer().pressed(1,6,checked); mBlack[6] =checked; break;
+        case R.id.olimpicCheckBoxBlack7 : sView.getRenderer().pressed(1,7,checked); mBlack[7] =checked; break;
+        case R.id.olimpicCheckBoxBlack8 : sView.getRenderer().pressed(1,8,checked); mBlack[8] =checked; break;
+
+        case R.id.olimpicCheckBoxRed0   : sView.getRenderer().pressed(2,0,checked); mRed[0]   =checked; break;
+        case R.id.olimpicCheckBoxRed1   : sView.getRenderer().pressed(2,1,checked); mRed[1]   =checked; break;
+        case R.id.olimpicCheckBoxRed2   : sView.getRenderer().pressed(2,2,checked); mRed[2]   =checked; break;
+        case R.id.olimpicCheckBoxRed3   : sView.getRenderer().pressed(2,3,checked); mRed[3]   =checked; break;
+        case R.id.olimpicCheckBoxRed4   : sView.getRenderer().pressed(2,4,checked); mRed[4]   =checked; break;
+        case R.id.olimpicCheckBoxRed5   : sView.getRenderer().pressed(2,5,checked); mRed[5]   =checked; break;
+        case R.id.olimpicCheckBoxRed6   : sView.getRenderer().pressed(2,6,checked); mRed[6]   =checked; break;
+        case R.id.olimpicCheckBoxRed7   : sView.getRenderer().pressed(2,7,checked); mRed[7]   =checked; break;
+        case R.id.olimpicCheckBoxRed8   : sView.getRenderer().pressed(2,8,checked); mRed[8]   =checked; break;
+
+        case R.id.olimpicCheckBoxYellow0: sView.getRenderer().pressed(3,0,checked); mYellow[0]=checked; break;
+        case R.id.olimpicCheckBoxYellow1: sView.getRenderer().pressed(3,1,checked); mYellow[1]=checked; break;
+        case R.id.olimpicCheckBoxYellow2: sView.getRenderer().pressed(3,2,checked); mYellow[2]=checked; break;
+        case R.id.olimpicCheckBoxYellow3: sView.getRenderer().pressed(3,3,checked); mYellow[3]=checked; break;
+        case R.id.olimpicCheckBoxYellow4: sView.getRenderer().pressed(3,4,checked); mYellow[4]=checked; break;
+        case R.id.olimpicCheckBoxYellow5: sView.getRenderer().pressed(3,5,checked); mYellow[5]=checked; break;
+        case R.id.olimpicCheckBoxYellow6: sView.getRenderer().pressed(3,6,checked); mYellow[6]=checked; break;
+        case R.id.olimpicCheckBoxYellow7: sView.getRenderer().pressed(3,7,checked); mYellow[7]=checked; break;
+        case R.id.olimpicCheckBoxYellow8: sView.getRenderer().pressed(3,8,checked); mYellow[8]=checked; break;
+
+        case R.id.olimpicCheckBoxGreen0 : sView.getRenderer().pressed(4,0,checked); mGreen[0] =checked; break;
+        case R.id.olimpicCheckBoxGreen1 : sView.getRenderer().pressed(4,1,checked); mGreen[1] =checked; break;
+        case R.id.olimpicCheckBoxGreen2 : sView.getRenderer().pressed(4,2,checked); mGreen[2] =checked; break;
+        case R.id.olimpicCheckBoxGreen3 : sView.getRenderer().pressed(4,3,checked); mGreen[3] =checked; break;
+        case R.id.olimpicCheckBoxGreen4 : sView.getRenderer().pressed(4,4,checked); mGreen[4] =checked; break;
+        case R.id.olimpicCheckBoxGreen5 : sView.getRenderer().pressed(4,5,checked); mGreen[5] =checked; break;
+        case R.id.olimpicCheckBoxGreen6 : sView.getRenderer().pressed(4,6,checked); mGreen[6] =checked; break;
+        case R.id.olimpicCheckBoxGreen7 : sView.getRenderer().pressed(4,7,checked); mGreen[7] =checked; break;
+        case R.id.olimpicCheckBoxGreen8 : sView.getRenderer().pressed(4,8,checked); mGreen[8] =checked; break;
+        }
       }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -143,5 +163,48 @@ public class OlimpicActivity extends Activity
       {
       Distorted.onDestroy();  
       super.onDestroy();
-      }    
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState)
+      {
+      super.onSaveInstanceState(savedInstanceState);
+
+      savedInstanceState.putBooleanArray("blue"  , mBlue  );
+      savedInstanceState.putBooleanArray("black" , mBlack );
+      savedInstanceState.putBooleanArray("red"   , mRed   );
+      savedInstanceState.putBooleanArray("yellow", mYellow);
+      savedInstanceState.putBooleanArray("green" , mGreen );
+      }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+    @Override
+    public void onRestoreInstanceState(Bundle savedInstanceState)
+      {
+      super.onRestoreInstanceState(savedInstanceState);
+
+      mBlue   = savedInstanceState.getBooleanArray("blue"  );
+      mBlack  = savedInstanceState.getBooleanArray("black" );
+      mRed    = savedInstanceState.getBooleanArray("red"   );
+      mYellow = savedInstanceState.getBooleanArray("yellow");
+      mGreen  = savedInstanceState.getBooleanArray("green" );
+
+      OlimpicSurfaceView view = (OlimpicSurfaceView) this.findViewById(R.id.olimpicSurfaceView);
+      OlimpicRenderer renderer = view.getRenderer();
+
+      int num = OlimpicRenderer.NUM_LEAVES + 1;
+
+      for(int i=0; i<num; i++)
+        {
+        renderer.pressed(0, i, mBlue[i]  );
+        renderer.pressed(1, i, mBlack[i] );
+        renderer.pressed(2, i, mRed[i]   );
+        renderer.pressed(3, i, mYellow[i]);
+        renderer.pressed(4, i, mGreen[i] );
+        }
+      }
+
 }
diff --git a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
index 68fb077..dcad4a2 100644
--- a/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
+++ b/src/main/java/org/distorted/examples/olimpic/OlimpicRenderer.java
@@ -50,7 +50,7 @@ class OlimpicRenderer implements GLSurfaceView.Renderer
 {
    private static final int LEAF_SIZE = 100;
    private static final int NUM_CIRCLES = 5;
-   private static final int NUM_LEAVES  = 8;
+   static final int NUM_LEAVES  = 8;
    
    private GLSurfaceView mView;
    private DistortedNode mRoot;
