public void Render() {
    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

    particleSource0.AddField(magnet0);
    particleSource0.AddField(magnet1);
    particleSource0.AddField(magnet2);

    particleSource1.AddField(magnet0);
    particleSource1.AddField(magnet1);
    particleSource1.AddField(magnet2);

    particleSource2.AddField(magnet0);
    particleSource2.AddField(magnet1);
    particleSource2.AddField(magnet2);

    boolean s0 = particleSource0.AddDetector(detector);
    boolean s1 = particleSource1.AddDetector(detector);
    boolean s2 = particleSource2.AddDetector(detector);
    int maxScore = 500;
    int incValue = 20;
    int decValue = 3;
    int winThreshold = maxScore - 20;
    if (s0) complete0 += incValue;
    else complete0 -= decValue;
    if (s1) complete1 += incValue;
    else complete1 -= decValue;
    if (s2) complete2 += incValue;
    else complete2 -= decValue;
    if (complete0 < 0) complete0 = 0;
    if (complete1 < 0) complete1 = 0;
    if (complete2 < 0) complete2 = 0;
    if (complete0 > maxScore) complete0 = maxScore;
    if (complete1 > maxScore) complete1 = maxScore;
    if (complete2 > maxScore) complete2 = maxScore;

    if (complete0 >= winThreshold && complete1 >= winThreshold && complete2 >= winThreshold) {
      SharedPreferences userPref = context.getSharedPreferences("userPref", 0);
      int saveState = userPref.getInt("saveState", 20);
      if (saveState < windowId + 1) {
        SharedPreferences.Editor editorPref = userPref.edit();
        editorPref.putInt("saveState", windowId + 1);
        editorPref.commit();
      }
      manager.Activate(windowId + 1);
    }

    particleSource0.AddMirror(mirror0);

    particleSource1.AddMirror(mirror0);

    particleSource2.AddMirror(mirror0);

    magnet0.AddSourceCollision(particleSource0);
    magnet0.AddSourceCollision(particleSource1);
    magnet0.AddSourceCollision(particleSource2);
    magnet0.AddMirrorCollision(mirror0);
    magnet0.AddMagnetCollision(magnet1);
    magnet0.AddMagnetCollision(magnet2);

    magnet1.AddSourceCollision(particleSource0);
    magnet1.AddSourceCollision(particleSource1);
    magnet1.AddSourceCollision(particleSource2);
    magnet1.AddMirrorCollision(mirror0);
    magnet1.AddMagnetCollision(magnet0);
    magnet1.AddMagnetCollision(magnet2);

    magnet2.AddSourceCollision(particleSource0);
    magnet2.AddSourceCollision(particleSource1);
    magnet2.AddSourceCollision(particleSource2);
    magnet2.AddMirrorCollision(mirror0);
    magnet2.AddMagnetCollision(magnet0);
    magnet2.AddMagnetCollision(magnet1);

    grid.Render();
    particleSource0.RenderSourceSprite();
    particleSource1.RenderSourceSprite();
    particleSource2.RenderSourceSprite();
    magnet0.Render();
    magnet1.Render();
    magnet2.Render();
    particleSource0.Render();
    particleSource1.Render();
    particleSource2.Render();
    mirror0.Render();
    detector.Render();
  }