public void GenLaby() { if (materials != null) { foreach(Material m in materials) m.Dispose(); materials = null; } laby.BuildMaze(new Point(laby.Size.X, laby.Size.Y), new Vector3(laby.CellSize.X, laby.CellSize.Y, laby.CellSize.Z), Content, laby, graphics.GraphicsDevice, liste_bonus_actifs); // On charge le labyrinthe en vertices MazeMaterialBuilder materialBuilder = new MazeMaterialBuilder(); if(Config.modedejeu) materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_sortie); else materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_scientifique); materials_save = materials; // On refixe les positions du joueur et du chasseur joueur.position = laby.joueur_position_initiale; if (Config.modedejeu) chasseur.position = new Vector3(laby.chasseur_position_initiale.X / chasseur.Scale, laby.chasseur_position_initiale.Y, laby.chasseur_position_initiale.Z / chasseur.Scale); else scientifique.position = new Vector3(laby.chasseur_position_initiale.X / scientifique.Scale, laby.chasseur_position_initiale.Y, laby.chasseur_position_initiale.Z / scientifique.Scale); }
public override bool Init() { if (!Config.pause) { /**************************************/ /*** Constantes pour le labyrinthe ****/ /**************************************/ int hauteur = Config.hauteur_labyrinthe; int largeur = Config.largeur_labyrinthe; // On génére un chiffre aléatoire Random rand = new Random(); spriteBatch = new SpriteBatch(graphics.GraphicsDevice); // On charge la police du texte Kootenay = Content.Load<SpriteFont>(@"Polices\Kootenay"); Arial = Content.Load<SpriteFont>(@"Polices\Arial"); perso = Content.Load<SpriteFont>(@"Polices\Perso"); // Carte 2D carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\joueur"); carte2D_mur = Content.Load<Texture2D>(@"Images\carte2D\mur"); carte2D_chemin = Content.Load<Texture2D>(@"Images\carte2D\chemin"); carte2D_sortie = Content.Load<Texture2D>(@"Images\carte2D\sortie"); if (Config.modedejeu) { carte2D_chasseur = Content.Load<Texture2D>(@"Images\carte2D\chasseur"); carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\joueur"); } else { carte2D_chasseur = Content.Load<Texture2D>(@"Images\carte2D\joueur"); carte2D_joueur = Content.Load<Texture2D>(@"Images\carte2D\chasseur"); } carte2D_bonus = Content.Load<Texture2D>(@"Images\carte2D\bonus"); carte2D_piege = Content.Load<Texture2D>(@"Images\carte2D\piege"); // Boussole et Chronometre if (Config.modedejeu) { chronometre_texture = Content.Load<Texture2D>(@"Images\chronometre"); boussole_support = Content.Load<Texture2D>(@"Images\boussole_support"); boussole_fleche = Content.Load<Texture2D>(@"Images\boussole_fleche"); boussole_fleche_sortie = Content.Load<Texture2D>(@"Images\boussole_fleche-sortie"); } else { radar_cible = Content.Load<Texture2D>(@"Images\radar_cible"); radar_support = Content.Load<Texture2D>(@"Images\radar_support"); } // Temporisation tempo_load = Content.Load<Texture2D>(@"Images\tempo_load"); tempo_fixe = Content.Load<Texture2D>(@"Images\tempo_fixe"); effet = Content.Load<Effect>(@"Effets\Effet2"); // Audio Audio = new AudioEngine(@"Content\Musiques\ambiance.xgs"); // Charge la banque de musiques SoundBank = new SoundBank(Audio, @"Content\Musiques\Sound Bank.xsb"); WaveBank = new WaveBank(Audio, @"Content\Musiques\Wave Bank.xwb"); // Joue la musique d'ambiance musique_ambiance = SoundBank.GetCue("ambiance_labyrinthe"); // Sons if (Config.modedejeu) son_mort = "mort"; else son_mort = "mort_chasseur"; musique_ambiance.Play(); // Fixe le volume du jeu Audio.GetCategory("Musiques").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_musiques); Audio.GetCategory("Sons").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_sons); // Sons d'ambiance aléatoire son_ambiance_aleatoire = SoundBank.GetCue("son_ambiance_aleatoire"); compteur_son_ambiance_aleatoire = rand.Next(10, 30); // Son mort subite if (Config.modedejeu) son_mort_subite = SoundBank.GetCue("son_mort_subite_chasseur"); else son_mort_subite = SoundBank.GetCue("son_mort_subite_chasse"); son_mort_subite_unique = false; if (Config.modedejeu) musique_poursuite = SoundBank.GetCue("poursuite"); // On charge les textures textures = new Texture2D[8]; textures[0] = Content.Load<Texture2D>(@"Textures\texture_plafond"); textures[1] = Content.Load<Texture2D>(@"Textures\texture_mur"); textures[2] = Content.Load<Texture2D>(@"Textures\texture_mur_sortie"); textures[3] = Content.Load<Texture2D>(@"Textures\texture_fond_sortie"); textures[4] = Content.Load<Texture2D>(@"Textures\texture_sol"); textures[5] = Content.Load<Texture2D>(@"Textures\texture_mur_trappe"); textures[6] = Content.Load<Texture2D>(@"Textures\texture_sol_trappe"); textures[7] = Content.Load<Texture2D>(@"Textures\texture_sol_plafond_sortie"); noir = Content.Load<Texture2D>(@"Images\black"); transition_fin_blanc = Content.Load<Texture2D>(@"Images\blanc"); compteur_transition_debut = 2f; transition_debut_finie = false; transition_debut_messages = new string[2]; transition_debut_messages[0] = "Pret ?"; transition_debut_messages[1] = "Go !"; /***************************************************/ /***************** Initialisation ! ****************/ /***************************************************/ // Triche triche = false; pass = ""; compteur_message_triche = 0; // Liste des bonus actifs if (!Config.modedejeu) Config.boussole_sortie = false; liste_bonus_actifs = new List<int>(); liste_bonus_actifs = Liste_Bonus_Actifs(); if (liste_bonus_actifs.Count == 0) Config.active_bonus = false; // Pièges désactivés ? if (!Config.trappe && !Config.laser) Config.active_pieges = false; // Génération du labyrinthe laby = new Labyrinthe(); laby.BuildMaze(new Point(largeur, hauteur), new Vector3(2.5f), Content, laby, graphics.GraphicsDevice, liste_bonus_actifs); // On charge le labyrinthe en vertices materialBuilder = new MazeMaterialBuilder(); // On génére un chiffre aléatoire rand = new Random(); // Joueur joueur = new Joueur(graphics.GraphicsDevice.Viewport, laby, SoundBank); son_mort_unique = false; // Chasseur if (Config.modedejeu) { // IA ia = new IA(laby, new Point((int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)), graphics.GraphicsDevice.Viewport); chasseur = new Chasseur(graphics.GraphicsDevice.Viewport, laby, Content, ia); poursuite = false; compteur_animation_fin_chasseur = 1f; chasseur_touche = false; } // Scientifique else { // IA ia = new IA(laby, laby.sortie_position, graphics.GraphicsDevice.Viewport); scientifique = new Scientifique(graphics.GraphicsDevice.Viewport, laby, Content, ia); compteur_animation_fin_scientifique = 1f; scientifique_touche = false; } // Carte de sortie if (Config.modedejeu) { carte_joueur_sortie = new bool[Config.largeur_labyrinthe, Config.hauteur_labyrinthe]; GenCarteJoueurSortie(); materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_sortie); materials_save = materials; } else { carte_joueur_scientifique = new bool[Config.largeur_labyrinthe, Config.hauteur_labyrinthe]; GenCarteJoueurScientifique(); materials = materialBuilder.BuildMazeMaterial(laby, graphics.GraphicsDevice, textures, joueur.fil_ariane, carte_joueur_scientifique); materials_save = materials; } // Infos par texte InfoTexteGauche = 0; InfoTexteHaut = 40; // Constantes pour l'affichage de la carte 2D EspaceTexte = 22; EspaceTexture = carte2D_chemin.Width; TextureRedimension = 1; carte2D_taille_texture = new Vector2(carte2D_chemin.Width * TextureRedimension, carte2D_chemin.Height * TextureRedimension); BordGaucheTexture = (int)(graphics.GraphicsDevice.Viewport.Width / 2 - (carte2D_taille_texture.X * (laby.Size.X) * echelle) / 2); BordHautTexture = (int)(graphics.GraphicsDevice.Viewport.Height / 2 - (carte2D_taille_texture.Y * laby.Size.Y * echelle) / 2); carte2D_couleur_texture = Color.White; echelle = 0; while (carte2D_taille_texture.Y * echelle * laby.Size.Y < graphics.GraphicsDevice.Viewport.Height - (graphics.GraphicsDevice.Viewport.Height / 4) && carte2D_taille_texture.X * echelle * laby.Size.X < graphics.GraphicsDevice.Viewport.Height) { echelle += 0.01f; } BordGaucheTexture = (int)(graphics.GraphicsDevice.Viewport.Width / 2 - (carte2D_taille_texture.X * (laby.Size.X) * echelle) / 2); BordHautTexture = (int)(graphics.GraphicsDevice.Viewport.Height / 2 - (carte2D_taille_texture.Y * laby.Size.Y * echelle) / 2); // Pour le déplacement de la caméra nearPlane = 0.01f; farPlane = 10000.0f; fieldOfView = 60.0f; aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width / (float)graphics.GraphicsDevice.Viewport.Height; Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(fieldOfView), aspectRatio, nearPlane, farPlane); // Souris yaw = 0; pitch = 0; clavier_prec = Keyboard.GetState(); Mouse.SetPosition(graphics.GraphicsDevice.Viewport.Width / 2, graphics.GraphicsDevice.Viewport.Height / 2); souris_prec = Mouse.GetState(); // Chrono chrono = 1; chrono_meilleur_score = 0; // Bonus geler_compteur = 0; changervitesse_compteur = 0; inverser_position = false; teleportation_aleatoire = false; inversertouche_compteur = 0; inversercamera_compteur = 0; changercamera_compteur = 0; inversercamera = false; changercamera = false; affichercarte2D_compteur = 0; affichercarte2D = false; cecite = false; cecite_compteur = 0; boussole_sortie = false; boussole_sortie_compteur = 0; compteur_message_bonus = 0; compteur_total = 0; // Temporisation tempo_load_largeur = ((tempo_load.Width / 2) * graphics.GraphicsDevice.Viewport.Width) / 800; tempo_load_hauteur = ((tempo_load.Height / 2) * graphics.GraphicsDevice.Viewport.Height) / 600; tempo_fixe_largeur = graphics.GraphicsDevice.Viewport.Width; tempo_fixe_hauteur = ((tempo_fixe.Height / 1) * graphics.GraphicsDevice.Viewport.Height) / 600; ia.CaseIntersection(); //Définis les cases du labyrinthe qui sont des intersections. ia.CaseImpasse(); //Définis les cases du labyrinthe qui sont des impasses. if(Config.active_mort_subite) mortsubite = 60 * Config.min_mort_subite + Config.sec_mort_subite; facteur = 1.52196; } else { Config.pause = false; if (Config.modedejeu) { if(musique_poursuite.IsPaused) musique_poursuite.Resume(); } musique_ambiance.Resume(); } return base.Init(); }
public override void Update(GameTime gameTime) { float temps = (float)gameTime.ElapsedGameTime.TotalSeconds; Config.chrono = chronometre(chrono); clavier = Keyboard.GetState(); souris = Mouse.GetState(); Random rand = new Random(); // Transition au début du jeu if (!transition_debut_finie && compteur_transition_debut > 0) { compteur_transition_debut -= temps; if (compteur_transition_debut < 0) transition_debut_finie = true; } // Pause if (clavier.IsKeyDown(Keys.Escape) && !clavier_prec.IsKeyDown(Keys.Escape)) { Config.pause = true; if (Config.modedejeu) { if (musique_poursuite.IsPlaying) musique_poursuite.Pause(); } musique_ambiance.Pause(); graphics.GraphicsDevice.RenderState.FogEnable = false; Gestion_Ecran.Goto_Ecran("Menu Principal"); this.Shutdown(); } // Triche Triche(); if (triche && clavier.IsKeyDown(Keys.NumPad0)) { // On charge le labyrinthe en vertices MazeMaterialBuilder materialBuilder = new MazeMaterialBuilder(); } if (Config.modedejeu) { // Calcul de la distance joueur - chasseur distance_joueur_chasseur = Math.Sqrt(Math.Pow(chasseur.position.X * chasseur.Scale - joueur.position.X, 2) + Math.Pow(chasseur.position.Z * chasseur.Scale - joueur.position.Z, 2)); } else { // Calcul de la distance joueur - scientifique distance_joueur_scientifique = Math.Sqrt(Math.Pow(scientifique.position.X * scientifique.Scale - joueur.position.X, 2) + Math.Pow(scientifique.position.Z * scientifique.Scale - joueur.position.Z, 2)); } #region Fin du jeu // Gagné (trouvé la sortie) if ((Config.modedejeu && laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] == 3)) { Config.cause_fin_jeu = "Vous avez trouvé la sortie !"; Gestion_Ecran.Goto_Ecran("Succes"); this.Shutdown(); } // Le joueur touche le scientifique else if (!Config.modedejeu && (distance_joueur_scientifique < 1 || scientifique_touche)) { scientifique_touche = true; compteur_animation_fin_scientifique -= temps; if (compteur_animation_fin_scientifique < 0) { Config.cause_fin_jeu = "Vous avez trouvé le scientifique !"; Gestion_Ecran.Goto_Ecran("Succes"); this.Shutdown(); } } // Perdu (attrapé par le chasseur) if ((Config.modedejeu && distance_joueur_chasseur < 1.5 && laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] != 1) || chasseur_touche) { joueur.vivant = false; chasseur_touche = true; compteur_animation_fin_chasseur -= temps; if (compteur_animation_fin_chasseur < 0.25 && !son_mort_unique) { SoundBank.PlayCue(son_mort); son_mort_unique = true; } if (compteur_animation_fin_chasseur < 0) { chasseur_touche = false; // Screen Config.cause_fin_jeu = "Vous vous êtes fait attraper"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } } // Perdu (le scientifique a trouvé la sortie) else if (!Config.modedejeu && laby.sortie_position == scientifique.position_case_actuelle) { // Screen Config.cause_fin_jeu = "Le scientifique a réussi à s'échapper !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } // Perdu (piques) if (joueur.position.Y < laby.joueur_position_initiale.Y - laby.CellSize.Y) { SoundBank.PlayCue(son_mort); Config.cause_fin_jeu = "Vous vous êtes fait empaler !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } // Perdu (lasers) if (joueur.laser) { foreach (Pieges piege in laby.liste_pieges) { if (piege.position_case == joueur.position_case_actuelle) { if (piege.direction_laser == "NS") { if (piege.position.X + 0.5 >= joueur.position.X && joueur.position.X >= piege.position.X - 0.5) { if (piege.hauteur_laser == laby.CellSize.Y / 2 && !joueur.baisse) { SoundBank.PlayCue(son_mort); Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } else if (piege.hauteur_laser == 0.5 && !joueur.saut) { SoundBank.PlayCue(son_mort); Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } } } else { if (piege.position.Z + 0.5 + laby.CellSize.Z / 2 >= joueur.position.Z && joueur.position.Z >= piege.position.Z - 0.5 + laby.CellSize.Z / 2) { if (piege.hauteur_laser == laby.CellSize.Y / 2 && !joueur.baisse) { SoundBank.PlayCue(son_mort); Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } else if (piege.hauteur_laser == 0.5 && !joueur.saut) { SoundBank.PlayCue(son_mort); Config.cause_fin_jeu = "Vous vous êtes fait\ndécouper par un laser !"; Gestion_Ecran.Goto_Ecran("Fail"); this.Shutdown(); } } } } } } #endregion // Zoom carte 2D if (clavier.IsKeyDown(Keys.PageUp)) echelle += 0.01f; if (clavier.IsKeyDown(Keys.PageDown)) echelle -= 0.01f; // Supprime tout le labyrinthe ! if (triche && clavier.IsKeyDown(Keys.Delete)) { if (materials != null) { foreach (Material m in materials) { m.Dispose(); } materials = null; } } if (triche && clavier.IsKeyDown(Keys.T) && !clavier_prec.IsKeyDown(Keys.T)) TeleportationAleatoire(); // Déplacer les informations sur le jeu if (triche && (clavier.IsKeyDown(Keys.A))) { // Déplacement de la carte 2D if (clavier.IsKeyDown(Keys.Left)) InfoTexteGauche -= 5; if (clavier.IsKeyDown(Keys.Right)) InfoTexteGauche += 5; if (clavier.IsKeyDown(Keys.Up)) InfoTexteHaut -= 5; if (clavier.IsKeyDown(Keys.Down)) InfoTexteHaut += 5; } // Déplacer la carte de l'IA if (triche && (clavier.IsKeyDown(Keys.Tab) || clavier.IsKeyDown(Keys.I))) { // Déplacement de la carte 2D if (clavier.IsKeyDown(Keys.Left)) BordGauche -= 5; if (clavier.IsKeyDown(Keys.Right)) BordGauche += 5; if (clavier.IsKeyDown(Keys.Up)) BordHaut -= 5; if (clavier.IsKeyDown(Keys.Down)) BordHaut += 5; } // Déplacer la carte 2D if (triche && clavier.IsKeyDown(Keys.E)) { // Déplacement de la carte 2D if (clavier.IsKeyDown(Keys.Left)) BordGaucheTexture -= 5; if (clavier.IsKeyDown(Keys.Right)) BordGaucheTexture += 5; if (clavier.IsKeyDown(Keys.Up)) BordHautTexture -= 5; if (clavier.IsKeyDown(Keys.Down)) BordHautTexture += 5; } // Génére un nouveau labyrinthe if (triche && clavier.IsKeyDown(Keys.G)) GenLaby(); if (Config.modedejeu) { // Actualisation de l'IA if (chasseur.changement_de_case) if (distance_joueur_chasseur < 4.6 || !Config.laby_algo) ia.Update(joueur.position_case_actuelle, triche); else ia.UpdateChasseur(chasseur, triche, joueur); // Chasseur if (distance_joueur_chasseur > 1.5) { disapply_mortsubite = false; if (chasseur.animation != "walk7") { chasseur.skeleton_base.setAnimation("walk7"); chasseur.animation = "walk7"; } if ((triche && !clavier.IsKeyDown(Keys.P)) || !triche) chasseur.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche); } else { vitesseIA(1.52196); disapply_mortsubite = true; if (chasseur.animation != "attack3") { chasseur.skeleton_base.setAnimation("attack3"); chasseur.animation = "attack3"; } } } else { /** Scientifique **/ // Si le scientifique est bloqué if (!ia.ScienNonBloque(laby.sortie_position, scientifique.position_case_actuelle, joueur)) { ia.UpdateBis(scientifique, joueur); if (scientifique.position_case_actuelle == ia.case_eloigne && distance_joueur_scientifique >= 1 && scientifique.estpasmort) { disapply_mortsubite = true; vitesseIA(1.52196); if (scientifique.animation != "freaked_out") { scientifique.skeleton_base.setAnimation("freaked_out"); scientifique.animation = "freaked_out"; } } else if (scientifique.position_case_actuelle == ia.case_eloigne && distance_joueur_scientifique < 1) { disapply_mortsubite = true; vitesseIA(1.52196); if (scientifique.animation != "invasion_ledgefall") { scientifique.skeleton_base.setAnimation("invasion_ledgefall"); scientifique.estpasmort = false; scientifique.animation = "invasion_ledgefall"; } } else { if (distance_joueur_scientifique < 1) { disapply_mortsubite = true; vitesseIA(1.52196); if (scientifique.animation != "invasion_ledgefall") { scientifique.skeleton_base.setAnimation("invasion_ledgefall"); scientifique.estpasmort = false; scientifique.animation = "invasion_ledgefall"; } } else if ((triche && !clavier.IsKeyDown(Keys.P) || !triche) && scientifique.estpasmort) { scientifique.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche); } if (scientifique.position_case_actuelle != joueur.position_case_actuelle && scientifique.animation != "walk_normal" && scientifique.estpasmort) { disapply_mortsubite = false; scientifique.skeleton_base.setAnimation("walk_normal"); scientifique.animation = "walk_normal"; } } } //Scientifique non bloqué recherche la sortie else { if (scientifique.changement_de_case) ia.UpdateScientifique2(scientifique, laby.sortie_position); if (distance_joueur_scientifique < 1) { if (scientifique.animation != "invasion_ledgefall") { scientifique.skeleton_base.setAnimation("invasion_ledgefall"); scientifique.estpasmort = false; scientifique.animation = "invasion_ledgefall"; } } else if (((triche && !clavier.IsKeyDown(Keys.P)) || !triche) || scientifique.estpasmort) { scientifique.Update((float)gameTime.ElapsedGameTime.TotalSeconds, triche); } if (scientifique.position_case_actuelle != joueur.position_case_actuelle && scientifique.animation != "walk_normal" && scientifique.estpasmort) { scientifique.skeleton_base.setAnimation("walk_normal"); scientifique.animation = "walk_normal"; } } } // Joueur joueur.Update(graphics.GraphicsDevice.Viewport, gameTime, Content, yaw, pitch, temps, laby, triche); // Place le joueur en temps réel sur la carte 2D for (int y = 0; y < laby.Size.Y; y++) { for (int x = 0; x < laby.Size.X; x++) { if (laby.Carte[x, y] == 2) laby.Carte[x, y] = 0; } } if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] == 0) laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] = 2; // Place le chasseur en temps réel sur la carte 2D for (int y = 0; y < laby.Size.Y; y++) { for (int x = 0; x < laby.Size.X; x++) { if (laby.Carte[x, y] == 4) laby.Carte[x, y] = 0; } } if (Config.modedejeu) { if (laby.Carte[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] == 0) laby.Carte[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] = 4; } else { if (laby.Carte[(int)(scientifique.position.X * scientifique.Scale / laby.CellSize.X), (int)(scientifique.position.Z * scientifique.Scale / laby.CellSize.Z)] == 0) laby.Carte[(int)(scientifique.position.X * scientifique.Scale / laby.CellSize.X), (int)(scientifique.position.Z * scientifique.Scale / laby.CellSize.Z)] = 4; } #region Bonus /*** Bonus ***/ // Si le joueur est sur un bonus if (laby.Carte[joueur.position_case_actuelle.X, joueur.position_case_actuelle.Y] == 5 && !joueur.bonus_actif) { // On localise ce bonus pour connaître ses cordonnées dans l'espace for (int i = 0; i < laby.liste_bonus.Count; i++) { if (laby.liste_bonus[i].position_case_bonus == joueur.position_case_actuelle) { // On regarde si le joueur touche le bonus distance_bonus_joueur = Math.Sqrt(Math.Pow(laby.liste_bonus[i].position_bonus.X - joueur.position.X, 2) + Math.Pow(laby.liste_bonus[i].position_bonus.Z - joueur.position.Z, 2) + Math.Pow(laby.liste_bonus[i].position_bonus.Y - (joueur.position.Y * 0.25), 2)); if (distance_bonus_joueur <= 0.5) { SoundBank.PlayCue("bonus"); SupprimerBonus(laby.liste_bonus[i]); joueur.bonus_actif = true; } } } } // On ajoute un bonus si le joueur appui sur B if (clavier.IsKeyDown(Keys.B)) NouveauBonus(); // On supprimer tous les bonus si on appui sur Suppr if (clavier.IsKeyDown(Keys.Delete)) SupprimerTousBonus(); // Variables pour les bonus if (joueur.gel && geler_compteur < chrono) joueur.gel = false; if (joueur.vitesse != joueur.vitesse_initiale && changervitesse_compteur < chrono) joueur.vitesse = joueur.vitesse_initiale; if (joueur.inversertouches && inversertouche_compteur < chrono) joueur.inversertouches = false; if (inversercamera && inversercamera_compteur < chrono) inversercamera = false; if (changercamera && changercamera_compteur < chrono) changercamera = false; if (joueur.fil_ariane && fil_ariane_compteur < chrono) { joueur.fil_ariane = false; materials = materials_save; } if (affichercarte2D && affichercarte2D_compteur < chrono) affichercarte2D = false; if (cecite && cecite_compteur < chrono) cecite = false; else if (cecite_transparence_tmp < cecite_transparence) cecite_transparence_tmp++; if (boussole_sortie && boussole_sortie_compteur < chrono) boussole_sortie = false; if (compteur_message_bonus < 0) inverser_position = false; if (compteur_message_bonus < 0) teleportation_aleatoire = false; if (!joueur.gel && !joueur.inversertouches && !joueur.fil_ariane && (joueur.vitesse == joueur.vitesse_initiale) && !inversercamera && !changercamera && !affichercarte2D && !cecite && !boussole_sortie && !inverser_position && !teleportation_aleatoire) { joueur.bonus_actif = false; } #endregion // Chronomètre if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] != 3) chrono += (float)gameTime.ElapsedGameTime.TotalSeconds; else if (laby.Carte[(int)(joueur.position.X / laby.CellSize.X), (int)(joueur.position.Z / laby.CellSize.Z)] == 3) chrono_meilleur_score = chrono; // Audio Audio.Update(); compteur_son_ambiance_aleatoire -= temps; // Son ambiance aléatoire if (compteur_son_ambiance_aleatoire < 0) { if (son_ambiance_aleatoire.IsStopped) { son_ambiance_aleatoire.Dispose(); son_ambiance_aleatoire = SoundBank.GetCue("son_ambiance_aleatoire"); } if (son_ambiance_aleatoire.IsPrepared) son_ambiance_aleatoire.Play(); compteur_son_ambiance_aleatoire = rand.Next(10, 30); } // Son mort subite if (Config.active_mort_subite && ((chrono > Config.min_mort_subite * 60 + Config.sec_mort_subite) && !son_mort_subite_unique)) { son_mort_subite.Play(); son_mort_subite_unique = true; } // Volume du jeu if (triche) { Audio.GetCategory("Musiques").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_musiques); Audio.GetCategory("Sons").SetVolume(aMAZEing_Escape.Properties.Settings.Default.volume_sons); // Réglage du volume des musiques if (clavier.IsKeyDown(Keys.PageDown) && aMAZEing_Escape.Properties.Settings.Default.volume_musiques > 0.1f) aMAZEing_Escape.Properties.Settings.Default.volume_musiques -= 0.01f; else if (clavier.IsKeyDown(Keys.PageUp) && aMAZEing_Escape.Properties.Settings.Default.volume_musiques < 0.9f) aMAZEing_Escape.Properties.Settings.Default.volume_musiques += 0.01f; // Réglage du volume des sons if (clavier.IsKeyDown(Keys.End) && aMAZEing_Escape.Properties.Settings.Default.volume_sons > 0.1f) aMAZEing_Escape.Properties.Settings.Default.volume_sons -= 0.01f; else if (clavier.IsKeyDown(Keys.Home) && aMAZEing_Escape.Properties.Settings.Default.volume_sons < 0.9f) aMAZEing_Escape.Properties.Settings.Default.volume_sons += 0.01f; } if (Config.modedejeu) { if (musique_ambiance.IsPaused) musique_ambiance.Resume(); if (musique_poursuite.IsPaused) musique_poursuite.Resume(); if (joueur.matrice_cout[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] < ray(laby.Size) && poursuite == false && !musique_poursuite.IsPlaying) { musique_poursuite.Play(); poursuite = true; } else if (joueur.matrice_cout[(int)(chasseur.position.X * chasseur.Scale / laby.CellSize.X), (int)(chasseur.position.Z * chasseur.Scale / laby.CellSize.Z)] > ray(laby.Size) && musique_poursuite.IsPlaying) { // Stopper la musique musique_poursuite.Stop(AudioStopOptions.AsAuthored); musique_poursuite.Dispose(); musique_poursuite = SoundBank.GetCue("poursuite"); poursuite = false; } } // Changement de la caméra en fonction de la souris Vector2 position_souris = new Vector2(souris.X - souris_prec.X, souris.Y - souris_prec.Y); // pitch = rotation autour de l'axe des X | yaw = rotation autour de l'axe des Y if (inversercamera) { pitch += (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; yaw -= (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; } else { if (changercamera) { yaw -= (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; pitch += (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; } else { pitch -= (position_souris.X * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; yaw += (position_souris.Y * (aMAZEing_Escape.Properties.Settings.Default.sensibilite_souris) * temps) / 50; } } yaw = MathHelper.Clamp(yaw, MathHelper.ToRadians(-89.9f), MathHelper.ToRadians(89.9f)); Mouse.SetPosition(graphics.GraphicsDevice.Viewport.Width / 2, graphics.GraphicsDevice.Viewport.Height / 2); if (Config.modedejeu) { // Animations du chasseur chasseur.skeleton_base.update(gameTime); } else { // Animation du scientifique scientifique.skeleton_base.update(gameTime); } Vue = Matrix.CreateLookAt(joueur.position, joueur.cible, Vector3.Up); clavier_prec = Keyboard.GetState(); // On rejoue les sons stoppé if (musique_ambiance.IsPaused) musique_ambiance.Resume(); if (Config.modedejeu && musique_poursuite.IsPaused) musique_poursuite.Resume(); if (Config.active_mort_subite && (chrono >= mortsubite && !disapply_mortsubite)) if (Config.index_difficulte == 2) // dificile facteur = facteur + 0.01; else if (Config.index_difficulte == 1) // moyen facteur = facteur + 0.005; else // facile facteur = facteur + 0.001; vitesseIA(facteur); base.Update(gameTime); }