Ejemplo n.º 1
0
        /// <summary>
        /// Méthode appelée pour vérifier si, avec sa position voulue, le personnage déplacé entre en collision
        /// avec un autre personnage
        /// </summary>
        /// <param name="positionVouluePersonnage"></param>
        /// <param name="indice"></param>
        /// <returns>La position du personnage qui n'est pas en collision avec un autre personnage</returns>
        public Vector3 VérifierDéplacementCollisionPersonnage(Vector3 positionVouluePersonnage, int indice)
        {
            BoundingSphere test                   = new BoundingSphere(positionVouluePersonnage, RAYON_SPHÈRE_COLLISION_PERSO);
            Vector3        anciennePosition       = PersonnageChoisi.Position;
            Vector3        positionVérifiéeFinale = positionVouluePersonnage;

            foreach (Personnage perso in _managerNetwork.JoueurLocal.Personnages)
            {
                PersonnageChoisi.GérerPositionObjet(positionVouluePersonnage);
                if (Vector3.Distance(PersonnageChoisi.Position, perso.Position) < DÉPLACEMENT_MAX)
                {
                    if (test.Intersects(perso.SphèreDeCollision))
                    {
                        if (perso != _managerNetwork.JoueurLocal.Personnages[indice])
                        {
                            positionVérifiéeFinale = anciennePosition;
                        }
                    }
                }
            }
            foreach (Personnage perso in _managerNetwork.JoueurEnnemi.Personnages)
            {
                PersonnageChoisi.GérerPositionObjet(positionVouluePersonnage);
                if (Vector3.Distance(PersonnageChoisi.Position, perso.Position) < DÉPLACEMENT_MAX)
                {
                    if (test.Intersects(perso.SphèreDeCollision))
                    {
                        positionVérifiéeFinale = anciennePosition;
                    }
                }
            }
            PersonnageChoisi.GérerPositionObjet(positionVérifiéeFinale);
            return(positionVérifiéeFinale);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Méthode qui permet de déterminer ce qui se passe lorsqu'un personnage est sélectionné ou s'il
        /// vient d'être relâché. Elle indique le déplacement restant au personnage.
        /// </summary>
        /// <param name="déplacement_maximal">Le déplacement maximal permis pour le personnage</param>
        /// <param name="indice">L'indice du personnage</param>
        /// <returns>un float qui indique le déplacement restant</returns>
        public float DéterminerMouvementPersonnageSélectionné(float déplacement_maximal, int indice)
        {
            float déplacement_restant = déplacement_maximal;

            if (PersonnageSélectionné)
            {
                if (EstAncienClicGauche())
                {
                    Vector3 positionVouluePersonnage = GetPositionSourisPlan();
                    positionVouluePersonnage = VérifierDéplacementMAX(positionVouluePersonnage, PositionInitialePersonnage, déplacement_maximal);
                    positionVouluePersonnage = VérifierDéplacementCollisionPersonnage(positionVouluePersonnage, indice);
                    _managerNetwork.SendNewPosition(positionVouluePersonnage, _managerNetwork.JoueurLocal.Personnages.FindIndex(p => p.GetType() == PersonnageChoisi.GetType()));
                }
                if (EstReleasedClicGauche())
                {
                    déplacement_restant   = déplacement_maximal - Vector3.Distance(PositionInitialePersonnage, PersonnageChoisi.Position);
                    PersonnageSélectionné = false;
                    PersonnageChoisi      = null;
                }
            }
            return(déplacement_restant);
        }