} //ChangerScene /// <summary> /// Enregistre le type de combat et change de scene. /// </summary> /// <param name="leType">Type de combat (NORMAL, CHEF, etc.)</param> public void OuvrirCombat(TypeCombat leType = TypeCombat.NORMAL) { typeCombat = leType; Debug.Log("Début d'un combat de type: «" + typeCombat + "»!"); _dialogue.AfficherBoiteDialogue(false); ChangerScene("Combat"); } //OuvrirCombat
} //acces en lecture seulement! //Constructeur: public EtapeDialogue(TypeEtape type, string texte = null, string complement = null, string complement2 = null) { _type = type; switch (type) { case TypeEtape.CHOIX_OUI_NON: case TypeEtape.REPLIQUE: _replique = texte; _nomPersoReplique = complement; break; case TypeEtape.OBJET: _nomObjet = texte; _replique = "Tu as trouvé un objet: " + texte; int.TryParse(complement, out _quantite); //si nb valide, affectation de _quantite break; case TypeEtape.VISIBILITE: _nomObjet = texte; _visible = (complement != "False")?true:false; //true par defaut _desMaintenant = (complement2 == "false")?false:true; //true par defaut break; case TypeEtape.TRANSACTION: _quantite = int.Parse(texte); if (float.IsNaN(_quantite)) { Debug.LogWarning("Erreur, la valeur demandée n'est pas valide: «" + texte + "»."); _quantite = 0; } //if break; case TypeEtape.EQUIPIER: _nomPersoReplique = texte; break; case TypeEtape.COMBAT: switch (texte) { case "normal": _typeCombat = TypeCombat.NORMAL; break; case "souschef": _typeCombat = TypeCombat.SOUS_CHEF; break; case "chef": _typeCombat = TypeCombat.CHEF; break; } break; case TypeEtape.SI_OUI: case TypeEtape.SI_NON: case TypeEtape.FIN_SI: break; default: Debug.LogWarning("Erreur, un type d'étape imprévu a été demandé: «" + type + "»."); break; } //switch } //EtapeDialogue
} //Awake void Start(){ //important: doit etre Start, car doit etre apres le Awake des Persos Perso.peutBouger = false; //arret des deplacements pendant le combat _typeCombat = Jeu.typeCombat; //permet ensuite un acces plus rapide if( _typeCombat == TypeCombat.AUCUN ){ _typeCombat = TypeCombat.NORMAL; //assignation d'un type par defaut (utile pour tests) } //Debug.Log("Start de la classe Combat. Type de combat: "+_typeCombat); for(int i = 0; i<Jeu.lesPersos.Count; i++){ Perso unPerso = Jeu.lesPersos[i]; unPerso.MettreEnEtatCombat(); Vector2 posUnPerso = ObtenirPosition(_tReperesPersos, i); unPerso.ReplacerPosition(posUnPerso); unPerso.Figer(); //pour eliminer toute possible velocite residuelle unPerso.PlacerStats(_canvasUI, posUnPerso); //ajout des points; } //for _enCours = true; CreerMonstres(); PermettreProchainChoix(); } //Start
} //Soigner /// <summary> /// Fait le grand menage et supprime l'instance Singleton du jeu. /// Doit etre executee apres la mort definitive (avant d'aller au menu ou au generique) /// Supprime les elements DontDestroyOnLoad (persos, ui, musique, etc.) /// </summary> public void SupprimerJeu() { Debug.Log("<color=green>METHODE SupprimerJeu</color>"); //detruire les persos foreach (Perso perso in Jeu.lesPersos) //chaque personnage de la liste { Destroy(perso.gameObject); //les gameobjects des personnages } //foreach Destroy(this.gameObject); //jeu _instance = null; //il y a d'autres elements a supprimer avec cette technique... Destroy(_musique.gameObject); //l'instance qui gere la musique Destroy(_canvasUI.gameObject); //l'instance du canevas (par extension infos et dialogue) //remise a neuf des variables statiques dans Jeu: _lesPersos = new List <Perso> { }; _perso = null; tableau = null; combat = null; nomJoueur = "Spero"; facteurTemps = 1; listeObjets = new List <string>(); _fortune = 0; _memNomScene = null; typeCombat = TypeCombat.AUCUN; //remise a neuf des variables statiques dans d'autres classes: Interacteur.InitialiserListeAbsences(); //cette liste statique est partagee par Objet et PNJ Perso.peutBouger = true; Debogage.InitialisationFinDePartie(); //supprime l'instance qui gere le debogage et toutes valeurs statiques Dialogue.InitialisationFinDePartie(); PNJ.dictRencontres = new Dictionary <string, uint>(); } //SupprimerJeu
} //Choisir /// <summary> /// Declenche la prochaine etape de la sequence prevue (selon son type). /// </summary> public void DeclencherEtape(){ GameObject leGameObjectCible; if(_listeSeq.Count>_iEtape){ //il reste une ou des etapes TypeEtape leType = _listeSeq[_iEtape].type; switch(leType){ case TypeEtape.REPLIQUE: //c'est un texte a afficher _champMessage.text = _listeSeq[_iEtape].replique; // si un nom est prevu, on l'affiche: if(_listeSeq[_iEtape].nomPersoReplique!=null){ //l'etape possede son propre nom: _champNom.text = _listeSeq[_iEtape].nomPersoReplique; } else { //on affiche le nom par defaut: _champNom.text = Regex.Replace(_nomEnCours, "[0-9]", ""); //on elimine les chiffres du nom } //if // Affichage du bouton suite: _boutonSuite.SetActive(true); // Masquage des autres boutons: _boutonOui.SetActive(false); _boutonNon.SetActive(false); // Selection du bouton suite (permet d'appuyer sur Espace ou Entree pour le «cliquer»): EventSystem.current.SetSelectedGameObject(_boutonSuite); //Debug.Log("FOCUS AU BTN DU DIALOGUE"); break; case TypeEtape.CHOIX_OUI_NON: //c'est un texte a afficher _champMessage.text = _listeSeq[_iEtape].replique; // si un nom est prevu, on l'affiche: if(_listeSeq[_iEtape].nomPersoReplique!=null){ //l'etape possede son propre nom: _champNom.text = _listeSeq[_iEtape].nomPersoReplique; } else { //on affiche le nom par defaut: _champNom.text = Regex.Replace(_nomEnCours, "[0-9]", ""); //on elimine les chiffres du nom } //if // Masquage du bouton suite: _boutonSuite.SetActive(false); // Affichage des autres boutons: _boutonOui.SetActive(true); _boutonNon.SetActive(true); // Selection du bouton oui (permet d'appuyer sur Espace ou Entree pour le «cliquer»): EventSystem.current.SetSelectedGameObject(_boutonOui); break; case TypeEtape.SI_OUI: if(_choixBool==false){ //on cherche _SI_NON ou _FIN_SI if(ChercherIEtape(TypeEtape.SI_NON)){ //une etape existe, on laisse la suite s'enclencher } else { if(ChercherIEtape(TypeEtape.FIN_SI)){ //c'est aussi une etape valide, on laisse la suite s'enclencher } else { EffacerTout(); //la discussion s'arretera } }//if+else } else { //on est dans une serie _SI_OUI } break; case TypeEtape.SI_NON: if(_choixBool==true){ //on cherche _FIN_SI if(ChercherIEtape(TypeEtape.FIN_SI)){ //une etape existe, on laisse la suite s'enclencher } else { EffacerTout(); //la discussion s'arretera }//if+else } else { //on est dans une serie _SI_NON } break; case TypeEtape.OBJET: Jeu.AjouterObjet(_listeSeq[_iEtape].nomObjet); Debug.Log("Ajout de l'objet suivant en inventaire: "+_listeSeq[_iEtape].nomObjet+" Jeu.listeObjets="+string.Join(", ", Jeu.listeObjets.ToArray())); // affichage de la replique d'acquisition de l'objet: _champMessage.text = _listeSeq[_iEtape].replique; // on affiche le nom de l'objet: _champNom.text = "Un objet!"; //_listeSeq[_iEtape].nomObjet; break; case TypeEtape.VISIBILITE: // il faut changer la visibilite de l'instance (peut etre un objet ou un PNJ) string nomObjet = _listeSeq[_iEtape].nomObjet; if(nomObjet==null){ leGameObjectCible = _leGameObjectDemandeur; } else { // il faut trouver le gameObject a cacher // on demande a la classe Interacteur (objets+PNJ): leGameObjectCible = Interacteur.TrouverInstance(nomObjet); } // if+else if(leGameObjectCible!=null){ if(_listeSeq[_iEtape].visible){ // le clip se montre et devient present (si desMaintenant est faux, sera effectif au prochain affichage du tableau): leGameObjectCible.GetComponent<Interacteur>().Montrer(_listeSeq[_iEtape].desMaintenant); } else { // le clip se cache et devient absent (si desMaintenant est faux, sera effectif au prochain affichage du tableau): leGameObjectCible.GetComponent<Interacteur>().Cacher(_listeSeq[_iEtape].desMaintenant); } } // if break; case TypeEtape.EQUIPIER: Jeu.instance.AjouterPerso(_listeSeq[_iEtape].nomPersoReplique); break; case TypeEtape.TRANSACTION: Jeu.fortune += _listeSeq[_iEtape].quantite; break; case TypeEtape.COMBAT: TypeCombat leTypeDuCombat = _listeSeq[_iEtape].typeCombat; Jeu.instance.OuvrirCombat(leTypeDuCombat); break; } //switch _iEtape++; if(leType!=TypeEtape.REPLIQUE && leType!=TypeEtape.CHOIX_OUI_NON){ //dans tous les autres cas, pas de clic requis, //on passe automatiquement a la prochaine etape de la sequence: DeclencherEtape(); } //if } else { AfficherBoiteDialogue(false); //on memorise le temps _memTempsFinDialogue = Time.time; } //if(_listeSeq.Count>_iEtape)+else } //DeclencherEtape
} //OuvrirCombat /// <summary> /// Efface le type de combat et revient a la scene d'origine. /// </summary> public void FermerCombat() { typeCombat = TypeCombat.AUCUN; ChangerScene(); //sans parametre = retour a la scene en memoire } //FermerCombat