From 8c0ca56038161baea133cbaf41fdd7c5c8930190 Mon Sep 17 00:00:00 2001
From: Guillaume Meinesz <guillaume.meinesz@gmail.com>
Date: Mon, 13 Nov 2023 16:41:10 +0100
Subject: [PATCH] fix progression session

---
 Assets/GestionProgression.cs      | 80 +++++++++++++++++++++++++++++++
 Assets/GestionProgression.cs.meta | 11 +++++
 Assets/NewSystemeDeTraces.cs      |  2 +-
 Assets/Scenes/MainScene.unity     | 20 +++++++-
 Assets/mainManager.cs             | 78 ++++++++++++++++++++----------
 5 files changed, 162 insertions(+), 29 deletions(-)
 create mode 100644 Assets/GestionProgression.cs
 create mode 100644 Assets/GestionProgression.cs.meta

diff --git a/Assets/GestionProgression.cs b/Assets/GestionProgression.cs
new file mode 100644
index 00000000..ae70b941
--- /dev/null
+++ b/Assets/GestionProgression.cs
@@ -0,0 +1,80 @@
+using UnityEngine;
+using System.Collections.Generic;
+using System;
+using Newtonsoft.Json;
+
+public class GestionProgression : MonoBehaviour
+{
+    public mainManager mM;
+    // Appeler cette fonction pour sauvegarder la progression
+    public void SauveProgression(int numeroSession3)
+    {
+        // Créer un objet contenant les données à sauvegarder, y compris le timestamp actuel
+
+
+
+        // Charger la liste actuelle de sauvegardes ou créer une nouvelle liste si elle n'existe pas encore
+        listDeDonnees sauvegardes = ChargerSauvegardes();
+        bool foundinside = false;
+        foreach(DonneesProgression dd in sauvegardes.listeDeDonnees)
+        {
+            if(dd.clef == mM.clefPourSauvegardeUtilisateur)
+            {
+                foundinside = true;
+                dd.NumeroSession = numeroSession3;
+            }
+        }
+        if (!foundinside)
+        {
+            DonneesProgression newdonneesForUser = new DonneesProgression();
+            newdonneesForUser.clef = mM.clefPourSauvegardeUtilisateur;
+            newdonneesForUser.NumeroSession = numeroSession3;
+            sauvegardes.listeDeDonnees.Add(newdonneesForUser);
+        }
+
+
+        // Ajouter la nouvelcole sauvegarde à la liste des sauvegardes associées à cette clé
+        Debug.Log("sauvegarde count = " + sauvegardes.listeDeDonnees.Count);
+        string jsonData = JsonUtility.ToJson(sauvegardes);
+        Debug.Log("jsontosave = " + jsonData);
+        // Sauvegarder le JSON dans PlayerPrefs
+        PlayerPrefs.SetString("Sauvegardes", jsonData);
+        // Sauvegarder PlayerPrefs pour s'assurer que les données sont enregistrées immédiatement
+        PlayerPrefs.Save();
+        Debug.Log("Progression sauvegardée avec succès !");
+        string jsonDataRetrieved  = PlayerPrefs.GetString("Sauvegardes", "{}");
+        Debug.Log("jsonDataRetrieved = " + jsonDataRetrieved);
+    }
+
+    // Charger la liste actuelle de sauvegardes ou créer une nouvelle liste si elle n'existe pas encore
+    public listDeDonnees ChargerSauvegardes()
+    {
+        string jsonData = PlayerPrefs.GetString("Sauvegardes", "{}");
+
+        // Vérifier si la chaîne JSON n'est pas vide
+        if (!string.IsNullOrEmpty(jsonData))
+        {
+            // Désérialiser la chaîne JSON en une liste d'objets DonneesProgression
+            return JsonUtility.FromJson<listDeDonnees>(jsonData);
+        }
+        else
+        {
+            // Si la chaîne JSON est vide, retourner une liste vide
+            return new listDeDonnees();
+        }
+    }
+}
+[Serializable]
+public class listDeDonnees
+{
+    [SerializeField]
+    public List<DonneesProgression> listeDeDonnees;
+}
+
+// Classe pour stocker les données de progression
+[Serializable]
+public class DonneesProgression
+{
+    public string clef;
+    public int NumeroSession;
+}
diff --git a/Assets/GestionProgression.cs.meta b/Assets/GestionProgression.cs.meta
new file mode 100644
index 00000000..881a9e8d
--- /dev/null
+++ b/Assets/GestionProgression.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2aa109648ab428f4f8427b395d3860e9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Assets/NewSystemeDeTraces.cs b/Assets/NewSystemeDeTraces.cs
index 0db44d90..28498133 100644
--- a/Assets/NewSystemeDeTraces.cs
+++ b/Assets/NewSystemeDeTraces.cs
@@ -101,7 +101,7 @@ public class NewSystemeDeTraces : MonoBehaviour
         string UserIdToUse = "Evalulu_missin_gmode_Plugin_HM_cant_fetchUserID";
         if (SplashScreenScript.mode_Plugin_HM && HM_DataController.currentChildUser != null)
         {
-            UserIdToUse = "Evalulu_currentTeacherAccount_" + HM_DataController.currentTeacherAccount.teacherCode.ToString()+ "_HM_userIconID_"+HM_DataController.currentChildUser.userIconID.ToString() + "_HM_loginCode_" + HM_DataController.currentChildUser.loginCode;
+            UserIdToUse = "Evalulu_currentTeacherAccount_" + HM_DataController.currentTeacherAccount.teacherCode.ToString()+ "_HM_userID_"+HM_DataController.currentChildUser.userID.ToString() + "_HM_loginCode_" + HM_DataController.currentChildUser.loginCode;
         }
         return UserIdToUse;
     }
diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity
index 12f88cd3..9eddf8dc 100644
--- a/Assets/Scenes/MainScene.unity
+++ b/Assets/Scenes/MainScene.unity
@@ -841,6 +841,7 @@ GameObject:
   - component: {fileID: 761270581}
   - component: {fileID: 761270582}
   - component: {fileID: 761270583}
+  - component: {fileID: 761270584}
   m_Layer: 0
   m_Name: mainManager
   m_TagString: Untagged
@@ -931,6 +932,8 @@ MonoBehaviour:
   qcmmanager: {fileID: 761270583}
   oreilleListen: {fileID: 532516268}
   oreilleListenScript: {fileID: 532516272}
+  gestionProg: {fileID: 761270584}
+  clefPourSauvegardeUtilisateur: 
   texteFinSession: {fileID: 2130757248}
   gameObjFin: {fileID: 234776227}
   boutonSessionSuivante: {fileID: 834236340}
@@ -982,7 +985,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 3c4520771b043844483afc6db50e0401, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  jsonFileName: one_for_all
+  jsonFileName: Session 3
   data:
     sessions: []
 --- !u!82 &761270580
@@ -1157,6 +1160,19 @@ MonoBehaviour:
   m_Name: 
   m_EditorClassIdentifier: 
   mM: {fileID: 761270576}
+--- !u!114 &761270584
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 761270575}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 2aa109648ab428f4f8427b395d3860e9, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  mM: {fileID: 761270576}
 --- !u!1 &834236340
 GameObject:
   m_ObjectHideFlags: 0
@@ -9044,7 +9060,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!224 &2006134183
 RectTransform:
   m_ObjectHideFlags: 0
diff --git a/Assets/mainManager.cs b/Assets/mainManager.cs
index 27abe3a4..5cbb2455 100644
--- a/Assets/mainManager.cs
+++ b/Assets/mainManager.cs
@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using System.Net;
 using TMPro;
 using UnityEngine;
 using UnityEngine.SceneManagement;
@@ -47,7 +48,8 @@ public class mainManager : MonoBehaviour
     public QCM_manager qcmmanager;
     public GameObject oreilleListen;
     public listenAnim oreilleListenScript;
-
+    public GestionProgression gestionProg;
+    public string clefPourSauvegardeUtilisateur;
     public class groupemementChoixEtPrefabBoutonQCM
     {
         public ChargementJSONStructure.Choix choix;
@@ -60,15 +62,38 @@ public class mainManager : MonoBehaviour
         // ENVOI TRACES SERVEUR : si on voit que ce joueur a des .json traces dans le dossier TracesToBeSent, on les envoit (sinon on les envoit en fin d'epreuves)
         Debug.Log("start");
         resetClasse();
-        if (currentSession <= 0)
+        currentSession = 0;
+
+
+       
+        // Vérifier si la clé existe dans le dictionnaire
+        clefPourSauvegardeUtilisateur = "gm2023";
+        if (HM_DataController.currentTeacherAccount != null && HM_DataController.currentChildUser!=null)
         {
-            Debug.Log("currentSession == " + 0);
-            currentSession = 0;
+            clefPourSauvegardeUtilisateur = HM_DataController.currentTeacherAccount.teacherCode.ToString() + HM_DataController.currentChildUser.userID.ToString();
+
         }
-        else  if (currentSession > jsonStructureScript.data.sessions.Count - 1)
+        List<DonneesProgression> listeSauvegardes = gestionProg.ChargerSauvegardes().listeDeDonnees;
+        bool reffound = false;
+        foreach(DonneesProgression dp in listeSauvegardes)
         {
-            Debug.Log("depasse ce qui est disponible dans la structure, on refait jouer la derniere");
-            currentSession = jsonStructureScript.data.sessions.Count - 1;
+            Debug.Log("clef here = " + dp.clef);
+            if (dp.clef == clefPourSauvegardeUtilisateur)
+            {
+                reffound = true;
+                Debug.Log("FOUND starting with session N °" + dp.NumeroSession);
+                currentSession = dp.NumeroSession;
+                break;
+            }
+        }
+        if (!reffound)
+        {
+            Debug.Log("CLEF "+ clefPourSauvegardeUtilisateur +" NOT FOUND starting with session N °0");
+        }
+
+        if (currentSession >= jsonStructureScript.data.sessions.Count)
+        {
+            currentSession = 0;
         }
 
         newSystemeDeTraces.sendThisUserTracesToHMPlugin();
@@ -607,18 +632,9 @@ public class mainManager : MonoBehaviour
 
     public void ouvrirMenu (bool findesession=false)
     {
-
-        if (currentSession >= jsonStructureScript.data.sessions.Count - 1)
-        {
-            boutonSessionSuivante.SetActive(false);
-        }
-        else
-        {
-
-            int sessionSuivante = currentSession + 2;
-            BoutonnextsessionTexte.text = "Passer Session suivante "+ sessionSuivante.ToString()+"/"+ jsonStructureScript.data.sessions.Count.ToString();
-            boutonSessionSuivante.SetActive(true);
-        }
+        boutonDeconnexion.SetActive(false);
+        boutonSessionSuivante.SetActive(false);
+        
         if (findesession)
         {
             boutonSessionEnCours.SetActive(false);
@@ -630,16 +646,22 @@ public class mainManager : MonoBehaviour
             boutonSessionEnCours.SetActive(true);
         }
         gameObjFin.SetActive(true);
-        if (!boutonSessionSuivante.activeSelf && !boutonSessionEnCours.activeSelf)
+        
+
+        if (findesession)
         {
-            // fin du fin, auto deconnexion de l'utilisateur
-            deconnexion();
-        }
+            int futuresession = currentSession + 1;
+            gestionProg.SauveProgression(futuresession);
+            texteFinSession.text = "FIN DE SESSION / Envoi des traces au serveur en cours...";
+            newSystemeDeTraces.sendThisUserTracesToHMPlugin(true);
 
-        
+        }
+        else
+        {
+            newSystemeDeTraces.sendThisUserTracesToHMPlugin(false);
+        }
 
     }
-
     public void clicRetourSessionEnCOurs()
     {
         Debug.Log("clicRetourSessionEnCOurs");
@@ -648,23 +670,26 @@ public class mainManager : MonoBehaviour
 
     public void clicSessionSuivante()
     {
+        /*
         Debug.Log("clicSessionSuivante");
         resetItem();
         currentItem = 0;
         currentEpreuve=0;
         currentSession++;
+        gestionProg.SauveProgression(currentSession);
         scoreSession = 0;
         sessionConsignebeenPlayed = false;
         epreuveConsignebeenPlayed = false;
         current_step = -1;
         playerTurn = false;
         playSteps();
-        gameObjFin.SetActive(false);
+        gameObjFin.SetActive(false);*/
 
     }
     public void deconnexion()
     {
         Debug.Log("deconnexion");
+        gestionProg.SauveProgression(currentSession);
         newSystemeDeTraces.sendThisUserTracesToHMPlugin(true);
         boutonSessionSuivante.SetActive(false);
         boutonSessionEnCours.SetActive(false);
@@ -672,6 +697,7 @@ public class mainManager : MonoBehaviour
         texteFinSession.text = "FIN DE SESSION / Envoi des traces au serveur en cours...";
     }
 
+
     public IEnumerator terminateScene()
     {
         yield return new WaitForSecondsRealtime(1.0f);
-- 
GitLab