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