/// <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); }
/// <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); }