public override Etat Suivant()
    {
        Automate_Poursuiveur automate = _automate as Automate_Poursuiveur;
        Etat res = this;

        //Si le gardien à le souafle
        if (Souafle.Possesseur != null)
        {
            Player possesseur = Souafle.Possesseur.GetComponent <Player>();
            if (possesseur.Joueur.Poste == Poste.GARDIEN)
            {
                //Son gardien a le souafle
                if (possesseur.Joueur.Club == automate.Joueur.Joueur.Club)
                {
                    res = new Etat_Poursuiveur_SeDemarquerGardien(automate);
                }
            }
            if (possesseur == automate.Joueur)
            {
                res = new Etat_Poursuivre_Avancer(automate);
            }
        }
        else
        {
            if (Math.Abs(Vector3.Distance(Souafle.Objet.transform.position, automate.Joueur.transform.position)) < 15)
            {
                res = new Etat_Poursuivreur_AllerVersSouafle(automate);
            }
        }

        return(res);
    }
Esempio n. 2
0
    public override Etat Suivant()
    {
        Automate_Poursuiveur automate = _automate as Automate_Poursuiveur;
        Etat res = this;

        if (Souafle.Possesseur == null)
        {
            if (Math.Abs(Vector3.Distance(Souafle.Objet.transform.position, automate.Joueur.transform.position)) < 10)
            {
                res = new Etat_Poursuivreur_AllerVersSouafle(automate);
            }
        }
        else
        {
            Player p = Souafle.Possesseur.GetComponent <Player>();
            if (p.Joueur.Poste != Poste.GARDIEN && p.Joueur.Club == automate.Joueur.Joueur.Club)
            {
                res = new Etat_Poursuiveur_SeDemarquer(automate);
            }
            if (p == automate.Joueur)
            {
                res = new Etat_Poursuivre_Avancer(automate);
            }
        }


        return(res);
    }
    public override Etat Suivant()
    {
        Automate_Poursuiveur automate = base._automate as Automate_Poursuiveur;
        Etat res = this;

        if (Souafle.Possesseur == automate.Joueur.gameObject)
        {
            res = new Etat_Poursuivre_Avancer(automate);
        }

        //Quelqu'un d'autre à le souafle
        else if (Souafle.Possesseur != null)
        {
            Player possesseur = Souafle.Possesseur.GetComponent <Player>();
            //Il est dans son équipe
            if (possesseur.Joueur.Club == automate.Joueur.Joueur.Club)
            {
                if (UnityEngine.Random.Range(0, 1) == 0)
                {
                    res = new Etat_Poursuiveur_SeDemarquer(automate);
                }
                else
                {
                    res = new Etat_Poursuiveur_Approcher(automate);
                }
            }
            //Il n'est pas dans son équipe
            else
            {
                res = new Etat_Poursuiveur_Marquage(automate);
                if (Math.Abs(Vector3.Distance(Souafle.Objet.transform.position, automate.Joueur.transform.position)) < 5)
                {
                    res = new Etat_Poursuivreur_AllerVersSouafle(automate);
                }
            }

            if (possesseur.Joueur.Poste == Poste.GARDIEN)
            {
                //Son gardien a le souafle
                if (possesseur.Joueur.Club == automate.Joueur.Joueur.Club)
                {
                    res = new Etat_Poursuiveur_SeDemarquerGardien(automate);
                }
                //Le gardien adverse a le souafle
                else
                {
                    res = new Etat_Poursuiveur_Marquage(automate);
                }
            }
        }
        else //Pas encore de possesseur
        {
            if (Math.Abs(Vector3.Distance(automate.Joueur.transform.position, Souafle.Objet.transform.position)) > 5)
            {
                foreach (Player p in GameObject.FindObjectsOfType <Player>())
                {
                    //Si un poursuiveur de son équipe est proche du souafle, alors il se démarque préventivement
                    if (p.Joueur.Poste == Poste.POURSUIVEUR && p.Joueur.Club == automate.Joueur.Joueur.Club && Math.Abs(Vector3.Distance(p.transform.position, Souafle.Objet.transform.position)) < 5)
                    {
                        res = new Etat_Poursuiveur_SeDemarquer(automate);
                    }
                }
            }
        }


        return(res);
    }