void CréerUneCourse(int nbTours, int piste) { CaméraMobile = false; //CourseActive = true; PositionUtilisateur = 1; IDVoitureUtilisateur = 0; NbTours = 1; Piste = piste; if (Piste == 0) { //Carte = new Terrain(this, 1f, Vector3.Zero, new Vector3(0, -1258 / 2f, 0), new Vector3(25600 / 2f, 1000 / 2f, 25600 / 2f), "CarteTest3", "grass", 5, INTERVALLE_MAJ_STANDARD, CaméraJeu); //Carte = new LeTerrain(this, 1f, Vector3.Zero, new Vector3(0, -1285 / 2f, 0), new Vector3(25600 / 2f, 1000 / 2f, 25600 / 2f), "CarteTest3", "DétailsTerrain2", 5, INTERVALLE_MAJ_STANDARD); Carte = new LeTerrain2(this, 1f, Vector3.Zero, new Vector3(0, -630, 0), new Vector3(25600 / 2f, 1000 / 2f, 25600 / 2f), "Canyon2", "DétailsTerrain2", 7, INTERVALLE_MAJ_STANDARD); } LaPiste = new List <Sol>(); ListeVoiture = new List <Voiture>(); Mustang = new Voiture(this, "MustangGT500SansRoue", 0.0088f, new Vector3(0, 0, 0), new Vector3(-1875, 0, 1100), INTERVALLE_MAJ_STANDARD, true, true); AI = new Voiture(this, "MustangGT500SansRoue", 0.0088f, new Vector3(0, 0, 0), new Vector3(-1915, 0, 1100), INTERVALLE_MAJ_STANDARD, false, true); ListeVoiture.Add(Mustang); ListeVoiture.Add(AI); NbVoiture = ListeVoiture.Count(); TempsÉcouléDepuisMAJ = 0; Components.Add(new Afficheur3D(this)); Components.Add(new AfficheurFPS(this, INTERVALLE_CALCUL_FPS)); Components.Add(Carte); LaCourse = new Course(this, NbTours, NbVoiture, LaPiste, ListeVoiture, CaméraJeu, INTERVALLE_MAJ_STANDARD, Piste, ModeDeJeu); LaCourse.CréationPiste(); foreach (Sol x in LaCourse.LaPiste) { Components.Add(x); } foreach (Voiture x in ListeVoiture) { Components.Add(x); } Components.Add(LaCourse); //Interface = new GUI(this, INTERVALLE_MAJ_STANDARD, "aiguille2", "speedometer3", LaCourse.NbVoiture, LaCourse.NbTours, IDVoitureUtilisateur, new Vector2(Window.ClientBounds.Width, Window.ClientBounds.Height), ModeDeJeu); //Components.Add(Interface); //Services.AddService(typeof(GUI), Interface); //Services.AddService(typeof(int), IDVoitureUtilisateur); }
void RotationCollision(Voiture voiture, bool enContact, float angleMax, bool avant) { if (enContact) { VitesseRotation = (angleMax) / 4f; } VitesseRotation -= VitesseRotation * 0.1f; if (!avant) { voiture.Rotation = new Vector3(voiture.Rotation.X, voiture.Rotation.Y - (VitesseRotation), voiture.Rotation.Z); } else { voiture.Rotation = new Vector3(voiture.Rotation.X, voiture.Rotation.Y + (VitesseRotation * 2), voiture.Rotation.Z); } }
public void GestionCollisionVoiture(Voiture voiture) { float deltaRotation = NormalizeRotation(Rotation.Y) - NormalizeRotation(voiture.Rotation.Y); if (BoxVoitureAvant.Intersects(voiture.BoxVoitureArrière)) { AvanceCollision = true; Translation = false; DernièreCollisionEstAvant = false; RotationEnCollision = (float)Math.Sin(deltaRotation) * ((float)(Math.PI / 8f) * (PixelToKMH(Vitesse) / VITESSE_MAX)); RotationCollision(voiture, true, RotationEnCollision, DernièreCollisionEstAvant); voiture.Vitesse += Vitesse * 0.5f; Vitesse -= Vitesse * 0.5f; voiture.Avance(); AvancePossible = false; if (Vitesse >= KMHtoPixel(50)) { SoundCollisionVoiture.Play(); } } else if (BoxVoitureAvant.Intersects(voiture.BoxVoitureMillieu) && !BoxVoitureAvant.Intersects(voiture.BoxVoitureArrière)) { Translation = true; if (PixelToKMH(Vitesse) >= 40.0f) { Vitesse /= 2f; } if (Vitesse > 0) { Vitesse -= KMHtoPixel(1.0f); } if (deltaRotation <= MathHelper.Pi) { if (Vitesse >= 0) { voiture.Position = new Vector3(voiture.Position.X + (1.01f * Vitesse * (float)Math.Sin(deltaRotation)), voiture.Position.Y, voiture.Position.Z - (1.01f * Vitesse * (float)Math.Cos(deltaRotation))); } } else { if (Vitesse >= 0) { voiture.Position = new Vector3(voiture.Position.X - (1.01f * Vitesse * (float)Math.Sin(deltaRotation)), voiture.Position.Y, voiture.Position.Z + (1.01f * Vitesse * (float)Math.Cos(deltaRotation))); } } if (Vitesse >= KMHtoPixel(50)) { SoundCollisionVoiture.Play(); } } else if (BoxVoitureAvant.Intersects(voiture.BoxVoitureAvant)) { AvanceCollision = false; Translation = false; DernièreCollisionEstAvant = true; RotationEnCollision = (float)Math.Sin(deltaRotation - MathHelper.Pi) * ((float)(Math.PI / -8f) * (PixelToKMH(Vitesse) / VITESSE_MAX)); RotationCollision(voiture, true, RotationEnCollision, DernièreCollisionEstAvant); voiture.Vitesse += Vitesse * -0.5f; Vitesse -= Vitesse * 0.5f; voiture.Avance(); if (Vitesse >= KMHtoPixel(50)) { SoundCollisionVoiture.Play(); } } else { AvancePossible = true; if (!Translation) { voiture.Décélération(AvanceCollision); voiture.Avance(); } } RotationCollision(voiture, false, RotationEnCollision, DernièreCollisionEstAvant); }