Skip to content
Snippets Groups Projects
QCM_manager.cs 9.81 KiB
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static ChargementJSONStructure;
using static mainManager;

public class QCM_manager : MonoBehaviour
{
    public mainManager mM;
    public void playStepsQCM()
    {
        bool playswitch = true;
        bool enditemToBeLaunched = false;
        while (playswitch)
        {
            playswitch = false;
            switch (mM.current_step)
            {
                case -1:
                    mM.texteCheat.text += "\nPret";
                    bool uneImageExiste = mM.executeAsset(mM.i.pret, null,true);
                    bool unSonExiste = mM.executeAsset(mM.i.pret, mM.flecheReadyDisplayed,false);
                    if (!unSonExiste || !uneImageExiste)
                    {
                        mM.playerTurn = false;
                        //Debug.LogError("pas d'image on poursuit");
                        // si il n'y a ni image ni son dans cet asset, on poursuit :
                        playswitch = true;
                    } // correspond aux step 0 et 1 du droulement dans
                    else
                    {
                        //Debug.LogError("quelquechose existe");
                    }
                    break;
                case 0:
                    Debug.Log("on destroy image pricnipale");
                    if (mM.posScript.currentlyInstanciatedprefabImagePrincipale != null)
                    {
                        Destroy(mM.posScript.currentlyInstanciatedprefabImagePrincipale.gameObject);
                    }
                    if (!mM.sessionConsignebeenPlayed)
                    {
                        mM.texteCheat.text += "\nSession";
                        mM.sessionConsignebeenPlayed = true;
                        if (mM.executeAsset(mM.s.consigne, null, true))
                        {
                            Debug.Log("on refait apparaitre image pricnipale");
                            mM.posScript.currentlyInstanciatedprefabImagePrincipale.gameObject.SetActive(true);
                        } // consigne de la session (absente du droulement)
                        mM.executeAsset(mM.s.consigne, mM.playSteps,false); // consigne de la session (absente du droulement)
                    }
                    else { playswitch = true; }
                    break;
                case 1:
                    Debug.Log("on destroy image pricnipale");
                    if (mM.posScript.currentlyInstanciatedprefabImagePrincipale != null)
                    {
                        Destroy(mM.posScript.currentlyInstanciatedprefabImagePrincipale.gameObject);
                    }
                    if (!mM.epreuveConsignebeenPlayed)
                    {
                        mM.texteCheat.text += "\nEpreuve id=" + mM.e.id;
                        mM.epreuveConsignebeenPlayed = true;
                        if(mM.executeAsset(mM.e.consigne, null, true))
                        {
                            Debug.Log("on refait apparaitre image pricnipale");
                            mM.posScript.currentlyInstanciatedprefabImagePrincipale.gameObject.SetActive(true);
                        } // consigne de l'preuve (absente du droulement)
                        mM.executeAsset(mM.e.consigne, mM.playSteps,false); // consigne de l'preuve (absente du droulement)
                    }
                    else { playswitch = true; }
                    break;
                case 2:
                    mM.texteCheat.text += "\nItem id=" + mM.i.id + " type=" + mM.i.type;
                    if(mM.executeAsset(mM.i.fond, null, true))
                    {
                        mM.posScript.currentlyInstanciatedprefabImagePrincipale.gameObject.SetActive(true);
                    }
                    mM.executeAsset(mM.i.consigne, mM.playSteps,false); // consigne de l'item (prsent dans le droulement)
                    break;
                case 3: // instancition + Liste CHOIX (en QCM) OU TOUCHER LES CHOIX (en GD tuto seulement !)
                    if (mM.list_choix_associed_with_prefabs != null)
                    {
                        mM.list_choix_associed_with_prefabs.Clear();
                    }
                    mM.list_choix_associed_with_prefabs = new List<groupemementChoixEtPrefabBoutonQCM>();
                    foreach (Choix ccc in mM.i.choix)
                    {
                        if (((ccc.id != null && ccc.id.Length > 0) || (ccc.son != null && ccc.son.Length > 0))&& mM.jsonStructureScript.checkifitemexists(ccc.image,true))
                        {
                            groupemementChoixEtPrefabBoutonQCM q = new groupemementChoixEtPrefabBoutonQCM();
                            q.choix = ccc;
                            mM.list_choix_associed_with_prefabs.Add(q);

                        }
                        else
                        {
                            // choix pas elligible car pas de string son
                        }

                    }

                    if(mM.list_choix_associed_with_prefabs.Count > 0)
                    {
                        if (mM.i.randomiser)
                        {
                            mM.list_choix_associed_with_prefabs.Sort((a, b) => UnityEngine.Random.Range(-1, 2));
                        }
                        mM.posScript.CalculateAlignment(mM.list_choix_associed_with_prefabs);
                        mM.instancieAndPlayCHoix();
                    }
                    else
                    {
                        Debug.Log("QCM error no image to display this item, lets go to the next one");
                        mM.current_step = 10;
                    }
                    break;
                case 4: // EXPLICATION (prsent dans le droulement)
                    if (mM.i.type == "tuto" && mM.i.explication != null && mM.i.explication.Length > 0)
                    {
                        if (mM.i.surlignerExplication >= 0.0f)
                        {
                            foreach (groupemementChoixEtPrefabBoutonQCM b in mM.list_choix_associed_with_prefabs)
                            {
                                if (b.choix.correct)
                                {
                                    Debug.Log("choix correct explication doit clignoter i.surlignerExplication=" + mM.i.surlignerExplication);
                                    b.boutonqcmAssocied.clignote(mM.i.surlignerExplication);
                                }
                            }
                        }
                        mM.executeAsset(mM.i.explication, mM.playSteps, false);
                        // plus on fait clignoter le bon resultat
                    }
                    else { playswitch = true; }
                    break;
                case 5: // MISE EN ACTION  (prsent dans le droulement)
                    mM.user_dureeActionOnChoix = 0.0f;
                    mM.user_choix = "";
                    mM.scoreItem = -1;
                    mM.user_choixPossibles = new string[mM.i.choix.Count];
                    for (int indexi = 0; indexi < mM.i.choix.Count; indexi++)
                    {
                        if (mM.i.choix[indexi].id != null)
                        {
                            mM.user_choixPossibles[indexi] = mM.i.choix[indexi].id;

                        }
                        else if (mM.i.choix[indexi].son!=null)
                        {
                            mM.user_choixPossibles[indexi] = mM.i.choix[indexi].son;
                        }
                    }
                    if (mM.i.type == "tuto" && mM.i.miseEnAction != null && mM.i.miseEnAction.Length > 0)
                    { mM.executeAsset(mM.i.miseEnAction, mM.playerturnnow,false); }
                    else { mM.playerturnnow(); }
                    break;
                case 6:
                    mM.user_dureeActionOnChoix = Time.time - mM.actionUtilisateurStartTimeItem;
                    // action utilisateur vient d'avoir lieu
                    playswitch = true;
                    break;
                case 7:
                    if ((mM.i.type == "tuto" || mM.i.type == "training") && mM.c.feedback != null && mM.c.feedback.Length > 0)
                    { mM.executeAsset(mM.c.feedback, mM.playSteps,false); }
                    else { playswitch = true; }
                    break;
                case 8:
                    // Mise  jour score + stockage de la rponse
                    mM.newSystemeDeTraces.writeNewTrace_internal();
                    playswitch = true;
                    break;
                case 9:
                    // Explication
                    playswitch = true;
                    break;
                case 10: // transition le son est manquant actuellement
                    mM.executeAsset(mM.i.transition, mM.playSteps,false);
                    break;
                case 11: // transition le son est manquant actuellement
                    enditemToBeLaunched = true;
                    break;

                default: break;

            }
            mM.current_step++;
            mM.texteCheat.text += "/" + mM.current_step;
            if (enditemToBeLaunched)
            {
                playswitch = false;
                mM.endItem();
            }
        }
    }

    public void QCM_objectClicked(ChargementJSONStructure.Choix c1)
    {
        
        mM.c = c1;
        mM.playerTurn = false;

        if (mM.c.correct)
        {
            mM.scoreItem = 1;
        }
        else
        {
            mM.scoreItem = 0;
        }
        mM.user_choix = mM.c.son;
        foreach (groupemementChoixEtPrefabBoutonQCM cc in mM.list_choix_associed_with_prefabs)
        {
            Destroy(cc.boutonqcmAssocied.gameobj);
        }
        mM.list_choix_associed_with_prefabs.Clear();
        Debug.Log("object clicked");
        mM.playSteps(); // on lance le feedback
    }

}