Example #1
0
        /// <summary>
        /// Fonction membre abstraite mettant à jour le sprite selon les touches de clavier pressées.
        /// La rotation est effectuée modulo 360 degrés.
        /// </summary>
        /// <param name="gameTime">Indique le temps écoulé depuis la dernière invocation.</param>
        /// <param name="graphics">Gestionnaire de périphérique d'affichage.</param>
        public override void Update(GameTime gameTime, GraphicsDeviceManager graphics)
        {
            // Décaler l'ennemi vers la gauche.
            this.Position = new Vector2(Position.X - (gameTime.ElapsedGameTime.Milliseconds * this.VitesseDeplacement), Position.Y);

            this.angleRotation += gameTime.ElapsedGameTime.Milliseconds * this.vitesseRotation;
            this.angleRotation %= MathHelper.Pi * 2;

            float timer = (float)gameTime.ElapsedGameTime.TotalSeconds;

            remainingDelay -= timer;

            Vector2 projectilePos = new Vector2(this.Position.X, this.Position.Y);

            if (remainingDelay <= 0)
            {
                remainingDelay = delay;

                Obus obus = new Obus(projectilePos, ProjectileType.smallFireShot, angle: this.angleRotation + MathHelper.ToRadians(35f), isEnnemi: true);
                obus.Source = this;
                this.ShootObus(obus);

                obus        = new Obus(projectilePos, ProjectileType.smallFireShot, angle: this.angleRotation - MathHelper.ToRadians(75f), isEnnemi: true);
                obus.Source = this;
                this.ShootObus(obus);

                obus        = new Obus(projectilePos, ProjectileType.smallFireShot, angle: this.angleRotation + (float)Math.PI - MathHelper.ToRadians(35f), isEnnemi: true);
                obus.Source = this;
                this.ShootObus(obus);
            }
        }
Example #2
0
 /// <summary>
 /// Déléguée pour tirer (les vaisseaux)
 /// </summary>
 /// <param name="obus">Obus en question</param>
 /// <param name="isPlayer">Est-ce-que l'obus vient du joueur</param>
 private void Shoot(Obus obus, bool isPlayer)
 {
     if (isPlayer)
     {
         listeObusJoueur.Add(obus);
     }
     else
     {
         listeObusEnnemis.Add(obus);
     }
 }
Example #3
0
        /// <summary>
        /// On charge nos variables
        /// </summary>
        public void LoadContent()
        {
            this.menuManager.LoadContent();
            this.menuManager.MenuCourant = this.menuManager.TrouverMenu("MainMenu");

            // Créer un nouveau SpriteBatch, utilisée pour dessiner les textures.
            this.spriteBatch = new SpriteBatch(this.graphics.GraphicsDevice);

            // Charger les sprites.
            JoueurSprite.LoadContent(this.GetContent(), this.graphics);
            ArrierePlanEspace.LoadContent(this.GetContent(), this.graphics);
            Obus.LoadContent(this.GetContent(), this.graphics);
            EnnemiShip.LoadContent(this.GetContent(), this.graphics);
            EnnemiSpinner.LoadContent(this.GetContent(), this.graphics);
            PowerUp_Fire_Shot.LoadContent(this.GetContent(), this.graphics);
            PowerUp_Energy_Ball.LoadContent(this.GetContent(), this.graphics);
            PowerUp_One_Projectile.LoadContent(this.GetContent(), this.graphics);
            PowerUp_Three_Projectile.LoadContent(this.GetContent(), this.graphics);
            PowerUp_Two_Projectile.LoadContent(this.GetContent(), this.graphics);

            this.policePetit = this.GetContent().Load <SpriteFont>(@"Pipeline/Polices/PoliceItem");
            this.policeGrand = this.GetContent().Load <SpriteFont>(@"Pipeline/Polices/PoliceTitre");

            // Créer les sprites du jeu. Premièrement le sprite du joueur centrer au bas de l'écran. On limite ensuite
            // ses déplacements à l'écran.
            this.vaisseauJoueur            = new JoueurSprite(this.graphics.GraphicsDevice.Viewport.Width / 8f, this.graphics.GraphicsDevice.Viewport.Height / 2f);
            this.vaisseauJoueur.BoundsRect = new Rectangle(0, 0, this.graphics.GraphicsDevice.Viewport.Width, this.graphics.GraphicsDevice.Viewport.Height);
            this.vaisseauJoueur.ShootObus += Shoot;
            this.vaisseauJoueur.NbVies     = 3;

            this.bruitageRamasser = this.GetContent().Load <SoundEffect>(@"Pipeline\SoundFX\pickup");

            // Créer ensuite les sprites représentant les arrière-plans.
            this.arrierePlanEspace = new ArrierePlanEspace(this.graphics);

            // Charger le bruitage de fond du jeu.
            this.bruitageFond = this.GetContent().Load <Song>(@"Pipeline\Songs\scifi072");

            this.mainmenuImage = this.GetContent().Load <Texture2D>(@"ArrieresPlans\mainmenu.jpg");

            // Charger les textures associées aux effets visuels gérées par Game.
            this.particulesExplosions = this.GetContent().Load <Texture2D>(@"Explosion\explosionAsteroides");
            bruitageExplosion         = this.GetContent().Load <SoundEffect>(@"Pipeline\SoundFX\explosion001");

            // Paramétrer la musique de fond et la démarrer.
            MediaPlayer.Volume      = 0.05f;    // pour mieux entendre les autres effets sonores
            MediaPlayer.IsRepeating = true;
            MediaPlayer.Play(bruitageFond);
            MediaPlayer.Pause();
        }
Example #4
0
        /// <summary>
        /// Fonction membre abstraite mettant à jour le sprite selon les touches de clavier pressées.
        /// La rotation est effectuée modulo 360 degrés.
        /// </summary>
        /// <param name="gameTime">Indique le temps écoulé depuis la dernière invocation.</param>
        /// <param name="graphics">Gestionnaire de périphérique d'affichage.</param>
        public override void Update(GameTime gameTime, GraphicsDeviceManager graphics)
        {
            // Décaler l'ennemi vers la gauche.
            this.Position = new Vector2(Position.X - (gameTime.ElapsedGameTime.Milliseconds * this.VitesseDeplacement), Position.Y);

            float timer = (float)gameTime.ElapsedGameTime.TotalSeconds;

            remainingDelay -= timer;

            Vector2 projectilePos = new Vector2(this.Position.X - (this.Width / 2), this.Position.Y);

            if (remainingDelay <= 0)
            {
                remainingDelay = delay;
                Obus obus = new Obus(projectilePos, ProjectileType.blueEnergyBall, angle: GetAngleToPlayer(this), isEnnemi: true);
                obus.Source = this;
                this.ShootObus(obus);
            }
        }
Example #5
0
        /// <summary>
        /// Fonction membre abstraite mettant à jour le sprite selon les touches de clavier pressées.
        /// Les déplacement tiennent compte de l'accélération (au début du mouvement) et de l'inertie (à
        /// la fin du mouvement).
        /// </summary>
        /// <param name="gameTime">Gestionnaire de temps de jeu.</param>
        /// <param name="graphics">Gestionnaire de périphérique d'affichage.</param>
        public override void Update(GameTime gameTime, GraphicsDeviceManager graphics)
        {
            const float FacteurAcceleration = 0.02f;     // facteur d'accélération et de décélération
            const float VitesseMaximale     = 0.4f;      // vitesse latérale et frontale maximale

            this.projectileAngle = 0f;

            float delayTimer = (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (IsRespawned)
            {
                if (this.Health != this.maxHealth)
                {
                    this.Health = this.maxHealth;
                }

                _remainingBlinkDelay -= delayTimer;
                if (_remainingBlinkDelay <= 0)
                {
                    _remainingBlinkDelay = _blinkDelay;
                    if (this.vaisseau == GameManager.invisiblePixel)
                    {
                        this.vaisseau = previousTexture;
                    }
                    else
                    {
                        previousTexture = this.vaisseau;
                        this.vaisseau   = GameManager.invisiblePixel;
                    }
                }

                _remainingInvulnDelay -= delayTimer;
                if (_remainingInvulnDelay <= 0)
                {
                    _remainingInvulnDelay = _invulnDelay;
                    IsRespawned           = false;
                }
            }

            // Changer le vaisseau affiché et ajuster sa position horizontale selon la touche pressée
            // (en tenant compte de l'accélération / décélération)
            float facteurInputs = ServiceHelper.Get <IInputService>().DeplacementDroite(this.IndexPeripherique) -
                                  ServiceHelper.Get <IInputService>().DeplacementGauche(this.IndexPeripherique);

            if (facteurInputs < 0.0f)
            {
                this.vitesseLaterale = Math.Max(this.vitesseLaterale - FacteurAcceleration, -VitesseMaximale);
            }
            else if (facteurInputs > 0.0f)
            {
                this.vitesseLaterale = Math.Min(this.vitesseLaterale + FacteurAcceleration, VitesseMaximale);
            }
            else
            {
                if (!IsRespawned)
                {
                    this.vaisseau = vaisseauAvant;
                }
                else
                {
                    this.previousTexture = vaisseauAvant;
                }

                // Décélération latérale au besoin
                if (Math.Abs(this.vitesseLaterale) >= FacteurAcceleration)
                {
                    this.vitesseLaterale -= Math.Sign(this.vitesseLaterale) * FacteurAcceleration;
                }
                else
                {
                    this.vitesseLaterale = 0.0f;
                }
            }

            // Changer la position verticale selon la touche pressée (en tenant compte de l'accélération / décélération)
            facteurInputs = ServiceHelper.Get <IInputService>().DeplacementAvant(this.IndexPeripherique) -
                            ServiceHelper.Get <IInputService>().DeplacementArriere(this.IndexPeripherique);
            if (facteurInputs > 0.0f)
            {
                if (this.vitesseLaterale >= 0.0f)
                {
                    if (!IsRespawned)
                    {
                        this.vaisseau = vaisseauGauche;
                    }
                    else
                    {
                        this.previousTexture = vaisseauGauche;
                    }
                    this.projectileAngle = -MathHelper.ToRadians(35f);
                }
                else
                {
                    if (!IsRespawned)
                    {
                        this.vaisseau = vaisseauDroite;
                    }
                    else
                    {
                        this.previousTexture = vaisseauDroite;
                    }
                    this.projectileAngle = MathHelper.ToRadians(35f);
                }

                this.vitesseFrontale = Math.Max(this.vitesseFrontale - FacteurAcceleration, -VitesseMaximale);
            }
            else if (facteurInputs < 0.0f)
            {
                if (this.vitesseLaterale >= 0.0f)
                {
                    if (!IsRespawned)
                    {
                        this.vaisseau = vaisseauDroite;
                    }
                    else
                    {
                        this.previousTexture = vaisseauDroite;
                    }
                    this.projectileAngle = MathHelper.ToRadians(35f);
                }
                else
                {
                    if (!IsRespawned)
                    {
                        this.vaisseau = vaisseauGauche;
                    }
                    else
                    {
                        this.previousTexture = vaisseauGauche;
                    }
                    this.projectileAngle = -MathHelper.ToRadians(35f);
                }

                this.vitesseFrontale = Math.Min(this.vitesseFrontale + FacteurAcceleration, VitesseMaximale);
            }
            else
            {
                if (!IsRespawned)
                {
                    this.vaisseau = vaisseauAvant;
                }
                else
                {
                    this.previousTexture = vaisseauAvant;
                }
                // Décélération frontale au besoin
                if (Math.Abs(this.vitesseFrontale) >= FacteurAcceleration)
                {
                    this.vitesseFrontale -= Math.Sign(this.vitesseFrontale) * FacteurAcceleration;
                }
                else
                {
                    this.vitesseFrontale = 0.0f;
                }
            }

            // Activer les effets sonores associés aux moteurs lorsque ceux-ci sont actifs.
            if (this.vitesseFrontale != 0.0f || this.vitesseLaterale != 0.0f)
            {
                if (this.moteursActif.State != SoundState.Playing)
                {
                    this.moteursActif.Play();
                }
            }
            else
            {
                if (this.moteursActif.State != SoundState.Paused)
                {
                    this.moteursActif.Pause();
                }
            }

            // Si l'effet sonore associé aux moteurs est actif, ajuster le volume
            // en fonction de la vitesse de réplacement (le volume est ainsi
            // relatif aux accélérations et décélérations).
            if (this.moteursActif.State == SoundState.Playing)
            {
                this.moteursActif.Volume = Math.Max(Math.Abs(this.vitesseFrontale), Math.Abs(this.vitesseLaterale)) / VitesseMaximale;
            }

            int changeProjectileCount = ServiceHelper.Get <IInputService>().SetProjectileCount(this.IndexPeripherique);

            if (changeProjectileCount != 0)
            {
                this.projectileCount = changeProjectileCount;
            }

            bool changeProjectile = ServiceHelper.Get <IInputService>().SetProjectile(this.IndexPeripherique);

            if (changeProjectile)
            {
                this.projectileType = (ProjectileType)(((int)this.projectileType + 1) % ((int)ProjectileType.blueEnergyBall + 1));
            }

            if (!this.IsRespawned && ServiceHelper.Get <IInputService>().Shoot(this.IndexPeripherique, this.projectileType))
            {
                Vector2 pos;

                if (projectileCount == 1 || projectileCount == 3)
                {
                    pos = new Vector2(this.Position.X + (this.Width / 2), this.Position.Y);
                }
                else
                {
                    pos = new Vector2(this.Position.X, this.Position.Y + this.Height / 2);
                }

                bulletShoot.Play(0.025f, 0f, 0f);

                Obus obus = new Obus(pos, this.projectileType, this.projectileAngle);
                obus.Source = this;
                this.shootObus(obus);

                if (projectileCount == 2)
                {
                    pos         = new Vector2(this.Position.X, this.Position.Y - this.Height / 2);
                    obus        = new Obus(pos, this.projectileType, this.projectileAngle);
                    obus.Source = this;
                    this.shootObus(obus);
                }
                else if (projectileCount == 3)
                {
                    pos         = new Vector2(this.Position.X, this.Position.Y + this.Height / 2);
                    obus        = new Obus(pos, this.projectileType, MathHelper.ToRadians(35f) + projectileAngle);
                    obus.Source = this;
                    this.shootObus(obus);

                    pos         = new Vector2(this.Position.X, this.Position.Y - this.Height / 2);
                    obus        = new Obus(pos, this.projectileType, -MathHelper.ToRadians(35f) + projectileAngle);
                    obus.Source = this;
                    this.shootObus(obus);
                }
            }

            // Déplacer le vaisseau en fonction des vitesses latérales et frontales
            this.Position = new Vector2(
                this.Position.X + (gameTime.ElapsedGameTime.Milliseconds * this.vitesseLaterale),
                this.Position.Y + (gameTime.ElapsedGameTime.Milliseconds * this.vitesseFrontale));
        }