private void newEx() { l1.Enabled = l2.Enabled = l3.Enabled = l4.Enabled = true; string r1, r2, r3, r4; Repere.Show(); Repere.Controls.Clear(); Dessin.DonnerValeur(); Dessin.DonnerChoix(Dessin.AireRectangle.ToString(), out r1, out r2, out r3, out r4); Repere.CellPaint += tableLayoutPanel1_CellPaint; l1.Text = r1; l2.Text = r2; l3.Text = r3; l4.Text = r4; Label label1 = new Label(); Label label2 = new Label(); label1.Text = (Dessin.rectangleWidth.ToString()); label1.BackColor = Color.Transparent; label2.BackColor = Color.Transparent; label2.Text = (Dessin.rectangleHeight.ToString()); Repere.Controls.Add(label1, Dessin.initColumn + 1 + (Dessin.rectangleWidth) / 2, Dessin.initRow + Dessin.rectangleHeight + 1); Repere.Controls.Add(label2, Dessin.initColumn + Dessin.rectangleWidth + 1, Dessin.initRow + 1 + (Dessin.rectangleHeight) / 2); Repere.Refresh(); }
} //PlacerPersoDansTableau /// <summary> /// Trouve un Repere (repere, teleport, etc.) qui correspond au type desire. /// Cette fonction est appelee par PlacerDansTableau (qui place le perso). /// </summary> /// <param name="typeRecherche">Le TypeRepere desire.</param> /// <returns>Retourne le premier Repere correspondant quelle trouve (ou null)</returns> private Repere TrouverUnRepere(TypeRepere typeRecherche) { Repere leRepere = null; //recherche tous les Reperes de la scene et les place dans un tableau: Repere[] lesReperes = ( Repere[] )FindObjectsOfType(typeof(Repere)); foreach (Repere unRepere in lesReperes) { if (unRepere.typeRepere == typeRecherche) //on a trouve le Repere souhaite { leRepere = unRepere; break; //arret de la boucle } //if } //foreach if (leRepere == null) { Debug.Log("Aucun Repere de type «" + typeRecherche + "» disponible."); } //if return(leRepere); } //TrouverUnRepere
} //VerifierSiCombat /// <summary> /// Place le personnage principal dans le tableau. /// Pour determiner la position, cherche d'abord une porte qui correspond a la scene en memoire. /// Si elle trouve elle utilise la position du teleport de cette porte; /// sinon, elle utilise en priorite la position d'un repere, puis la position /// d'un autre teleport, en dernier recours elle utilise le centre du tableau. /// Finalement, elle commande le changement de position du perso. /// </summary> public void PlacerPersoDansTableau() { Transform leTeleport = null; Transform unTeleportAlternatif = null; //Recherche d'un teleport du nom requis en examinant les differentes portes: foreach (Porte unePorte in FindObjectsOfType(typeof(Porte))) { if (unePorte.sceneDestination == Jeu.memNomScene) { //c'est la porte qui correspond a notre provenance if (unePorte.transform.childCount > 0) { //on assume qu'il y a un teleport leTeleport = unePorte.transform.GetChild(0); //Debug.Log("Teleport trouvé!"); } //if break; //arret immediat de la boucle } else { //ce n'est pas la porte qui correspond a notre provenance if (unePorte.transform.childCount > 0) { //on assume qu'il y a un teleport et on le note au cas ou on ne trouve pas unTeleportAlternatif = unePorte.transform.GetChild(0); } //if } //if+else } //foreach Vector2 nouvellePos; if (leTeleport != null) { //si on a trouve un teleport, c'est la position souhaitee: nouvellePos = leTeleport.position; } else { string nomNouvelleScene = SceneManager.GetActiveScene().name; //identification du nom de la scene if (Jeu.memNomScene != null) //on arrive d'une scene precedente, mais il n'y a aucune porte de retour: { Debug.Log("Attention, aucune porte ne permet de retourner à la scène " + Jeu.memNomScene + " dans la scène " + nomNouvelleScene + "."); } //(si Jeu.memNomScene est null, c'est la 1re scene du jeu) Repere unRepere = TrouverUnRepere(TypeRepere.POSITION); //Recherche d'un repere de position pour placer le perso if (unRepere != null) { //on a trouve un repere, on assume que c'est pour placer le perso Debug.Log("Le personnage est placé a la position du repère «" + unRepere.name + "»."); nouvellePos = unRepere.transform.position; } else if (unTeleportAlternatif != null) { //si on a seulement un teleport qui ne correspond pas, on l'utilise quand meme Debug.Log("Un téléport alternatif est utilisé pour placer le personnage."); nouvellePos = unTeleportAlternatif.position; } else { //en dernier recours le perso est place au centre Debug.Log("Le personnage est placé au centre."); nouvellePos = Vector2.zero; } //if+elseif+else } //if+else //Repositionnement du perso: Jeu.perso.ReplacerPosition(nouvellePos); } //PlacerPersoDansTableau