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);
    }
Beispiel #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);
    }
Beispiel #3
0
    public override Etat Suivant()
    {
        Automate_Poursuiveur automate = base._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);
                }
                //Le gardien adverse a le souafle
                else
                {
                    res = new Etat_Poursuiveur_Marquage(automate);
                }
            }
        }

        //S'il n'a plus le ballon
        if (Souafle.Objet.transform.parent != automate.Joueur.transform)
        {
            res = new Etat_Poursuivreur_AllerVersSouafle(automate);
        }


        return(res);
    }
    public override void Action()
    {
        Automate_Poursuiveur auto = base._automate as Automate_Poursuiveur;
        Vector3 direction         = Deplacement.Direction(auto.Joueur.transform.position, Souafle.Objet.transform.position, auto.Joueur.Joueur.Vitesse);

        if (!auto.Joueur.Frappe)
        {
            auto.Joueur.Rigidbody.velocity = direction;
        }
    }
Beispiel #5
0
    public override void Action()
    {
        Automate_Poursuiveur automate = base._automate as Automate_Poursuiveur;
        Vector3 direction             = Deplacement.Direction(automate.Joueur.transform.position, _cageCible.transform.position + new Vector3(0, UnityEngine.Random.Range(12, 16), 0), (int)(automate.Joueur.Joueur.Vitesse * 0.9f));

        if (!automate.Joueur.Frappe)
        {
            automate.Joueur.Rigidbody.velocity = direction;
        }
        if (Math.Abs(Vector3.Distance(_cageCible.transform.position, automate.Joueur.transform.position)) < 35 && Souafle.Possesseur == automate.Joueur.gameObject)
        {
            JouerSon();
            Debug.Log("Tir de " + automate.Joueur.Joueur.Nom);
            Match.LeMatch.Tir(automate.Joueur.Joueur);
            Souafle.Objet.GetComponent <Souafle>().Lacher();
            Souafle.Objet.transform.GetComponent <Rigidbody>().velocity = Deplacement.Direction(automate.Joueur.transform.position, Deplacement.Cage(Match.LeMatch, automate.Joueur.Joueur.Club).transform.position, 50);
        }

        //Regarde s'il n'est pas trop proche des joueurs
        float minDist = -1;

        foreach (Player p in GameObject.FindObjectsOfType <Player>())
        {
            if (p.Joueur.Poste == Poste.POURSUIVEUR && p.Joueur.Club != automate.Joueur.Joueur.Club)
            {
                float dist = Math.Abs(Vector3.Distance(p.transform.position, automate.Joueur.transform.position));
                if (minDist == -1 || dist < minDist)
                {
                    minDist = dist;
                }
            }
        }

        //Si un joueur adverse est trop proche, alors il décide de faire une passe au joueur le plus proche
        if (minDist < 3 && minDist > 1)
        {
            float  minDistPasse = -1;
            Player cible        = null;
            foreach (Player p in GameObject.FindObjectsOfType <Player>())
            {
                if (p.Joueur.Poste == Poste.POURSUIVEUR && p != automate.Joueur && p.Joueur.Club == automate.Joueur.Joueur.Club)
                {
                    float dist = Math.Abs(Vector3.Distance(p.transform.position, automate.Joueur.transform.position));
                    if (minDistPasse == -1 || dist < minDistPasse)
                    {
                        minDistPasse = dist;
                        cible        = p;
                    }
                }
            }

            Souafle.Objet.GetComponent <Souafle>().Lacher();
            Souafle.Objet.transform.GetComponent <Rigidbody>().velocity = Deplacement.Direction(automate.Joueur.transform.position, cible.transform.position, 50);
        }
    }
    public override void Action()
    {
        Automate_Poursuiveur automate = _automate as Automate_Poursuiveur;
        Vector3 destination           = new Vector3(automate.Joueur.transform.position.x + _joueurAMarquer.transform.position.x, automate.Joueur.transform.position.y + _joueurAMarquer.transform.position.y, automate.Joueur.transform.position.z + _joueurAMarquer.transform.position.z) / 2f;
        Vector3 direction             = Deplacement.Direction(automate.Joueur.transform.position, destination, automate.Joueur.Joueur.Vitesse);

        if (!automate.Joueur.Frappe)
        {
            automate.Joueur.Rigidbody.velocity = direction;
        }
    }
Beispiel #7
0
    public Etat_Poursuiveur_SeDemarquer(IAutomate automate) : base(automate)
    {
        _destination = Vector3.zero;
        Automate_Poursuiveur ap = base._automate as Automate_Poursuiveur;

        ap.Joueur.ConvoiteSouafle = true;
        GameObject cage = Deplacement.Cages(Match.LeMatch, ap.Joueur.Joueur.Club);

        _destination.z = cage.transform.position.z / UnityEngine.Random.Range(1.5f, 2.5f);
        _destination.x = UnityEngine.Random.Range(Constantes3D.BORDURE_GAUCHE, Constantes3D.BORDURE_DROITE);
        _destination.y = UnityEngine.Random.Range(12, 16);
    }
Beispiel #8
0
    public override void Action()
    {
        Automate_Poursuiveur automate = _automate as Automate_Poursuiveur;

        if (Souafle.Possesseur != null)
        {
            Vector3 dest = new Vector3(Souafle.Possesseur.transform.position.x + _angle.x, Souafle.Possesseur.transform.position.z + _angle.y, Souafle.Possesseur.transform.position.z + _angle.z);
            if (!automate.Joueur.Frappe)
            {
                automate.Joueur.GetComponent <Rigidbody>().velocity = Deplacement.Direction(automate.Joueur.transform.position, dest, automate.Joueur.Joueur.Vitesse);
            }
        }
    }
    public Etat_Poursuiveur_Marquage(IAutomate automate) : base(automate)
    {
        Automate_Poursuiveur a = automate as Automate_Poursuiveur;

        a.Joueur.ConvoiteSouafle = true;
        //Liste les poursuiveurs adverse et en tire un au hasard
        List <Player> aMarquer = new List <Player>();

        foreach (Player p in GameObject.FindObjectsOfType <Player>())
        {
            if (p.Joueur.Poste == Poste.POURSUIVEUR && p.Joueur.Club != a.Joueur.Joueur.Club)
            {
                aMarquer.Add(p);
            }
        }
        _joueurAMarquer = aMarquer[UnityEngine.Random.Range(0, aMarquer.Count - 1)];
    }
Beispiel #10
0
    public Etat_Poursuivre_Avancer(IAutomate automate) : base(automate)
    {
        Automate_Poursuiveur auto = base._automate as Automate_Poursuiveur;

        _cageCible = Deplacement.Cages(Match.LeMatch, auto.Joueur.Joueur.Club);
    }
    public Etat_Poursuivreur_AllerVersSouafle(IAutomate automate) : base(automate)
    {
        Automate_Poursuiveur auto = automate as Automate_Poursuiveur;

        auto.Joueur.ConvoiteSouafle = true;
    }
    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);
    }