Esempio n. 1
0
 private void GestionOrdres()
 {
     if (ScèneJeu.GestionInput3D.ÉtatSouris.LeftButton == ButtonState.Pressed)
     {
         Monstre cibletemp = ScèneJeu.GestionInput3D.GetSourisBoxIntercept(ScèneJeu.MonstManager.ListeMonstres);
         if (cibletemp != null)
         {
             ActionActuelle = Action.ATTAQUER;
             Vector2 vDirection = Vector2.Subtract(cibletemp.PositionCoord, PositionCoord);
             vDirection = Vector2.Normalize(vDirection);
             DébuterRotation(MathHelper.WrapAngle(vDirection.X == 0 ? MathHelper.PiOver2 * Math.Sign(-vDirection.Y) : ((float)Math.Atan(-vDirection.Y / vDirection.X) + (Math.Sign(vDirection.X) - 1) * MathHelper.Pi / 2)));
             DébuterAttaque(cibletemp);
         }
         else
         {
             Vector3 positionCible      = ScèneJeu.GestionInput3D.GetPositionSouris3d();
             Vector2 positionCoordCible = new Vector2(positionCible.X, positionCible.Z);
             if ((positionCoordCible.X != 0 || positionCoordCible.Y != 0) && (positionCoordCible.X != PositionCoord.X || positionCoordCible.Y != PositionCoord.Y))
             {
                 ActionActuelle = Action.DÉPLACER;
                 DébuterDéplacement(positionCoordCible);
             }
         }
     }
 }
Esempio n. 2
0
        public Monstre GetSourisBoxIntercept(List <Monstre> monstres)
        {
            Vector3 nearScreenPoint = new Vector3(ÉtatSouris.X, ÉtatSouris.Y, 0);
            Vector3 farScreenPoint  = new Vector3(ÉtatSouris.X, ÉtatSouris.Y, 1);
            Vector3 nearWorldPoint  = Jeu.PériphériqueGraphique.GraphicsDevice.Viewport.Unproject(nearScreenPoint, ScèneJeu.CaméraJeu.Projection, ScèneJeu.CaméraJeu.Vue, Matrix.Identity);
            Vector3 farWorldPoint   = Jeu.PériphériqueGraphique.GraphicsDevice.Viewport.Unproject(farScreenPoint, ScèneJeu.CaméraJeu.Projection, ScèneJeu.CaméraJeu.Vue, Matrix.Identity);
            Vector3 direction       = farWorldPoint - nearWorldPoint;
            Ray     raySouris       = new Ray(nearWorldPoint, direction);

            float   distancemin = float.MaxValue;
            float?  distance;
            Monstre cible = null;

            foreach (Monstre monstre in monstres)
            {
                foreach (BoundingBox box in monstre.BoxList)
                {
                    distance = raySouris.Intersects(box);
                    if (distance != null && distance < distancemin)
                    {
                        distancemin = (float)distance;
                        cible       = monstre;
                    }
                }
            }
            return(cible);
        }
Esempio n. 3
0
        public HealthBar AjouterBarreDeVie(Monstre sujet)
        {
            HealthBar tempBarre = new HealthBar(Jeu, ScèneJeu, sujet, NomHealthTexture, NomBackgroundTexture, NomFont);

            ListeDeBarres.Add(tempBarre);
            tempBarre.Initialize();
            return(tempBarre);
        }
Esempio n. 4
0
        public Monstre CréerMonstre(Héros joueur, string nomModèle, float scale, float échelleBox, Vector3 positionInitiale, Vector3 rotationInitiale, Vector3 rotationOffset,
                                    string name, float vitesseDéplacementInitiale, float vitesseRotationInitiale, bool peutBougerEnTournant, float ptsVie,
                                    int ptsDéfense, int ptsAttaque, int deltaDamage, float attackSpeed, bool isRange, float range, float aggrorange, int niveau, int id)
        {
            Monstre newMonster = new Monstre(Jeu, ScèneJeu, joueur, nomModèle, scale, échelleBox, positionInitiale, rotationInitiale, rotationOffset, name, vitesseDéplacementInitiale, vitesseRotationInitiale, peutBougerEnTournant, ptsVie, ptsDéfense, ptsAttaque, deltaDamage, attackSpeed, isRange, range, aggrorange, niveau, id);

            ListeMonstres.Add(newMonster);
            newMonster.Initialize();
            return(newMonster);
        }
Esempio n. 5
0
 public HealthBar(RPG jeu, ScèneDeJeu scenejeu, Monstre sujet, string nomhealthtex, string nombackgroundtex, string nomfont)
     : base(jeu)
 {
     Jeu              = jeu;
     ScèneJeu         = scenejeu;
     Sujet            = sujet;
     NomHealthTex     = nomhealthtex;
     NomBackgroundTex = nombackgroundtex;
     NomFont          = nomfont;
     Visible          = false;
 }
Esempio n. 6
0
 private void VérifierÉtatBarreDeVie()
 {
     if (Monstre.Equals(this, ScèneJeu.GestionInput3D.GetSourisBoxIntercept(ScèneJeu.MonstManager.ListeMonstres)))
     {
         IndicateurVie.Visible = true;
     }
     else
     {
         IndicateurVie.Visible = false;
     }
 }
Esempio n. 7
0
        public bool CheckCollisionWithOtherPeople(ÊtreVivant etre, Vector3 oldPosition, Vector3 newPosition)
        {
            bool collision = false;

            List <BoundingBox> boxList = BuildBoundingBoxesWithOffset(oldPosition, newPosition, etre.BoxList);

            foreach (Monstre m in ScèneJeu.MonstManager.ListeMonstres)
            {
                if ((IsCollision(etre, m) && !Monstre.Equals(etre, m)) && (Vector2.Distance(m.PositionCoord, new Vector2(oldPosition.X, oldPosition.Z))
                                                                           > Vector2.Distance(m.PositionCoord, new Vector2(newPosition.X, newPosition.Z))))
                {
                    collision = true;

                    break;
                }
            }

            return(collision);
        }
Esempio n. 8
0
        protected virtual void GestionAttaque()
        {
            float distance = (Cible == null) ? AggroRange : (Vector2.Distance(Cible.PositionCoord, PositionCoord));

            if (Charmed && distance > CHARM_LEASH_DISTANCE)
            {
                float   distancetemp;
                Monstre cibletemp = null;
                foreach (Monstre m in ScèneJeu.MonstManager.ListeMonstres)
                {
                    if (!Monstre.Equals(m, this))
                    {
                        distancetemp = Vector2.Distance(PositionCoord, m.PositionCoord);
                        if (distancetemp < distance)
                        {
                            distance  = distancetemp;
                            cibletemp = m;
                        }
                    }
                }
                if (cibletemp != null)
                {
                    Vector2 vDirection = Vector2.Subtract(cibletemp.PositionCoord, PositionCoord);
                    vDirection = Vector2.Normalize(vDirection);
                    DébuterRotation(MathHelper.WrapAngle(vDirection.X == 0 ? MathHelper.PiOver2 * Math.Sign(-vDirection.Y) : ((float)Math.Atan(-vDirection.Y / vDirection.X) + (Math.Sign(vDirection.X) - 1) * MathHelper.Pi / 2)));

                    DébuterAttaque(cibletemp);
                }
            }
            else
            {
                if (Vector2.Distance(PositionCoord, Joueur.PositionCoord) < AggroRange)
                {
                    Vector2 vDirection = Vector2.Subtract(Joueur.PositionCoord, PositionCoord);
                    vDirection = Vector2.Normalize(vDirection);
                    DébuterRotation(MathHelper.WrapAngle(vDirection.X == 0 ? MathHelper.PiOver2 * Math.Sign(-vDirection.Y) : ((float)Math.Atan(-vDirection.Y / vDirection.X) + (Math.Sign(vDirection.X) - 1) * MathHelper.Pi / 2)));
                    DébuterAttaque(Joueur);
                }
            }
        }
Esempio n. 9
0
        private void GestionAttaqueMagique()
        {
            if (ScèneJeu.GestionInput3D.EstNouvelleTouche(Keys.D1))
            {
                Vector3 clickSouris = ScèneJeu.GestionInput3D.GetPositionSouris3d();
                if (clickSouris != Vector3.Zero && Vector3.Distance(Position, clickSouris) <= FIREBALL_RANGE)
                {
                    if (ThrowManaSpell(FIREBALL_MANA_COST))
                    {
                        ActionActuelle = Action.ATTENDRE;
                        PositionCible  = PositionCoord;
                        Vector2 vDirection = Vector2.Subtract(new Vector2(clickSouris.X, clickSouris.Z), PositionCoord);
                        vDirection = Vector2.Normalize(vDirection);
                        DébuterRotation(MathHelper.WrapAngle(vDirection.X == 0 ? MathHelper.PiOver2 * Math.Sign(-vDirection.Y) : ((float)Math.Atan(-vDirection.Y / vDirection.X) + (Math.Sign(vDirection.X) - 1) * MathHelper.Pi / 2)));

                        ScèneJeu.ProjManager.CréerProjectile(this, clickSouris, FIREBALL_DAMAGE, FIREBALL_RANGE);
                    }
                }
            }
            if (ScèneJeu.GestionInput3D.EstNouvelleTouche(Keys.D2))
            {
                if (NovaActuel == null)
                {
                    if (ThrowManaSpell(NOVA_MANA_COST))
                    {
                        ActionActuelle = Action.ATTENDRE;
                        PositionCible  = PositionCoord;

                        NovaActuel = ScèneJeu.NovManager.AjouterNova(new Vector3(Position.X, Position.Y + NOVA_HAUTEUR, Position.Z), NOVA_RAYON, new TimeSpan(0, 0, 0, 0, NOVA_DURÉE), NOVA_DAMAGE, NomTextureNova);
                        Soundtrack.StartSoundCue("sorc_nova");
                    }
                }
                else
                {
                    if (NovaActuel.ToRemove)
                    {
                        NovaActuel = null;
                    }
                }
            }
            if (!IsSlowingProj && ScèneJeu.GestionInput3D.EstNouvelleTouche(Keys.D3) && ThrowManaSpell(SLOW_PROJ_INSTANT_MANA_COST))  // Toggle slowing proj
            {
                IsSlowingProj = true;
                ScèneJeu.HeadsUpDisplay.Spells[2].Toggled = true;
                Soundtrack.StartSoundCue("chrono_start");
            }
            else
            {
                if (IsSlowingProj)
                {
                    if (ScèneJeu.GestionInput3D.EstNouvelleTouche(Keys.D3) || !ThrowManaSpell((float)SLOW_PROJ_TIME_MANA_COST * TempsDepuisMAJ))
                    {
                        IsSlowingProj = false;
                        ScèneJeu.HeadsUpDisplay.Spells[2].Toggled = false;
                        Soundtrack.StopSound();
                    }
                }
            }
            if (IsSlowingProj && Soundtrack.IsSoundCueStopped)
            {
                Soundtrack.StartSoundCue("chrono_loop");
            }



            if (ScèneJeu.GestionInput3D.EstNouvelleTouche(Keys.D4))
            {
                if (PtsRessource >= NOVA_MANA_COST)
                {
                    Monstre cibletemp = ScèneJeu.GestionInput3D.GetSourisBoxIntercept(ScèneJeu.MonstManager.ListeMonstres);
                    if (cibletemp != null && !(cibletemp is Boss))
                    {
                        cibletemp.BecomeCharmed(CHARM_DURÉE);
                        PtsRessource  -= CHARM_MANA_COST;
                        ActionActuelle = Action.ATTENDRE;
                        PositionCible  = PositionCoord;
                        Vector2 vDirection = Vector2.Subtract(cibletemp.PositionCoord, PositionCoord);
                        vDirection = Vector2.Normalize(vDirection);
                        DébuterRotation(MathHelper.WrapAngle(vDirection.X == 0 ? MathHelper.PiOver2 * Math.Sign(-vDirection.Y) : ((float)Math.Atan(-vDirection.Y / vDirection.X) + (Math.Sign(vDirection.X) - 1) * MathHelper.Pi / 2)));
                        Soundtrack.StartSoundCue("confusion");
                    }
                }
                else
                {
                    Soundtrack.StartSoundCue("nec_moremana");
                }
            }

            // For demonstration purpposes
        }