} //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
} //DeclencherEtape /// <summary> /// Cherche une etape particuliere (suite a un choix). /// Si elle trouve une etape, elle change l'index _iEtape /// </summary> /// <param name="tTypesCherches">Le type d'étape recherché</param> /// <returns>Retourne true si elle trouve, sinon retourne false.</returns> public bool ChercherIEtape(TypeEtape tTypesCherches){ for(int iTest = _iEtape; iTest < _listeSeq.Count; iTest++){ TypeEtape typeEtapeTest = _listeSeq[iTest].type; if(typeEtapeTest == tTypesCherches){ //on a trouve, c'est donc la prochaine etape a faire //par consequent il faut changer la valeur de _iEtape: _iEtape = iTest; return true; //une etape a ete trouvee } //if } //for return false; //aucune etape n'a ete trouvee } //ChercherIEtape
//------------------------------------------------------ public CResultAErreur Delete() { CResultAErreur result = CResultAErreur.True; //Suppression des liens if (TypeEtape != null && Parent != null) { //Vérifie qu'aucun autre objet ne référence ce type d'étape foreach (I2iObjetGraphique objet in Parent.Childs) { if (objet != this) { CWorkflowEtapeDessin etapeExistante = objet as CWorkflowEtapeDessin; if (etapeExistante != null && etapeExistante.IdUniverselEtape == IdUniverselEtape) { return(result); } } } result = TypeEtape.CanDelete(); if (!result) { return(result); } //Supprime les objets lien CWorkflowDessin dessin = Parent as CWorkflowDessin; if (dessin != null) { foreach (CWorkflowLienDessin lien in dessin.GetLiensEntrants(this)) { dessin.RemoveChild(lien); } foreach (CWorkflowLienDessin lien in dessin.GetLiensSortants(this)) { dessin.RemoveChild(lien); } } result = TypeEtape.Delete(true); } return(result); }
} //TesterSiOk /// <summary> /// Ajoute une etape d'interaction a la sequence. /// Assemble les elements recus dans une liste-etape, puis l'ajoute a la liste-sequence. /// Conseil: Afin de simplifier votre travail, utilisez plutot les methodes SequencerReplique, SequencerObjet, etc. /// </summary> /// <param name="type">Le type d'interaction (replique, combat, objet, etc.)</param> /// <param name="contenuA">Element de contenu (chaine optionnelle).</param> /// <param name="contenuB">Element de contenu (chaine optionnelle).</param> /// <param name="contenuC">Element de contenu (chaine optionnelle).</param> static public void Sequencer(TypeEtape type, string contenuA=null, string contenuB=null, string contenuC=null){ EtapeDialogue uneEtape = new EtapeDialogue(type, contenuA, contenuB, contenuC); _listeSeq.Add(uneEtape); } //Sequencer
} //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