Example #1
0
    public override void OnUpdate()
    {
        Order.TYPE_POSITION typePosition = o.target.Team.PositionInMap(o.target);
        switch (typePosition)
        {
        case Order.TYPE_POSITION.EXTRA_LEFT:
        {
            PositionExtraLeftSide();
            break;
        }

        case Order.TYPE_POSITION.LEFT:
        {
            PositionLeftSide();
            break;
        }

        case Order.TYPE_POSITION.RIGHT:
        {
            PositionRightSide();
            break;
        }

        case Order.TYPE_POSITION.EXTRA_RIGHT:
        {
            PositionExtraRightSide();
            break;
        }

        case Order.TYPE_POSITION.MIDDLE_LEFT:
        case Order.TYPE_POSITION.MIDDLE_RIGHT:
        case Order.TYPE_POSITION.MIDDLE:
        {
            PositionMiddleSide();
            break;
        }

        default: break;
        }
    }
Example #2
0
 /*
  * Cette fonction me retourne le nombre de zone d'écart entre deux positions d'objets.
  * Si le retour est négatif, alors "other" est à gauche de "referent"
  * Si le retour est positif, alors "other" est à droite de "referent"
  **/
 public int compareZoneInMap(Order.TYPE_POSITION referent, Order.TYPE_POSITION other)
 {
     return((int)referent - (int)other);
 }
Example #3
0
    void UpdateOffensivePlacement()
    {
        if (this == this.team.Player.Controlled || this.game.Ball.NextOwner || replacement)
        {
            return;
        }

        //Variables
        Vector3 pos     = this.transform.position;
        Vector3 oldPos  = pos;
        float   distZ   = Mathf.Abs(this.team.Player.Controlled.transform.position.z - this.transform.position.z);     //distance entre moi et le controllé
        float   distX   = 0f;
        int     offsetZ = Mathf.RoundToInt(this.oTS.dMaxControlledOffensive - this.oTS.dMinControlledOffensive);
        int     offsetX = Mathf.RoundToInt(this.oTS.dMaxOffensivePlayer - this.oTS.dMinOffensivePlayer);

        Order.TYPE_POSITION typePosControlled = this.Team.Player.Controlled.PositionInMap();
        Order.TYPE_POSITION typePosThis       = this.PositionInMap();
        //int diffPos = Mathf.Abs(this.game.compareZoneInMap(typePosControlled, typePosThis));

        //si je suis dans la même zone que le controllé et que je ne suis pas en train de changer de coté
        if (this.game.compareZoneInMap(typePosControlled, typePosThis) == 0 && !invariantMove)
        {
            //si un joueur est déjà à gauche du controllé je vais à droite
            foreach (Unit u in this.team)
            {
                // alors u est à gauche du controllé
                if (u != this && u != this.team.Player.Controlled && u.typeOfPlayer == TYPEOFPLAYER.OFFENSIVE && u.transform.position.x < this.team.Player.Controlled.transform.position.x)
                {
                    //je bouge à droite
                    pos.x = this.team.Player.Controlled.transform.position.x + (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX));
                    break;
                }
            }
            //personne à gauche, donc je go à gauche
            if (oldPos.x == pos.x)
            {
                pos.x = this.team.Player.Controlled.transform.position.x - (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX));
            }
            //Debug.Log("SAME COL THAN CONTROLLED");
            this.Order = Order.OrderMove(pos);
            oldPos     = pos;
        }
        //si le controlé est sur mon coté de terrain
        else if ((typePosThis == Order.TYPE_POSITION.EXTRA_LEFT && typePosControlled <= Order.TYPE_POSITION.LEFT) ||
                 (typePosThis == Order.TYPE_POSITION.EXTRA_RIGHT && typePosControlled >= Order.TYPE_POSITION.RIGHT))
        {
            //alors je bouge de l'autre coté
            if (typePosThis == Order.TYPE_POSITION.EXTRA_LEFT || typePosThis == Order.TYPE_POSITION.LEFT || typePosThis == Order.TYPE_POSITION.MIDDLE_LEFT)
            {
                pos.x = this.team.Player.Controlled.transform.position.x + (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX));
            }
            else
            {
                pos.x = this.team.Player.Controlled.transform.position.x - (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX));
            }
            //je deviens l'attaquant le plus proche du controllé
            invariantMove = true;

            if (oldPos.x != pos.x)
            {
                this.Order = Order.OrderMove(pos);
                //Debug.Log("CHANGE FORMATION");
                oldPos = pos;
            }
        }
        else if (typePosControlled >= Order.TYPE_POSITION.MIDDLE_LEFT && typePosControlled <= Order.TYPE_POSITION.MIDDLE_RIGHT)
        {
            if (invariantMove)
            {
                invariantMove = false;
            }
        }

        //Contrainte sur X
        if (!invariantMove)
        {
            foreach (Unit u in this.team)
            {
                //que les attaquants
                if (u != this && u.typeOfPlayer == TYPEOFPLAYER.OFFENSIVE && u != this.team.Player.Controlled)
                {
                    //si u est invariant utiliser sa position comme repère et non le controllé
                    if (u.transform.position.x < this.team.Player.Controlled.transform.position.x)
                    {
                        pos.x = (u.invariantMove ? u.transform.position.x - (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX)) :
                                 this.team.Player.Controlled.transform.position.x + (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX)));
                    }
                    else
                    {
                        pos.x = (u.invariantMove ? u.transform.position.x + (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX)) :
                                 this.team.Player.Controlled.transform.position.x - (this.oTS.dMinOffensivePlayer + this.game.rand.Next(offsetX)));
                    }
                    oldPos = pos;
                    distX  = Mathf.Abs((u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) - pos.x);

                    if (distX > this.oTS.dMaxOffensivePlayer)
                    {
                        //Debug.Log("CONSTRAINT ON X > dMAX");
                        if ((u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) > this.transform.position.x)
                        {
                            pos.x = (u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) -
                                    (this.game.settings.Global.Team.dMaxOffensivePlayer + this.game.rand.Next(offsetX));
                        }
                        else
                        {
                            pos.x = (u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) +
                                    (this.game.settings.Global.Team.dMaxOffensivePlayer + this.game.rand.Next(offsetX));
                        }
                    }
                    else if (distX < this.oTS.dMinOffensivePlayer)
                    {
                        //Debug.Log("CONSTRAINT ON X < dMIN");
                        if ((u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) > this.transform.position.x)
                        {
                            pos.x = (u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) -
                                    (this.game.settings.Global.Team.dMinOffensivePlayer + this.game.rand.Next(offsetX));
                        }
                        else
                        {
                            pos.x = (u.invariantMove ? u.transform.position.x : this.team.Player.Controlled.transform.position.x) +
                                    (this.game.settings.Global.Team.dMinOffensivePlayer + this.game.rand.Next(offsetX));
                        }
                    }
                    //Comportement normal
                    else
                    {
                    }
                }
            }

            if (pos.x != oldPos.x)
            {
                //je bouge
                ////Debug.Log("second orderMove " + this + " bouge a la position : " + pos + " ancienne position : " + oldPos);
                //Debug.Log("CONSTRAINT ON X");
                this.Order = Order.OrderMove(pos);
                oldPos     = pos;
            }
        }

        //Contrainte sur Z ave le controllé
        if (distZ > this.oTS.dMaxControlledOffensive)
        {
            ////Debug.Log("too far : pos controllé : " + this.Team.Player.Controlled.transform.position.z + " autre pos : " + this.transform.position.z);
            if (this.team == this.game.southTeam)
            {
                pos.z = this.team.Player.Controlled.transform.position.z - (this.oTS.dMinControlledOffensive + this.game.rand.Next(offsetZ));
            }
            else
            {
                pos.z = this.team.Player.Controlled.transform.position.z + (this.oTS.dMinControlledOffensive + this.game.rand.Next(offsetZ));
            }
        }
        else if (distZ < this.oTS.dMinControlledOffensive)
        {
            ////Debug.Log("too near : " + this);
            if (this.team == this.game.southTeam)
            {
                pos.z = this.team.Player.Controlled.transform.position.z - (this.oTS.dMaxControlledOffensive - this.game.rand.Next(offsetZ));
            }
            else
            {
                pos.z = this.team.Player.Controlled.transform.position.z + (this.oTS.dMaxControlledOffensive - this.game.rand.Next(offsetZ));
            }
        }
        if (pos.z != oldPos.z)
        {
            //Debug.Log("CONSTRAINT ON Z");
            this.Order = Order.OrderMove(pos);
        }
    }
Example #4
0
    void UpdateDefensePlacement()
    {
        //Check si je suis le destinataire d'une passe ou si je me replace
        if (this.game.Ball.NextOwner || replacement)
        {
            return;
        }

        //Variables
        Vector3 pos     = this.transform.position;
        Vector3 oldPos  = pos;
        float   distZ   = Mathf.Abs(this.Team.Player.Controlled.transform.position.z - this.transform.position.z);     //distance entre moi et le controllé
        float   distX   = 0f;
        int     offsetZ = Mathf.RoundToInt(this.oTS.dMaxControlledDefense - this.oTS.dMinControlledDefense);
        int     offsetX = Mathf.RoundToInt(this.oTS.dMaxDefensePlayer - this.oTS.dMinDefensePlayer);

        //Check si je suis dans le même couloir que la balle
        if (this.game.compareZoneInMap(this.game.Ball.gameObject, this.gameObject) == 0)
        {
            //je suis dans la même zone que la balle et donc je ne bouge pas sur X sauf si un autre joueur est déjà dans le couloir
            foreach (Unit u in this.Team)
            {
                if (u != this && u.typeOfPlayer == TYPEOFPLAYER.DEFENSE)
                {
                    if (u.ballZone)
                    {
                        this.ballZone = false;
                        break;
                    }
                    else
                    {
                        this.ballZone = true;
                    }
                }
            }
        }
        else         // Check si un autre défenseur est dans le couloir de la balle
        {
            //Si personne alors je décide d'y aller
            bool otherDefenseGo = false;
            foreach (Unit u in this.Team)
            {
                if (u != this && u.typeOfPlayer == TYPEOFPLAYER.DEFENSE)
                {
                    if (u.ballZone)
                    {
                        otherDefenseGo = true;
                        break;
                    }
                }
            }

            if (!otherDefenseGo)
            {
                this.ballZone = true;
                //Déplacement sur X
                pos.x += this.game.Ball.transform.position.x - this.transform.position.x;
                if (pos.x != oldPos.x)
                {
                    //je bouge
                    this.Order = Order.OrderMove(pos);
                    oldPos     = pos;
                }
            }
        }

        if (!this.ballZone)
        {
            //Contrainte sur X
            foreach (Unit u in this.Team)
            {
                //Seuls les défenseurs m'intéressent
                if (u != this && u.typeOfPlayer == TYPEOFPLAYER.DEFENSE)
                {
                    distX = Mathf.Abs(u.transform.position.x - this.transform.position.x);
                    if (distX > this.oTS.dMaxDefensePlayer)
                    {
                        if (u.transform.position.x > this.transform.position.x)
                        {
                            pos.x = u.transform.position.x - (this.oTS.dMaxDefensePlayer + this.game.rand.Next(offsetX));
                        }
                        else
                        {
                            pos.x = u.transform.position.x + (this.oTS.dMaxDefensePlayer + this.game.rand.Next(offsetX));
                        }
                    }
                    else if (distX < this.oTS.dMinDefensePlayer)
                    {
                        if (u.transform.position.x > this.transform.position.x)
                        {
                            pos.x = u.transform.position.x - (this.oTS.dMinDefensePlayer + this.game.rand.Next(offsetX));
                        }
                        else
                        {
                            pos.x = u.transform.position.x + (this.oTS.dMinDefensePlayer + this.game.rand.Next(offsetX));
                        }
                    }

                    /*
                     * else // cas normal
                     * {
                     *      if (this.game.rand.Next(100) > 50)
                     *              pos.x += this.game.rand.Next(5);
                     *      else
                     *              pos.x -= this.game.rand.Next(5);
                     * }
                     */
                }
                if (pos.x != oldPos.x)
                {
                    //je bouge
                    ////Debug.Log("second orderMove " + this + " bouge a la position : " + pos + " ancienne position : " + oldPos);
                    this.Order = Order.OrderMove(pos);
                    oldPos     = pos;
                }
            }
        }
        else
        {
            foreach (Unit u in this.team)
            {
                //seuls les défenseurs différent de moi m'intéresse
                if (u != this && u.typeOfPlayer == TYPEOFPLAYER.DEFENSE)
                {
                    // le joueur est à ma droite
                    Order.TYPE_POSITION posThis = this.PositionInMap();
                    Order.TYPE_POSITION posBall = game.PositionInMap(game.Ball.gameObject);
                    ////Debug.Log(posThis + " et " + posBall + "donne" + (posThis > posBall));

                    //l'autre défenseur est à ma droite
                    if (u.PositionInMap() > posThis)
                    {
                        //si la balle est > milieu alors il devient le défenseur de la balle
                        if (posBall > Order.TYPE_POSITION.MIDDLE)
                        {
                            this.ballZone = false;
                            u.ballZone    = true;
                        }
                    }
                    else
                    {
                        //si la balle est < milieu alors il devient le défenseur de la balle
                        if (posBall < Order.TYPE_POSITION.MIDDLE)
                        {
                            this.ballZone = false;
                            u.ballZone    = true;
                        }
                    }
                }
            }
        }

        //Contrainte sur Z
        if (distZ > this.oTS.dMaxControlledDefense)
        {
            ////Debug.Log("too far : pos controllé : " + this.Team.Player.Controlled.transform.position.z + " autre pos : " + this.transform.position.z);
            if (this.team == this.game.southTeam)
            {
                pos.z = this.team.Player.Controlled.transform.position.z - (this.oTS.dMinControlledDefense + this.game.rand.Next(offsetZ));
            }
            else
            {
                pos.z = this.team.Player.Controlled.transform.position.z + (this.oTS.dMinControlledDefense + this.game.rand.Next(offsetZ));
            }
        }
        else if (distZ < this.oTS.dMinControlledDefense)
        {
            ////Debug.Log("too near : " + this);
            if (this.team == this.game.southTeam)
            {
                pos.z = this.team.Player.Controlled.transform.position.z - (this.oTS.dMaxControlledDefense - this.game.rand.Next(offsetZ));
            }
            else
            {
                pos.z = this.team.Player.Controlled.transform.position.z + (this.oTS.dMaxControlledDefense - this.game.rand.Next(offsetZ));
            }
        }
        if (pos.z != oldPos.z)
        {
            this.Order = Order.OrderMove(pos);
        }
    }
Example #5
0
    void UpdatePLAYER()
    {
        bool change = false;

        if (this.Controlled == null)
        {
            change = true;
        }
        //else if (this.Controlled.isTackled)
        //{
        //	change = true;
        //}
        else if (this.Controlled != this.game.Ball.Owner &&
                 (Input.GetKeyDown(Inputs.changePlayer.keyboard(this.Team)) || XboxController.GetButtonDown(Inputs.changePlayer.xbox)))
        {
            change = true;
        }

        if (change)
        {
            //Debug.Log("CHANGE PLAYER");
            //foreach (Unit u in this.Team)
            //{
            //	u.UpdateTypeOfPlay();
            //}

            Unit nextControlled = null;
            if (BallSkipOurOffensive())
            {
                if (BallGoOurBut())
                {
                    nextControlled = GetDefensivePlayer();
                }
                else
                {
                    nextControlled = GetUnitNear(false);
                }
            }
            else
            {
                nextControlled = GetUnitNear(false);
            }

            ChangeControlled(nextControlled);

            //if (Controlled)
            //{
            //	Controlled.Order = Order.OrderNothing();
            //	Controlled.IndicateSelected(false);
            //}
            //
            //if (nextControlled)
            //	Controlled = nextControlled;
            //
            ////Unit nearFromBall = GetUnitNear(false);
            ////if (nearFromBall)
            ////	Controlled = nearFromBall;
            //
            //if (Controlled)
            //{
            //	Controlled.Order = Order.OrderNothing();
            //	Controlled.IndicateSelected(true);
            //}
        }

        if (Controlled && !game.UseFlorianIA)
        {
            Order.TYPE_POSITION typePosition = Team.PositionInMap(Controlled);

            if (game.Ball.Owner == null || game.Ball.Owner.Team == Team)
            {
                //offensiveside
                foreach (Unit u in Controlled.Team)
                {
                    if (u != Controlled)
                    {
                        u.Order = Order.OrderOffensiveSide(
                            Controlled, new Vector3(game.settings.Global.Team.Vheight, 0, game.settings.Global.Team.Vwidth / 1.5f),
                            Controlled.Team.south,
                            typePosition
                            );
                    }
                }
            }
            else
            {
                //defensiveside
                foreach (Unit u in Controlled.Team)
                {
                    if (u != Controlled)
                    {
                        u.Order = Order.OrderDefensiveSide(
                            Controlled,
                            new Vector3(game.settings.Global.Team.Vheight, 0, game.settings.Global.Team.Vwidth / 1.5f),
                            Controlled.Team.south,
                            typePosition
                            );
                    }
                }
            }
        }
    }