Exemplo n.º 1
0
    public void Draw(SpriteBatch g, GameTime gametime)
    {
        if (!Destroy)
        {
            g.Draw(Texture, Position, null, Color.White, 0, new Vector2(), 1, flip, 0);
            BulletAnimationPlayer.Draw(gametime, g, BulletPos, flip);
        }

        TouchAnimationPlayer.Draw(gametime, g, new Vector2(Position.X + 80, Position.Y + 172), flip);
        if (!Destroy)
        {
            FireAnimationPlayer.Draw(gametime, g, new Vector2(Position.X + 80, Position.Y + 172), flip);
        }

        // g.Draw(RessourceSonic3.Test, RecBullet, Color.Red);
    }
Exemplo n.º 2
0
    public void Update(GameTime gametime, PlayerSonic Joueur, ref int RingsPosses, ref int Life, ref List <Ring> Rings, Random RringsY, Random RringsX, ref Shield Shield)
    {
        #region Transfo recPerso
        RecPersoModif = new Rectangle(Joueur.RecPerso.X + 20, Joueur.RecPerso.Y, Joueur.RecPerso.Width / 4, Joueur.RecPerso.Height);
        //si se baisse evite le missile
        if (Joueur.bCrouch || Joueur.EnBoule)
        {
            RecPersoModif.Y += 40;
        }
        #endregion
        #region deplacement
        if (!Destroy)
        {
            if (!Stabiliser)//Si n'est pas statique
            {
                BulletAnimationPlayer.PlayAnimation(null);
                BulletTouchSonic   = false;
                SoundCheck         = false;
                RecBullet.Location = new Point(-300, 0);

                if (flip == SpriteEffects.None)
                {
                    BulletPos = new Vector2(Position.X, Position.Y + 180);
                }
                else
                {
                    BulletPos = new Vector2(Position.X + 170, Position.Y + 180);
                }

                if (!GDDeplacement)//Si ne va pas de droite a gauche
                {
                    if (Descente)
                    {
                        Position.Y += Vitesse;
                    }
                    else
                    {
                        Position.Y -= Vitesse;
                    }
                }
                else
                {
                    if (!DeplaceDroite)
                    {
                        Position.X -= Vitesse;
                    }
                    else
                    {
                        Position.X += Vitesse;
                    }

                    Oscillation();
                }
            }
            else
            {
                if (!Descente)
                {
                    if (!BulletTouchSonic)
                    {
                        BulletAnimationPlayer.PlayAnimation(FireBullet);
                    }

                    if (!SoundCheck)
                    {
                        RessourceSonic3.FireBullet.Play();
                        SoundCheck = true;
                    }

                    if (flip == SpriteEffects.None)
                    {
                        if (!BulletTouchSonic)
                        {
                            BulletPos.X -= 5;
                            RecBullet    = new Rectangle((int)BulletPos.X - 70, (int)BulletPos.Y - 100,
                                                         RessourceSonic3.MB1FireBullet.Width / 6,
                                                         RessourceSonic3.MB1FireBullet.Height / 3);
                        }
                    }
                    else
                    {
                        if (!BulletTouchSonic)
                        {
                            BulletPos.X += 5;
                            RecBullet    = new Rectangle((int)BulletPos.X, (int)BulletPos.Y - 100,
                                                         RessourceSonic3.MB1FireBullet.Width / 6,
                                                         RessourceSonic3.MB1FireBullet.Height / 3);
                        }
                    }
                }
                Oscillation();
            }
        }
        #region Limite
        if (!GDDeplacement) // si ne vas pas de droite a gauche
        {
            if (Position.Y > PositionInit.Y + 250)
            {
                Descente   = false;
                Stabiliser = true;

                if (!OscillCheck)
                {
                    PositionOscillation = Position;
                    OscillCheck         = true;
                }
            }
            else if (Position.Y <= PositionInit.Y)
            {
                Descente   = true;
                Stabiliser = true;

                if (!OscillCheck)
                {
                    PositionOscillation = Position;
                    OscillCheck         = true;
                }
            }
        }
        else
        {
            if (!Stabiliser)//si n'est pas stable
            {
                if (Position.X < PositionInit.X - 550)
                {
                    GDDeplacement = false; Stabiliser = true; DeplaceDroite = true;
                    NbFoisStabiliser--; flipCheck = false;
                }

                else if (Position.X > PositionInit.X)
                {
                    GDDeplacement = false; Stabiliser = true; DeplaceDroite = false;
                    NbFoisStabiliser--; flipCheck = false;
                }

                else if ((Position.X < PositionInit.X - 260 && Position.X > PositionInit.X - 280) && !flipCheck)
                {
                    if (flip == SpriteEffects.None)
                    {
                        flip = SpriteEffects.FlipHorizontally;
                    }
                    else
                    {
                        flip = SpriteEffects.None;
                    }
                    flipCheck = true;
                }
            }
        }
        #endregion
        if (Stabiliser)//Arret de 5 secondes environs
        {
            CompteurStabilisateur += (float)gametime.ElapsedGameTime.TotalSeconds;

            if (CompteurStabilisateur >= VitesseStabiliser)
            {
                CompteurStabilisateur = 0;
                if (OscillCheck)
                {
                    Position = PositionOscillation;
                }
                OscillCheck = false;
                Stabiliser  = false;
                NbFoisStabiliser++;
            }

            //Deplacement gaucheDroite
            if (NbFoisStabiliser == 2)
            {
                NbFoisStabiliser = 0;
                if (Position.Y <= PositionInit.Y)
                {
                    GDDeplacement = true;
                }
            }
        }
        #endregion

        if (NbFoisTouche == 7 && TouchAnimationPlayer.FrameIndex == 6)
        {
            Finish = true;
        }

        if (NbFoisTouche == 6)
        {
            AttenteDeDestruction += (float)gametime.ElapsedGameTime.TotalSeconds;
            Destroy = true;
            if (AttenteDeDestruction > 3)
            {
                TouchAnimationPlayer.PlayAnimation(MiniBossDes);
                RessourceSonic3.MiniBossKill.Play();
                NbFoisTouche++;
            }
        }

        if (!Destroy)
        {
            if (!Joueur.Injure)
            {
                #region intersection RecMiniBoss/RecPerso
                //Si touche Au miniBoss
                if (RecMiniBoss.Intersects(RecPersoModif))
                {
                    //Si miniboss Toucher
                    if (!TouchCheck)
                    {
                        //si la vitesse joueur x est plus petite que 6 (sinon
                        // sonic rebondit trop loin
                        if (Math.Abs(Joueur.Speed.X) < 5)
                        {
                            Joueur.Speed.X = -Joueur.Speed.X * 1.3f;
                        }
                        else
                        {
                            Joueur.Speed.X = -Joueur.Speed.X * 0.60f;
                        }

                        Joueur.Speed.Y = -5;
                        TouchCheck     = true;
                        RessourceSonic3.TouchBoss.Play();
                        NbFoisTouche++;
                    }
                }

                if (TouchCheck)
                {
                    TouchAnimationPlayer.PlayAnimation(TouchAnimation);
                    CompteurTouch += (float)gametime.ElapsedGameTime.TotalSeconds;

                    if (CompteurTouch >= VitesseStabiliser / 2)
                    {
                        TouchCheck = false; TouchAnimationPlayer.PlayAnimation(null); CompteurTouch = 0;
                    }
                }
                #endregion
                #region Intersection RecFusee/RecPerso
                else if (RecFusee.Intersects(RecPersoModif))
                {
                    if (!TouchFuseeCheck)
                    {
                        CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield);
                        TouchFuseeCheck = true;
                    }
                }
                #endregion
                TouchFuseeCheck = false;
                #region Intersection RecBullet/RecPerso
                if (RecBullet.Intersects(RecPersoModif))
                {
                    BulletTouchSonic = true;
                    if (BulletTouchSonic)
                    {
                        BulletAnimationPlayer.PlayAnimation(null);
                        RecBullet.Location = new Point(-300, 0);
                        CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield);
                    }
                }
                #endregion
            }
        }
        RecMiniBoss = new Rectangle((int)Position.X, (int)Position.Y, Texture.Width, Texture.Height / 4 * 3);
        RecFusee    = new Rectangle((int)Position.X, (int)Position.Y + 120, Texture.Width, Texture.Height / 4);

        FireAnimationPlayer.PlayAnimation(FireAnimation);
    }