コード例 #1
0
    static public void UpdateRhino(ref List <Rhinobot> Rhinobots, Rectangle RecUpdate, GameTime gameTime, PlayerSonic Joueur,
                                   ref int RingsPosses, ref int Life, ref Shield Shield, ref Vector2 PosAnimationPlayer,
                                   ref bool AnimalActif, ref AnimationPlayer AnimationPlayer, ref List <Ring> Rings, Random RringsX,
                                   Random RringsY)
    {
        for (int rh = Rhinobots.Count - 1; rh >= 0; rh--)
        {
            if (RecUpdate.Intersects(Rhinobots[rh].RecRhino))
            {
                Rhinobots[rh].Update(gameTime, Joueur, ref RingsPosses, ref Life, ref Shield);
            }
            #region Si rh toucher
            if (Rhinobots[rh].Touched)
            {
                //si saute sur rhino
                if (Rhinobots[rh].Destroy)
                {
                    CodeExclusifSonic.ActivationAnimal(ref PosAnimationPlayer, Rhinobots[rh].Position,
                                                       ref AnimalActif, ref AnimationPlayer);
                    Rhinobots.RemoveAt(rh);
                    continue;
                }

                //si n'a pas checker pour les perte de rings
                #region Perte des rings
                if (!Rhinobots[rh].PerteRingOneCheck)
                {
                    Rhinobots[rh].PerteRingOneCheck = true;
                    CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield);
                }

                Rhinobots[rh].Touched = false;
                #endregion
            }


            #endregion
        }
    }
コード例 #2
0
    static public void UpdateSinge(ref List <SingeArticuler> Singes, Rectangle RecUpdate, GameTime gameTime, PlayerSonic Joueur,
                                   ref int RingsPosses, ref int Life, ref Shield Shield, ref Vector2 PosAnimationPlayer,
                                   ref bool AnimalActif, ref AnimationPlayer AnimationPlayer, ref List <Ring> Rings, Random RringsX,
                                   Random RringsY, ref List <ObjectMapping> TexturesObject)
    {
        for (int s = Singes.Count - 1; s >= 0; s--)
        {
            if (RecUpdate.Intersects((new Rectangle(Singes[s].RecTete.X - 100, Singes[s].RecTete.Y, Singes[s].RecTete.Width + 200, Singes[s].RecTete.Height))))
            {
                Singes[s].Update(gameTime, Joueur.RecPerso);
            }

            if (Singes[s].RecTete.Intersects(Joueur.RecPerso))
            {
                //Si saute sur singe
                if ((Joueur.HasJump || Joueur.EnBoule) && !Joueur.Injure)
                {
                    CodeExclusifSonic.ActivationAnimal(ref PosAnimationPlayer, Singes[s].PositionTete, ref AnimalActif, ref AnimationPlayer);
                    RessourceSonic3.EnnemiItem.Play();
                    TexturesObject.Add(new ObjectMapping(4, Singes[s].PositionArbre));
                    Singes.RemoveAt(s);
                    continue;
                }
            }
            //si a encore une noix
            if (Singes[s].BrasArticuler.Noix.Count != 0)
            {
                //Si noix Intersect joueur
                if (Singes[s].BrasArticuler.Noix[0].RecNoix.Intersects(Joueur.RecPerso))
                {
                    CodeExclusifSonic.PerteRing(ref RingsPosses, ref Life, ref Joueur, ref Rings, RringsY, RringsX, ref Shield);
                    Singes[s].BrasArticuler.Noix.Remove(Singes[s].BrasArticuler.Noix[0]);
                }
            }
        }
    }
コード例 #3
0
ファイル: Pic.cs プロジェクト: JonathanDechelle/Sonic3
    public void Update(PlayerSonic Joueur, ref int RingsPosses, ref List <Ring> Rings, ref int Life, ref Shield Shield)
    {
        this.RecPerso = Joueur.RecPerso;

        if (RecPerso.isOnLeftOf(RecPic))
        {
            Joueur.Speed.X = -0.5f;
        }
        else if (RecPerso.isOnRightOf(RecPic))
        {
            Joueur.Speed.X = 0.7f;
        }

        if (this.RecPerso.Intersects(RecPic) && !Joueur.Injure)
        {
            Touched              = true;
            Joueur.Injure        = true;
            Joueur.HasJump       = true;
            Joueur.Speed         = new Vector2();
            Joueur.VitesseDepart = 0;
            recCheck             = true;


            #region Regarde en fonction de si sonic a bouclier ou non
            if (Shield.num == 0)
            {
                if (RingsPosses != 0)
                {
                    RessourceSonic3.LostRing.Play();
                }
                else
                {
                    Life--; RessourceSonic3.Hurt.Play();
                }

                if (RingsPosses > 10)
                {
                    RingsPosses = 10;
                }
                CodeExclusifSonic.PerteRingPic(Position, RingsPosses, ref Rings);
                RingsPosses = 0;
            }

            else
            {
                Shield.num = 0;
                RessourceSonic3.PerteBouclier.Play();
            }
            #endregion
            #region Reaction Soni
            if (Joueur.flip == SpriteEffects.None)
            {
                Joueur.Speed.X       = -5.5f;
                Joueur.VitesseDepart = 0f;
                Joueur.Speed.Y       = -6.5f;
            }
            else
            {
                Joueur.Speed.X       = 5.5f;
                Joueur.VitesseDepart = 0f;
                Joueur.Speed.Y       = -6.5f;
            }
            #endregion
        }
        else if (!Joueur.Injure)
        {
            recCheck = false;
        }
    }
コード例 #4
0
ファイル: FireBreath.cs プロジェクト: JonathanDechelle/Sonic3
    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);
    }
コード例 #5
0
    public override void Update(GameTime gameTime)
    {
        RecUpdate = new Rectangle((int)camera.X - 400, (int)camera.Y - 249, 800, 600);


        GestionExterne.CameraControl(camera);
        GestionExterne.Menu(Menus, Joueur, camera, this);

        #region Gestion De la sauvegarde de la vie
        if (Life < SaveCheckPoint.Life)
        {
            Mort();
        }
        else
        {
            SaveCheckPoint.Life = Life;
        }
        #endregion

        if (Joueur != null && !Joueur.Enabled)
        {
            //Sortie de MAP
            if (Joueur.Position.Y > MapLimitY)
            {
                Life--;
            }

            //Pics
            GestionExterne.UpdatePics(Pics, RecUpdate, Joueur, ref RingsPosses, ref Rings, ref Life, ref Shield);

            // Apparition des animaux
            CodeExclusifSonic.Animal(AnimalActif, NumAnimal, RAnimal, ref AnimationPlayer, ref PosAnimationPlayer, camera);

            //RhinoBots
            GestionExterne.UpdateRhino(ref Rhinobots, RecUpdate, gameTime, Joueur, ref RingsPosses, ref Life, ref Shield, ref PosAnimationPlayer
                                       , ref AnimalActif, ref AnimationPlayer, ref Rings, RringsX, RringsY);

            //Singes
            GestionExterne.UpdateSinge(ref Singes, RecUpdate, gameTime, Joueur, ref RingsPosses, ref Life, ref Shield, ref PosAnimationPlayer,
                                       ref AnimalActif, ref AnimationPlayer, ref Rings, RringsX, RringsY, ref TexturesObject);


            Joueur.Update(gameTime, Obj, null, null, Shield.num);

            #region Contrainte de boss
            if (Joueur.Position.X > 8000 && MiniBoss.Count == 1 && !camera.Locked)
            {
                camera.Locked = true; MediaPlayer.Play(RessourceSonic3.MinorBoss);
            }
            #endregion
            #region Camera Update
            if (Joueur.Position.X < 90)
            {
                //si PosX <90 camera X bloque mais continue d'updater en Y
                camera.Update(new Vector2(289, Joueur.Position.Y - 200));

                //Si est a la limite de la map en X perso bloque
                if (Joueur.Position.X < -40)
                {
                    Joueur.Position.X = -40;
                }
            }

            else if (!camera.Locked)
            {
                camera.Update(new Vector2(Joueur.Position.X + 200, Joueur.Position.Y - 200));
            }
            else
            {
                //Ajustement de la camera pour l'entrée premier Boss
                if (camera.X < 8199)
                {
                    camera.X += 2;
                }

                else //Lorsque L'Ajustement est fini camera rentre en mode fixe
                {
                    camera.Update(new Vector2(8199, 544));
                }

                //Limite du personnage losque la caméra est blocké
                if (Joueur.Position.X > camera.X + 350)
                {
                    Joueur.Position.X = camera.X + 350;
                }
                if (Joueur.Position.X < camera.X - 350)
                {
                    Joueur.Position.X = camera.X - 350;
                }
            }
            #endregion

            Shield.Update(Joueur.Position, Joueur.Rebound);

            #region MiniBoss
            for (int m = MiniBoss.Count - 1; m >= 0; m--)
            {
                if (MiniBoss[m].RecMiniBoss.Intersects(RecUpdate))
                {
                    MiniBoss[m].Update(gameTime, Joueur, ref RingsPosses, ref Life, ref Rings, RringsY, RringsX, ref Shield);
                }
                if (MiniBoss[m].Finish)
                {
                    Flags.Add(new Flag(new Vector2(camera.X, MiniBoss[m].Position.Y - 200), NumPerso));
                    if (!Joueur.HasJump)
                    {
                        Flags[0].PosYMinimum = Joueur.Position.Y - 30;
                    }
                    else
                    {
                        Flags[0].PosYMinimum = Joueur.Position.Y + 27;
                    }
                    MiniBoss.RemoveAt(m);
                }
            }
            #endregion

            //Loops
            GestionExterne.UpdateLoop(Loops, RecUpdate, ref Joueur);

            //Pente
            GestionExterne.UpdatePente(Pentes, RecUpdate, ref Joueur);

            //CheckPoint
            GestionExterne.UpdateCheckPoint(CheckPoints, RecUpdate, Joueur);

            //Tremplin
            GestionExterne.UpdateTremplin(Tremplins, RecUpdate, Joueur);

            //Tele
            GestionExterne.UpdateTele(ref Teles, RecUpdate, gameTime, Joueur, ref Life, ref RingsPosses, ref Shield);

            //Rings
            GestionExterne.UpdateRing(ref RingsPosses, ref Life, RecUpdate, ref Rings, Joueur, gameTime);

            #region Update Back et HUD
            PosBack = new Vector2(camera.X - 400, camera.Y - 250);
            PosHUD  = new Vector2(PosBack.X + 450, PosBack.Y + 250);
            Hud.Update(RingsPosses, Life, PosHUD);
            #endregion
        }
        else //Gestion de la mort
        {
            GestionExterne.AnimationMort(Menus, FinNiveau, ref APDead, Death, ref APDeadpos, APDeadPosInit, this);
        }


        #region Flags
        for (int F = Flags.Count - 1; F >= 0; F--)
        {
            Flags[F].Update(gameTime, Joueur);
            if (Flags[F].Texte)
            {
                if (NumPerso == 1)
                {
                    TexteFin.Add(new TexteFinAnim(true, new Vector2(8100, 380), 1));
                }
                else
                {
                    TexteFin.Add(new TexteFinAnim(false, new Vector2(8100, 380), 1));
                }
                Flags[F].Texte          = false;
                MediaPlayer.IsRepeating = false;
                MediaPlayer.Play(RessourceSonic3.LevelComplete);
                Joueur.Enabled = true;
                FinNiveau      = true;
            }
            if (Flags[F].Stop)
            {
                TexteFin[0].Update(gameTime);

                if (TexteFin[0].Delete)
                {
                    Flags.RemoveAt(F);
                    TexteFin.RemoveAt(0);
                    Joueur.Enabled = false;
                    FinNiveau      = false;
                    camera.Locked  = false;

                    /*AddScreen(new cTransition1(serviceProvider, GraphicsDeviceManager, NumPerso));
                     * RemoveScreen(this);*/
                }
            }
        }
        #endregion
    }