예제 #1
0
 public void Draw(GameTime gametime, SpriteBatch g)
 {
     // g.Draw(Ressource.ImagePerso, RecAir, Color.Black);
     APJoueur.Draw(gametime, g, Position, flip);
     APAir.Draw(gametime, g, PositionAir, flipAir);
     Vie.Draw(g);
 }
예제 #2
0
        public void Update(List <OBJCollisionable> Obj)
        {
            RecPerso = new Rectangle((int)Position.X - 40, (int)Position.Y - 80, 80, 80);

            //Collision avec les obstacles
            if (Obj != null)
            {
                foreach (OBJCollisionable O in Obj)
                {
                    O.Update(this);
                }
            }

            Vie.Update(this);

            Deplacement = false;

            Position += Speed;

            #region Controle
            //Peut se déplacer si pas entrain de respirer
            if (!Respire || !Transformation)
            {
                if (KeyboardHelper.KeyHold(Keys.Up) || KeyboardHelper.KeyHold(Keys.W))
                {
                    Position.Y -= 2; RecPerso.Y -= 4; Deplacement = true;
                }
                if (KeyboardHelper.KeyHold(Keys.Down) || KeyboardHelper.KeyHold(Keys.S))
                {
                    Position.Y += 2; RecPerso.Y += 4; Deplacement = true;
                }
                if (KeyboardHelper.KeyHold(Keys.Right) || KeyboardHelper.KeyHold(Keys.D))
                {
                    Position.X += 2; RecPerso.X += 4; flip = SpriteEffects.None; Deplacement = true;
                }
                if (KeyboardHelper.KeyHold(Keys.Left) || KeyboardHelper.KeyHold(Keys.A))
                {
                    Position.X -= 2; RecPerso.X -= 4; flip = SpriteEffects.FlipHorizontally; Deplacement = true;
                }

                //Deplacement de l'air
                if (EnnemiIn)
                {
                    if (flipAir == SpriteEffects.None)
                    {
                        PositionAir.X += 3;
                    }
                    else
                    {
                        PositionAir.X -= 3;
                    }
                }
            }
            #endregion

            #region GRAVITÉ Apres les saut et roulades
            if (Gravity)
            {
                float i = 1;
                Speed.Y += 0.15f * i;
                if (Speed.Y >= 3)
                {
                    Speed.Y = 0; Gravity = false; JumpOne = false;
                }
            }
            #endregion

            #region Animation Selon les touche

            if (Deplacement)       // si en deplacement
            {
                if (!Transform)    // si n'est pas transformé
                {
                    if (!EnnemiIn) //Si l'ennemi n'est pas avalé
                    {
                        if (Respire)
                        {
                            if (RespireContinue)
                            {
                                APJoueur.PlayAnimation(AspirationContinue);
                            }
                            else
                            {
                                APJoueur.PlayAnimation(Aspiration);
                            }
                        }

                        else if (Jump)
                        {
                            APJoueur.PlayAnimation(Jumping);
                        }

                        else
                        {
                            APJoueur.PlayAnimation(Running);
                        }
                    }
                    else // Si l'ennemi est avalé
                    {
                        if (Transformation)
                        {
                            APJoueur.PlayAnimation(Transforming);
                        }

                        else if (Launch)
                        {
                            APJoueur.PlayAnimation(Lauching); APAir.PlayAnimation(AirLunch);
                        }

                        else
                        {
                            APJoueur.PlayAnimation(RunningA);
                        }
                    }
                }
                else //Si transformé
                {
                    if (Attack)
                    {
                        APJoueur.PlayAnimation(AttackT);
                    }
                    else if (Launch)
                    {
                        APJoueur.PlayAnimation(Lauching); APAir.PlayAnimation(AirLunch);
                    }
                    else
                    {
                        APJoueur.PlayAnimation(WalkingT);
                    }
                }
            }
            else
            {
                if (!Transform)    //si pas transformé
                {
                    if (!EnnemiIn) //Si l'ennemi n'est pas avalé
                    {
                        if (Respire)
                        {
                            if (RespireContinue)
                            {
                                APJoueur.PlayAnimation(AspirationContinue);
                            }
                            else
                            {
                                APJoueur.PlayAnimation(Aspiration);
                            }
                        }

                        else if (Jump)
                        {
                            APJoueur.PlayAnimation(Jumping);
                        }

                        else
                        {
                            APJoueur.PlayAnimation(Nothing);
                        }
                    }

                    else // si l'ennemi est avalé
                    {
                        if (Transformation)
                        {
                            APJoueur.PlayAnimation(Transforming);
                        }

                        else if (Launch)
                        {
                            APJoueur.PlayAnimation(Lauching); APAir.PlayAnimation(AirLunch);
                        }

                        else
                        {
                            APJoueur.PlayAnimation(NothingA);
                        }
                    }
                }

                else // si transformé
                {
                    if (Attack)
                    {
                        APJoueur.PlayAnimation(AttackT);
                    }
                    else if (Launch)
                    {
                        APJoueur.PlayAnimation(Lauching); APAir.PlayAnimation(AirLunch);
                    }
                    else
                    {
                        APJoueur.PlayAnimation(NothingT);
                    }
                }
            }
            #endregion

            //Saut Et Attack
            #region Saut/Attack
            if (KeyboardHelper.KeyHold(Keys.Space))
            {
                if (!EnnemiIn)
                {
                    Jump = true;
                }
                else
                {
                    Transformation = true;
                }

                if (Transform)
                {
                    Attack = true;
                }

                if (!JumpOne && !Transform && !Transformation)
                {
                    //Saut avec gravité
                    Gravity = true; Position.Y -= 2;
                    Speed.Y = -3;
                    JumpOne = true;
                }
            }
            #endregion

            // if (KeyboardHelper.KeyPressed(Keys.I)) { if (EnnemiIn)EnnemiIn = false; else EnnemiIn = true; }

            // Activation de l'absorption et Tir
            #region Absorption et tir

            //Absorption
            if (KeyboardHelper.KeyHold(Keys.R) && !EnnemiIn)
            {
                Respire = true;
                Jump    = false;
            }
            else
            {
                if (KeyboardHelper.KeyPressed(Keys.R))
                {
                    //Si a avalé un ennemi
                    if (EnnemiIn || Transform)
                    {
                        Launch = true;

                        //Regarde le jet d'air une fois
                        if (!Tir)
                        {
                            Tir = true;
                            if (flip == SpriteEffects.None)
                            {
                                PositionAir = new Vector2(Position.X + 40, Position.Y);
                            }
                            else
                            {
                                PositionAir = new Vector2(Position.X - 40, Position.Y);
                            }
                            flipAir = flip;
                        }
                    }
                }

                //Relachement de la respiration
                Respire         = false;
                RespireContinue = false;
            }
            #endregion

            #region Deplacement du rectangle de l'air
            if (Tir)
            {
                RecAir = new Rectangle((int)PositionAir.X, (int)PositionAir.Y, 50, 50);

                //Deplacement
                if (flipAir == SpriteEffects.None)
                {
                    PositionAir.X += 3f;
                }
                else
                {
                    PositionAir.X -= 3f;
                }
            }
            #endregion

            // Arret des animation
            #region Arret
            if (APJoueur.Animation == Jumping && APJoueur.FrameIndex == 10)
            {
                Jump = false;
            }
            if (APJoueur.Animation == Aspiration && APJoueur.FrameIndex == 2)
            {
                RespireContinue = true;
            }
            if (APJoueur.Animation == Lauching && APJoueur.FrameIndex == 2)
            {
                Launch = false; EnnemiIn = false; APAir.PlayAnimation(null); Tir = false; Transform = false; Transformation = false;
            }
            if (APJoueur.Animation == Transforming && APJoueur.FrameIndex == 4)
            {
                Transform = true; Transformation = false;
            }
            if (APJoueur.Animation == AttackT && APJoueur.FrameIndex == 8)
            {
                Attack = false;
            }
            #endregion
        }