Esempio n. 1
0
 public Brique(BriqueLevel Vie, int screenHeight, int screenWidth)
 {
     _screenHeight = screenHeight;
     _screenWidth = screenWidth;
     _Vie = Vie;
     _VieOriginelle = Vie;
     _BonusEventuel = new Bonus();
 }
Esempio n. 2
0
        public void Update(Microsoft.Xna.Framework.GameTime gameTime, Balle _Balle, Raquette _Raquette)
        {
            if (_Vie != BriqueLevel.Morte)
            {
                if (_Raquette.ListeBonus.ContainsKey(BonusType.PowerBall))
                {
                    _Balle.PowerBall = true;
                }
                else
                {
                    _Balle.PowerBall = false;
                }

                bool InvertX = false;
                bool InvertY = false;
                bool Collision = false;

                //Colision Balle Venant du haut et de gauche
                if (_Balle.Direction.Y > 0 && _Balle.Direction.X > 0)
                {
                    InvertX = false;
                    InvertY = false;
                    Collision = false;

                    //Colision a gauche
                    if(CollisionRectangleGauche.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertX = true;
                    }

                    //Colision en haut
                    if (CollisionRectangleHaut.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertY = true;
                    }

                    if (!Collision && CollisionRectangleHautGauche.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        if ((Position.X - _Balle.CenterPositionX) < (Position.Y - _Balle.CenterPositionY)) //Balle plus proche du rectangle du haut
                        {
                            Collision = true;
                            InvertY = true;
                        }
                        else //Balle plus proche du rectangle du côté
                        {
                            Collision = true;
                            InvertX = true;
                        }
                    }
                }
                //Collision Balle venant du haut et de droite
                else if (_Balle.Direction.Y > 0 && _Balle.Direction.X < 0)
                {
                    InvertX = false;
                    InvertY = false;
                    Collision = false;

                    //Colision a droite
                    if (CollisionRectangleDroite.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertX = true;
                    }

                    //Colision en haut
                    if (CollisionRectangleHaut.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertY = true;
                    }

                    if (!Collision && CollisionRectangleHautDroit.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        if ((_Balle.CenterPositionX - (Position.X + C_DEFAULT_BRIQUE_WIDTH)) < (Position.Y - _Balle.CenterPositionY)) //Balle plus proche du rectangle du haut
                        {
                            Collision = true;
                            InvertY = true;
                        }
                        else //Balle plus proche du rectangle du côté
                        {
                            Collision = true;
                            InvertX = true;
                        }
                    }
                }
                //Collision Balle venant du bas et de droite
                else if (_Balle.Direction.Y < 0 && _Balle.Direction.X < 0)
                {
                    InvertX = false;
                    InvertY = false;
                    Collision = false;

                    //Colision a droite
                    if (CollisionRectangleDroite.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertX = true;
                    }

                    //Colision en bas
                    if (CollisionRectangleBas.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertY = true;
                    }

                    if (!Collision && CollisionRectangleBasDroit.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        if ((_Balle.CenterPositionX - (Position.X + C_DEFAULT_BRIQUE_WIDTH)) < (_Balle.CenterPositionY - (Position.Y + C_DEFAULT_BRIQUE_HEIGHT))) //Balle plus proche du rectangle du bas
                        {
                            Collision = true;
                            InvertY = true;
                        }
                        else //Balle plus proche du rectangle du côté
                        {
                            Collision = true;
                            InvertX = true;
                        }
                    }
                }
                //Collision Balle venant du bas et de Gauche
                else if (_Balle.Direction.Y < 0 && _Balle.Direction.X > 0)
                {
                    InvertX = false;
                    InvertY = false;
                    Collision = false;

                    //Colision a gauche
                    if (CollisionRectangleGauche.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertX = true;
                    }

                    //Colision en bas
                    if (CollisionRectangleBas.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        Collision = true;
                        InvertY = true;
                    }

                    if (!Collision && CollisionRectangleBasGauche.Contains((int)_Balle.CenterPositionX, (int)_Balle.CenterPositionY))
                    {
                        if ((Position.X - _Balle.CenterPositionX) < (_Balle.CenterPositionY - (Position.Y + C_DEFAULT_BRIQUE_HEIGHT))) //Balle plus proche du rectangle du bas
                        {
                            Collision = true;
                            InvertY = true;
                        }
                        else //Balle plus proche du rectangle du côté
                        {
                            Collision = true;
                            InvertX = true;
                        }
                    }
                }

                if (Collision)
                {
                    if (_Raquette.ListeBonus.ContainsKey(BonusType.PowerBall))
                    {
                        _Vie = BriqueLevel.Morte;
                    }
                    else
                    {
                        if (_Vie != BriqueLevel.Incassable)
                        {
                            _Vie--;
                        }

                        _Balle.ToucheBrique(InvertX, InvertY);
                    }

                    _Raquette.UpdateScore(100);

                    if (_VieOriginelle > _Vie)
                    {
                        MustReloadContent = true;
                    }
                }

                foreach (Bullets Bullet in _Raquette.ListeBullets)
                {
                    if (CollisionRectangleBrique.Intersects(Bullet.CollisionRectangle))
                    {
                        if (_Vie != BriqueLevel.Incassable)
                        {
                            _Vie--;
                        }

                        Bullet.isObsolete = true;

                        _Raquette.UpdateScore(100);

                        if (_VieOriginelle > _Vie)
                        {
                            MustReloadContent = true;
                        }
                    }
                }

                if (_Vie == BriqueLevel.Morte)
                {
                    _Raquette.UpdateScore(500);
                }
            }
            else
            {
                if (!_BonusEventuel.isObsolete)
                {
                    _BonusEventuel.Update(gameTime, _Raquette);
                }
            }
        }