//S'occupe de la collision des balles avec les "barrels" public void collision_barrel_balle(Projectile balle) { futur_rectangle = balle.rectangle(); bool test = true; foreach (DestructibleItems barrel in liste_barrel) //Vérifie pour chaque "barrels" { if ((test)) //Permet de casser la boucle dès qu'un "barrel" est touché { if (futur_rectangle.Intersects(barrel.Aire_barrel) && barrel.type == "barrel") //Si la HitBox du projectile est en contact avec celle du "barrel", alors (...) { balle.isVisible = false; //La balle n'existe plus barrel.isVisible = false; //Le "barrel" n'existe plus AddExplosion(new Vector2(barrel.Aire_barrel.X + 8, barrel.Aire_barrel.Y + 8), barrel.Aire_barrel.X - 16, barrel.Aire_barrel.Y - 16, 48); moteur_son.PlayExplosionEffect(); test = false; //On casse le si } } } }
public void update_projectiles(KeyboardState keyboard) { foreach (Projectile balle in liste_projectile) { balle.init = 0; } foreach (Projectile balle in liste_projectile) { while ((balle.init < balle.projectileMoveSpeed) && balle.isVisible) { balle.collision_entite_balle(liste_ia); //Collision entres balles et entité balle.collision_balle(map_physique); //Collision entre balle et mur collision_barrel_balle(balle); balle.init++; //On bouge la balle d'une case } } foreach (Player joueur in liste_joueurs) //On ajoute des balles en fonction des touches et du refroidissement { if ((joueur.tir && joueur.refroidissement >= 12 && etape1 && joueur.Ammo > 0)) { balle = new Projectile(Ressources.Projectile, (int)joueur.centre().X, (int)joueur.centre().Y, 10, joueur.Direction, 50); liste_projectile.Add(balle); joueur.refroidissement = 0; joueur.Ammo = joueur.Ammo - 1; moteur_son.PlayTire(); } joueur.refroidissement++; } liste_projectile2 = new List<Projectile>(); //On nettoie la liste, comme avec les IA foreach (Projectile balle in liste_projectile) { if (balle.isVisible) liste_projectile2.Add(balle); } liste_projectile = liste_projectile2; }