diff --git a/src/main/java/sae/chuzzle/MainActivity.java b/src/main/java/sae/chuzzle/MainActivity.java index 1e48cd3..b42a626 100644 --- a/src/main/java/sae/chuzzle/MainActivity.java +++ b/src/main/java/sae/chuzzle/MainActivity.java @@ -3,6 +3,7 @@ package sae.chuzzle; import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.os.CountDownTimer; import android.view.View; import android.widget.Button; import android.widget.RadioButton; @@ -11,13 +12,15 @@ import android.widget.TextView; public class MainActivity extends Activity implements View.OnClickListener { - + private static final long DUREE_HARD_MS = 60_000L; // 1 minute private Controleur controleur; private Button btnJouer; private Button btnMenu; + private TextView tvTimer; - + private CountDownTimer compteARebours; + private long tempsRestantMs; private boolean hardMode; private EtatJeu etatJeu; @@ -38,13 +41,18 @@ public class MainActivity extends Activity implements View.OnClickListener { // --- Restauration si retour de pause --- if (savedInstanceState != null) { etatJeu.restaurerEtat(savedInstanceState); + if (hardMode) { + tempsRestantMs = savedInstanceState.getLong("tempsRestantMs", DUREE_HARD_MS); + } + } else { + tempsRestantMs = DUREE_HARD_MS; } // --- Vue --- VueGrille vueGrille = findViewById(R.id.vueGrille); vueGrille.definirModeDaltonien(daltonien); - + tvTimer = findViewById(R.id.tvTimer); // --- Controleur --- btnJouer = findViewById(R.id.btnJouer); @@ -64,8 +72,7 @@ public class MainActivity extends Activity implements View.OnClickListener { (RadioButton) findViewById(R.id.rbLigne), (RadioButton) findViewById(R.id.rbDroite), (Spinner) findViewById(R.id.spinnerIndex), - btnJouer, - hardMode + btnJouer ); // --- Gestion tactile --- @@ -73,14 +80,39 @@ public class MainActivity extends Activity implements View.OnClickListener { new GestionnaireTactile(vueGrille, etatJeu, controleur); vueGrille.setOnTouchListener(gestionnaireTactile); - // --- Logique Hard mode --- - if (hardMode) { - // TODO: Ajouter la nouvelle fonctionnalité pour le hard mode ici (en remplacement du timer) + // --- Timer hard mode --- + if (hardMode && !etatJeu.estTerminee()) { + demarrerTimer(tempsRestantMs); + } else if (hardMode && etatJeu.estTerminee()) { + tvTimer.setVisibility(View.VISIBLE); + tvTimer.setText("⏱ 0s"); } } // - - // + // TIMER + + private void demarrerTimer(long dureeMs) { + tvTimer.setVisibility(View.VISIBLE); + + compteARebours = new CountDownTimer(dureeMs, 1000) { + + @Override + public void onTick(long millisRestants) { + tempsRestantMs = millisRestants; + long secondes = millisRestants / 1000; + tvTimer.setText("⏱ " + secondes + "s"); + } + + @Override + public void onFinish() { + tvTimer.setText("⏱ 0s"); + // Forcer la fin de partie par le temps + etatJeu.forcerFinDePartie(); + controleur.verifierFinDePartie(); + } + }.start(); + } // - // CYCLE DE VIE @@ -91,15 +123,17 @@ public class MainActivity extends Activity implements View.OnClickListener { if (etatJeu != null) { etatJeu.sauvegarderEtat(outState); } - if (controleur != null) { - controleur.sauvegarderEtat(outState); + if (hardMode) { + outState.putLong("tempsRestantMs", tempsRestantMs); } } @Override protected void onDestroy() { super.onDestroy(); - + if (compteARebours != null) { + compteARebours.cancel(); + } } @Override @@ -108,7 +142,6 @@ public class MainActivity extends Activity implements View.OnClickListener { controleur.gererCoupJoueur(); } if (v == btnMenu) { - etatJeu.forcerFinDePartie(); Intent intent = new Intent(this, MenuActivity.class); startActivity(intent); }