/**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        Vector3 centerOffset;

        centerOffset.x = center.x - Player.transform.position.x;
        centerOffset.z = center.z - Player.transform.position.z;
        centerOffset.y = 0f;

        float x = centerOffset.x / Xlimit;
        float z = centerOffset.z / Zlimit;

        if (x < 0.9f && z < 0.95f)
        {
            //Debug.Log("adentro de limites");
            return(Vector3.zero);
        }
        else if (x < 0.95f && z > 0.95f)
        {
            //Debug.Log("fuera de limites");
            return(centerOffset * z * z);
        }
        else if (x > 0.95f && z < 0.95f)
        {
            //Debug.Log("fuera de limites");
            return(centerOffset * x * x);
        }
        //Debug.Log("fuera de limites");
        return(centerOffset * x * z);
    }
Ejemplo n.º 2
0
    //-----------------------------------------------

    // Use this for initialization
    void Start()
    {
        if (this.transform.name == "GoalKeeper_Local")
        {
            TeamName     = "Local";
            playerTeam   = GameObject.Find("Local").GetComponent <STeam>();
            opponentTeam = GameObject.Find("Visit").GetComponent <STeam>();
            Opponents    = opponentTeam.Visitors;
            Teammates    = playerTeam.Locals;
        }
        else
        {
            TeamName     = "Visit";
            playerTeam   = GameObject.Find("Visit").GetComponent <STeam>();
            opponentTeam = GameObject.Find("Local").GetComponent <STeam>();
            Opponents    = opponentTeam.Locals;
            Teammates    = playerTeam.Visitors;
        }
        scorerTime = GameObject.FindObjectOfType(typeof(ScorerTimeHUD)) as ScorerTimeHUD;

        listPosicion = new List <string>();

        initial_Position = transform.position;
        state            = GoalKeeper_State.RESTING;
        GetComponent <Animation>()["running"].speed = 1.0f;
        GetComponent <Animation>()["goalkeeper_clear_right_up"].speed   = 1.0f;
        GetComponent <Animation>()["goalkeeper_clear_left_up"].speed    = 1.0f;
        GetComponent <Animation>()["goalkeeper_clear_right_down"].speed = 1.0f;
        GetComponent <Animation>()["goalkeeper_clear_left_down"].speed  = 1.0f;
    }
Ejemplo n.º 3
0
    public  Vector3 CalculateMove(SPlayer Player, List<Transform> context, STeam team)
    {
        //handle data mismatch
        if (weights.Length != behaviors.Length)
        {
            Debug.LogError("Data mismatch in " + name, this);
            return Vector3.zero;
        }

        //set up move
        Vector3 move = Vector3.zero;

        //iterate through behaviors
        for (int i = 0; i < behaviors.Length; i++)
        {
            Vector3 partialMove = behaviors[i].CalculateMove(Player, context, team) * weights[i];

            if (partialMove != Vector3.zero)
            {
                if (partialMove.sqrMagnitude > weights[i] * weights[i])
                {
                    partialMove.Normalize();
                    partialMove *= weights[i];
                }

                move += partialMove;

            }
        }

        return move;


    }
Ejemplo n.º 4
0
    /**
     *@funtion CalculateMove
     *@brief Considera los comportamientos y sus respectivos pesos y calcula el movimiento del jugador
     *@param context contexto del jugador, en este caso equipo y obstaculos
     *@param team equipo al que pertenece
     **/
    public Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        //handle data mismatch
        if (weights.Count != sbehaviors.Length + cbehaviors.Length)
        {
            Debug.LogError("Data mismatch in " + name, this);
            return(Vector3.zero);
        }

        //set up move
        Vector3 move = Vector3.zero;

        //iterate through sbehaviors
        for (int i = 0; i < sbehaviors.Length; i++)
        {
            Vector3 partialMove = Vector3.zero;
            if (weights[wkeys[i]] != 0)
            {
                partialMove = sbehaviors[i].CalculateMove(Player, context, team) * weights[wkeys[i]];
            }


            if (partialMove != Vector3.zero)
            {
                if (partialMove.sqrMagnitude > weights[wkeys[i]] * weights[wkeys[i]])
                {
                    partialMove.Normalize();
                    partialMove *= weights[wkeys[i]];
                }

                move += partialMove;
            }
        }
        for (int i = 0; i < cbehaviors.Length; i++)
        {
            Vector3 partialMove = Vector3.zero;
            if (weights[wkeys[i + sbehaviors.Length]] != 0)
            {
                partialMove = cbehaviors[i].CalculateMove(Player, context, team, opponentTeam, sphere, (TeamName == "Local") ? GoalLocal : GoalVisit) * weights[wkeys[i + sbehaviors.Length]];
            }


            if (partialMove != Vector3.zero)
            {
                if (partialMove.sqrMagnitude > weights[wkeys[i + sbehaviors.Length]] * weights[wkeys[i + sbehaviors.Length]])
                {
                    partialMove.Normalize();
                    partialMove *= weights[wkeys[i + sbehaviors.Length]];
                }
                //Debug.Log(i+sbehaviors.Length);
                move += partialMove;
            }
        }

        return(move);
    }
Ejemplo n.º 5
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        Vector3 centerOffset;

        centerOffset.x = Player.center.transform.position.x - Player.transform.position.x;
        centerOffset.z = Player.center.transform.position.z - Player.transform.position.z;
        centerOffset.y = 0f;



        return(centerOffset.normalized);
    }
Ejemplo n.º 6
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     *@param Oteam Equipo oponente
     *@param Ball Balon del juego
     *@param Goal Cancha objetivo
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        Vector3 centerOffset;

        centerOffset.x = Goal.transform.position.x - Player.transform.position.x;
        centerOffset.z = Goal.transform.position.z - Player.transform.position.z;
        centerOffset.y = 0f;



        return(centerOffset.normalized);
    }
Ejemplo n.º 7
0
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        //if no neighbors, maintain current alignment
        if (context.Count == 0)
        {
            return(Player.transform.up);
        }

        //add all points together and average
        Vector3 alignmentMove = Vector3.zero;

        //List<Transform> filteredContext = (filter == null) ? context : filter.Filter(Player, context);
        foreach (Transform item in context)
        {
            alignmentMove += item.transform.up;
        }
        alignmentMove /= context.Count;

        return(alignmentMove);
    }
Ejemplo n.º 8
0
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        Vector3 centerOffset;

        centerOffset.y = 0f;
        if (Player.playerTeam.name == "Local")
        {
            centerOffset.x = team.local_init_position[Player.PlayerId].x - Player.transform.position.x;
            centerOffset.z = team.local_init_position[Player.PlayerId].z - Player.transform.position.z;
        }
        else
        {
            centerOffset.x = team.visit_init_position[Player.PlayerId].x - Player.transform.position.x;
            centerOffset.z = team.visit_init_position[Player.PlayerId].z - Player.transform.position.z;
        }

        if (centerOffset.magnitude < 0.4f)//FIXME: esto se puede ajustar a un mejor valor
        {
            return(Vector3.zero);
        }
        return(centerOffset.normalized);
    }
Ejemplo n.º 9
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        //if no neighbors, maintain current alignment
        if (context.Count == 0)
        {
            return(Player.transform.up);
        }

        //add all points together and average
        Vector3 cohesionMove = Vector3.zero;


        //List<Transform> filteredContext = (filter == null) ? context : filter.Filter(Player, context);
        foreach (Transform item in context)
        {
            cohesionMove += item.position;
        }
        cohesionMove /= context.Count;
        cohesionMove -= Player.transform.position;
        cohesionMove  = Vector3.SmoothDamp(Player.transform.up, cohesionMove, ref currentVelocity, agentSmoothTime);
        return(cohesionMove);
    }
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        Vector3 centerOffset;

        centerOffset.y = 0f;
        if (Player.playerTeam.name == "Local")
        {
            centerOffset.x = team.local_position[Player.PlayerId].x - Player.transform.position.x;
            centerOffset.z = team.local_position[Player.PlayerId].z - Player.transform.position.z;
        }
        else
        {
            centerOffset.x = team.visit_position[Player.PlayerId].x - Player.transform.position.x;
            centerOffset.z = team.visit_position[Player.PlayerId].z - Player.transform.position.z;
        }
        if (centerOffset.magnitude < 2f)
        {
            centerOffset = Vector3.zero;
        }


        return(centerOffset.normalized);
    }
Ejemplo n.º 11
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
    {
        //if no neighbors, maintain current alignment
        if (context.Count == 0)
        {
            return(Player.transform.up);
        }

        //add all points together and average
        Vector3 avoidanceMove         = Vector3.zero;
        int     nAvoid                = 0;
        float   SquareAvoidanceRadius = 4f;

        foreach (Transform item in context)
        {
            if (Vector3.SqrMagnitude(item.position - Player.transform.position) < SquareAvoidanceRadius)
            {
                //Debug.Log(context.Count);
                nAvoid++;
                avoidanceMove += (Player.transform.position - item.position);
            }
        }
        if (nAvoid > 0)
        {
            avoidanceMove /= nAvoid;
        }
        else
        {
            return(Vector3.zero);
        }

        avoidanceMove    = Vector3.SmoothDamp(Player.transform.up, avoidanceMove, ref currentVelocity, agentSmoothTime);
        avoidanceMove.x *= 10;
        avoidanceMove.z /= 3;
        return(avoidanceMove);
    }
Ejemplo n.º 12
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     *@param Oteam Equipo oponente
     *@param Ball Balon del juego
     *@param Goal Cancha objetivo
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        Player.Walking = false;
        GoalMod.z      = Goal.transform.position.z;
        GoalMod.y      = 0f;
        if (Player.playerTeam.name == "Local")
        {
            GoalMod.x = team.local_position[Player.PlayerId].x;
        }
        else
        {
            GoalMod.x = team.visit_position[Player.PlayerId].x;
        }

        slowDown = false;

        centerOffset.x = 0f;    //La posicion en x realmente no importa
        if (Ball.owner == null)
        {
            return(Vector3.zero);
        }
        centerOffset.y = 0f;
        centerOffset.z = Player.transform.InverseTransformPoint(Ball.owner.transform.position).z;
        //

        if (!Player.bFirstHalf)
        {
            centerOffset = -centerOffset;
        }
        if (Player.type == SPlayer.TypePlayer.DEFENDER)//Si es defensor empezar a seguir cuando la distancia llega a 40
        {
            if (centerOffset.magnitude < 40f)
            {
                slowDown = true;
            }
        }

        if (Player.type == SPlayer.TypePlayer.MIDDLER && centerOffset.magnitude < 20f)//Si es mediocampista empezar a seguir cuando la distancia llega a 15
        {
            slowDown = true;
        }

        if (Player.type == SPlayer.TypePlayer.ATTACKER && centerOffset.magnitude < 10f)
        {
            slowDown = true;
        }
        if (slowDown)
        {
            Player.Walking = true;
            centerOffset.x = GoalMod.x - Player.transform.position.x;
            centerOffset.z = GoalMod.z - Player.transform.position.z;
            centerOffset  /= 3;
            return(centerOffset.normalized);
        }



        //centerOffset = centerOffset.normalized*Player.MAXSPEED;
        //centerOffset = Vector3.SmoothDamp(Player.transform.forward, centerOffset, ref currentVelocity, agentSmoothTime);
        //Debug.Log(centerOffset.normalized,this);
        return(centerOffset.normalized);
    }
Ejemplo n.º 13
0
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        Vector3 centerOffset;

        centerOffset.y = 0f;
        if (Player.bFirstHalf)                                                                                  //ataque en derecha
        {
            if (Ball.OutPosition.z < 0)                                                                         //Defensa de corner
            {
                centerOffset.x = -team.defend_corner_position[Player.PlayerId].x - Player.transform.position.x; //negativa porque se define en la derecha
                centerOffset.z = -team.defend_corner_position[Player.PlayerId].z - Player.transform.position.z;
            }
            else
            {
                if (Ball.OutPosition.x < 0 && Player.PlayerId == 8)
                {
                    centerOffset.x = -50 - Player.transform.position.x;
                    centerOffset.z = 57 - Player.transform.position.z;
                }
                else if (Ball.OutPosition.x > 0 && Player.PlayerId == 9)
                {
                    centerOffset.x = 38.5f - Player.transform.position.x;
                    centerOffset.z = 57 - Player.transform.position.z;
                }
                else
                {
                    centerOffset.x = team.attack_corner_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = team.attack_corner_position[Player.PlayerId].z - Player.transform.position.z;
                }
            }
        }
        else
        {
            if (Ball.OutPosition.z < 0)   //ataque en corner
            {
                if (Ball.OutPosition.x < 0 && Player.PlayerId == 8)
                {
                    centerOffset.x = -38.5f - Player.transform.position.x;
                    centerOffset.z = -57 - Player.transform.position.z;
                }
                else if (Ball.OutPosition.x > 0 && Player.PlayerId == 9)
                {
                    centerOffset.x = 38.5f - Player.transform.position.x;
                    centerOffset.z = -57 - Player.transform.position.z;
                }
                else
                {
                    centerOffset.x = -team.attack_corner_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = -team.attack_corner_position[Player.PlayerId].z - Player.transform.position.z; //Negativa por que se define a la derecha
                }
            }
            else
            {
                centerOffset.x = team.defend_corner_position[Player.PlayerId].x - Player.transform.position.x;
                centerOffset.z = team.defend_corner_position[Player.PlayerId].z - Player.transform.position.z;
            }
        }

        if (centerOffset.magnitude < 2f)
        {
            centerOffset = Vector3.zero;
        }


        return(centerOffset.normalized);
    }
Ejemplo n.º 14
0
    /**
     *@funtion Initialize
     *@brief Crea las variables iniciales de comportamiento y nodos
     *@param
     **/
    public void Initialize()
    {
        playerTeam = transform.parent.GetComponent <STeam>();


        sbehaviors[0] = ScriptableObject.CreateInstance("Alignment") as Sbehavior;
        weights.Add("Alignment", 0.1f);
        wkeys[0]      = "Alignment";
        sbehaviors[1] = ScriptableObject.CreateInstance("Avoidance") as Sbehavior;
        weights.Add("Avoidance", 0.1f);
        wkeys[1]      = "Avoidance";
        sbehaviors[2] = ScriptableObject.CreateInstance("Cohesion") as Sbehavior;
        weights.Add("Cohesion", 0.1f);
        wkeys[2]      = "Cohesion";
        sbehaviors[3] = ScriptableObject.CreateInstance("StayInStadium") as Sbehavior;
        weights.Add("StayInStadium", 0.1f);
        wkeys[3]      = "StayInStadium";
        sbehaviors[4] = ScriptableObject.CreateInstance("GoCenter") as Sbehavior;
        weights.Add("GoCenter", 0.1f);
        wkeys[4]      = "GoCenter";
        sbehaviors[5] = ScriptableObject.CreateInstance("TackleMove") as Sbehavior;
        weights.Add("TackleMove", 0.1f);
        wkeys[5] = "TackleMove";

        cbehaviors[0] = ScriptableObject.CreateInstance("FollowBall") as Cbehavior;
        weights.Add("FollowBall", 0.1f);
        wkeys[sbehaviors.Length] = "FollowBall";
        cbehaviors[1]            = ScriptableObject.CreateInstance("FollowGoal") as Cbehavior;
        weights.Add("FollowGoal", 0.1f);
        wkeys[sbehaviors.Length + 1] = "FollowGoal";
        cbehaviors[2] = ScriptableObject.CreateInstance("ReturnDefault") as Cbehavior;
        weights.Add("ReturnDefault", 0.1f);
        wkeys[sbehaviors.Length + 2] = "ReturnDefault";
        cbehaviors[3] = ScriptableObject.CreateInstance("ReturnInit") as Cbehavior;
        weights.Add("ReturnInit", 0.1f);
        wkeys[sbehaviors.Length + 3] = "ReturnInit";
        cbehaviors[4] = ScriptableObject.CreateInstance("AvoidOpponents") as Cbehavior;
        weights.Add("AvoidOpponents", 0.1f);
        wkeys[sbehaviors.Length + 4] = "AvoidOpponents";
        cbehaviors[5] = ScriptableObject.CreateInstance("FollowOwner") as Cbehavior;
        weights.Add("FollowOwner", 0.1f);
        wkeys[sbehaviors.Length + 5] = "FollowOwner";
        cbehaviors[6] = ScriptableObject.CreateInstance("Defend") as Cbehavior;
        weights.Add("Defend", 0.1f);
        wkeys[sbehaviors.Length + 6] = "Defend";
        cbehaviors[7] = ScriptableObject.CreateInstance("CornerSetup") as Cbehavior;
        weights.Add("CornerSetup", 0.1f);
        wkeys[sbehaviors.Length + 7] = "CornerSetup";



        ///Inicialización de nodos
        KICK_OFFER_Node             = new ActionNode(KICK_OFFER);
        CHECK_ATTACK_Node           = new ActionNode(CHECK_ATTACK);
        GO_ORIGIN_Node              = new ActionNode(GO_ORIGIN);
        CONTROLLING_Node            = new ActionNode(CONTROLLING);
        PASSING_Node                = new PublicNode();
        SHOOTING_Node               = new ActionNode(SHOOTING);
        MOVE_AUTOMATIC_ATTACK_Node  = new ActionNode(MOVE_AUTOMATIC_ATTACK);
        MOVE_AUTOMATIC_DEFFEND_Node = new ActionNode(MOVE_AUTOMATIC_DEFFEND);
        ONE_STEP_BACK_Node          = new ActionNode(ONE_STEP_BACK);
        STOLE_BALL_Node             = new ActionNode(STOLE_BALL);
        PICK_BALL_Node              = new ActionNode(PICK_BALL);
        CHANGE_DIRECTION_Node       = new ActionNode(CHANGE_DIRECTION);
        CORNER_KICK_Node            = new ActionNode(CORNER_KICK);
        ThrowIn_Node                = new ActionNode(ThrowIn);
        TACKLE_Node        = new ActionNode(TACKLE);
        Medio_Tiempo_Node  = new ActionNode(Medio_Tiempo);
        Celebration_Node   = new ActionNode(Celebration);
        LOOK_FOR_BALL_Node = new ActionNode(LOOK_FOR_BALL);
        Oclusion_Node      = new ActionNode(Oclusion);
        //Behavior Tree Nodes
        //###############################################################################
        FootballMatch = new Inverter(KICK_OFFER_Node);
        //###############################################################################
        //public Sequence FootballMatch;
        Attack = new Sequence(new List <Node> {
            CHECK_ATTACK_Node,
            MOVE_AUTOMATIC_ATTACK_Node,
            //PASSING_Node,
            SHOOTING_Node,
        });

        Deffend = new Sequence(new List <Node> {
            MOVE_AUTOMATIC_DEFFEND_Node,
            TACKLE_Node,
            STOLE_BALL_Node,
        });


        RootNode = new Selector(new List <Node> {
            Oclusion_Node,
            FootballMatch,
            CORNER_KICK_Node,
            ThrowIn_Node,
            Attack,
            LOOK_FOR_BALL_Node,
            Deffend,
        });

        TestRoot = new Selector(new List <Node> {
            FootballMatch,
            SHOOTING_Node,
        });



        //Bools de control;
        ControlStates.Add("Kick_Offer", false);
        Ckeys.Add("Kick_Offer");
        ControlStates.Add("Animate", true);
        Ckeys.Add("Animate");
        ControlStates.Add("Passing", false);
        Ckeys.Add("Passing");
        ControlStates.Add("OnArea", false);
        Ckeys.Add("OnArea");
        ControlStates.Add("Tackling", false);
        Ckeys.Add("Tackling");
        ControlStates.Add("StoleBall", false);
        Ckeys.Add("StoleBall");
        ControlStates.Add("Shooting", false);
        Ckeys.Add("Shooting");


        //Tiempos de espera
        ControlTimes.Add("Thinking", 0f);
        Tkeys.Add("Thinking");
        ControlTimes.Add("Tackle", 0f);
        Tkeys.Add("Tackle");
        ControlTimes.Add("Pass", 0f);
        Tkeys.Add("Pass");
        ControlTimes.Add("Reanimate", 0f);
        Tkeys.Add("Reanimate");
    }
Ejemplo n.º 15
0
    // Start is called before the first frame update
    void Start()
    {
        inGame = FindObjectOfType <InGameState_Script>();
        center = GameObject.Find("Center_Field").GetComponent <Transform>();

        bFirstHalf = inGame.bFirstHalf;
        //Inicializacion de variables de comportamiento
        sbehaviors = new Sbehavior[6];

        cbehaviors = new Cbehavior[8];
        weights    = new Dictionary <string, float>();
        pweights   = new float[sbehaviors.Length + cbehaviors.Length];
        wkeys      = new string[sbehaviors.Length + cbehaviors.Length];


        ControlStates = new Dictionary <string, bool>();
        Ckeys         = new List <string>(); //FIXME: esto no tiene sentido

        ControlTimes = new Dictionary <string, float>();
        Tkeys        = new List <string>(); //FIXME: esto no tiene sentido

        //Inicializacion de variables de ambiente
        sphere    = GameObject.Find("soccer_ball").GetComponent <Sphere>();
        GoalLocal = GameObject.Find("GoalRight");
        GoalVisit = GameObject.Find("GoalLeft");



        if (this.transform.parent.name == "Local")
        {
            TeamName     = "Local";
            playerTeam   = GameObject.Find("Local").GetComponent <STeam>();
            opponentTeam = GameObject.Find("Visit").GetComponent <STeam>();
            Opponents    = opponentTeam.Visitors;
            Teammates    = playerTeam.Locals;
        }
        else
        {
            TeamName     = "Visit";
            playerTeam   = GameObject.Find("Visit").GetComponent <STeam>();
            opponentTeam = GameObject.Find("Local").GetComponent <STeam>();
            Opponents    = opponentTeam.Locals;
            Teammates    = playerTeam.Visitors;
        }
        Initialize();
        playerCollider = GetComponent <Collider>();
        GetComponentInChildren <SkinnedMeshRenderer>().material = Resources.Load("Materials/" + "player_texture_" + PlayerPrefs.GetString(transform.parent.name)) as Material;


        //Animaciones------------------------------------------------------------------------------------------------
        GetComponent <Animation>()["jump_backwards_bucle"].speed = 1.5f;
        GetComponent <Animation>()["starting"].speed             = 1.0f;
        GetComponent <Animation>()["starting_ball"].speed        = 1.0f;
        GetComponent <Animation>()["running"].speed      = 1.2f;
        GetComponent <Animation>()["running_ball"].speed = 1.0f;
        GetComponent <Animation>()["pass"].speed         = 1.8f;
        GetComponent <Animation>()["rest"].speed         = 1.0f;
        GetComponent <Animation>()["turn"].speed         = 2f;
        GetComponent <Animation>()["tackle"].speed       = 4.0f;

        GetComponent <Animation>()["fight"].speed = 1.2f;
        // para el movimiento de la cabeza de los jugadores

        GetComponent <Animation>().Play("rest");
    }
Ejemplo n.º 16
0
    // Use this for initialization
    void SetVariables()
    {
        //Debug.Log("Error de inicio");
        center = GameObject.Find("Center_Field").GetComponent <Transform>();
        sphere = GameObject.Find("soccer_ball").GetComponent <Sphere>();



        //Buscar tiempo

        scorerTime = GameObject.Find("UI").GetComponentInChildren <ScorerTimeHUD>();

        Local = GameObject.Find("Local").GetComponent <STeam>();
        Visit = GameObject.Find("Visit").GetComponent <STeam>();

        // search PLayers, opponents and goalkeepers
        keeper         = GameObject.FindGameObjectWithTag("GoalKeeper");
        keeper_oponent = GameObject.FindGameObjectWithTag("GoalKeeper_Oponent");


        Locals   = Local.Locals;
        Visitors = Visit.Visitors;


        //##########################Nodes############################
        PLAYING_Node             = new ActionNode(PLAYING);
        PREPARE_TO_KICK_OFF_Node = new ActionNode(PREPARE_TO_KICK_OFF);
        KICK_OFF_Node            = new ActionNode(KICK_OFF);
        GOAL_Node              = new ActionNode(GOAL);
        THROW_IN_Setup_Node    = new ActionNode(THROW_IN_Setup);
        THROW_IN_DOING_Node    = new ActionNode(THROW_IN_DOING);
        THROW_IN_DONE_Node     = new ActionNode(THROW_IN_DONE);
        CORNER_Setup_Node      = new ActionNode(CORNER_Setup);
        CORNER_DOING_Node      = new ActionNode(CORNER_DOING);
        CORNER_DONE_Node       = new ActionNode(CORNER_DONE);
        GOAL_KICK_Node         = new ActionNode(GOAL_KICK);
        GOAL_KICK_RUNNING_Node = new ActionNode(GOAL_KICK_RUNNING);
        GOAL_KICK_KICKING_Node = new ActionNode(GOAL_KICK_KICKING);
        Medio_Tiempo_Node      = new ActionNode(Medio_Tiempo);
        Cambio_Cancha_Node     = new ActionNode(Cambio_Cancha);
        FIN_Node = new ActionNode(FIN);



        //##########################Custom_Nodes############################

        CheckCornerSim_Node   = new ActionNode(CheckCornerSim);
        CheckThrowInSim_Node  = new ActionNode(CheckThrowInSim);
        CheckOclusionSim_Node = new ActionNode(CheckOclusionSim);
        PlayingNS_Node        = new ActionNode(PlayingNS);
        Oclusion_Node         = new ActionNode(Oclusion);
        //---------------------------Sequence-----------------------
        KickOff_Sequence = new Sequence(new List <Node> {
            PREPARE_TO_KICK_OFF_Node,
            KICK_OFF_Node,
        });
        HalfTime_Secuence = new Sequence(new List <Node> {
            Medio_Tiempo_Node,
            Cambio_Cancha_Node,
        });


        Corner_Sequence = new Sequence(new List <Node> {
            CORNER_Setup_Node,
            CORNER_DOING_Node,
            CORNER_DONE_Node,
        });

        Throw_In_Sequence = new Sequence(new List <Node> {
            THROW_IN_Setup_Node,
            THROW_IN_DOING_Node,
            THROW_IN_DONE_Node
        });


        FootballMatch = new Selector(new List <Node> {
            PLAYING_Node,
            Corner_Sequence,
            Throw_In_Sequence,
            GOAL_KICK_Node,
            GOAL_Node,
        });

        RootNode = new Sequence(new List <Node> {
            KickOff_Sequence,
            FootballMatch,

            HalfTime_Secuence,
        });

        CornerSim = new Sequence(new List <Node>
        {
            CheckCornerSim_Node,
            Corner_Sequence,
            PlayingNS_Node,
        });
        ThrowInSim = new Sequence(new List <Node>
        {
            CheckThrowInSim_Node,
            Throw_In_Sequence,
            PlayingNS_Node,
        });
        OclusionSim = new Sequence(new List <Node>
        {
            CheckOclusionSim_Node,
        });


        CustomSim = new Selector(new List <Node>
        {
            CornerSim,
            ThrowInSim,
            OclusionSim,
            RootNode
        });
    }
Ejemplo n.º 17
0
 /**
  *@funtion CalculateMove
  *@brief Calcula un vector de velocidad dependiendo del comportamiento
  *@param Player jugador al que le corresponde el comportamiento
  *@param context Lista de transforms del equipo
  *@param team Equipo al que pertenece
  **/
 public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team)
 {
     return(Player.transform.forward.normalized);
 }
Ejemplo n.º 18
0
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     *@param Oteam Equipo oponente
     *@param Ball Balon del juego
     *@param Goal Cancha objetivo
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        //Debug.Log("Defending");
        Vector3 centerOffset = Vector3.zero;
        //attacker = null;
        List <SPlayer> opponents;

        if (Ball.owner != null)
        {
            if (Player.type == SPlayer.TypePlayer.DEFENDER && Ball.owner.OnAreaCheck())//Fixme, no dejar a otros jugadores solos
            {
                centerOffset.y = 0f;
                centerOffset.x = Ball.owner.transform.position.x - Player.transform.position.x;
                centerOffset.z = Ball.owner.transform.position.z - Player.transform.position.z;
                attacker       = Ball.owner;
                return(centerOffset.normalized);
            }
        }

        if (Player.bFirstHalf)
        {
            if (Player.transform.position.z > 0f)
            {
                AttackingSide = true;
            }
            else
            {
                AttackingSide = false;
            }
            offset = -3f;
        }
        else
        {
            if (Player.transform.position.z < 0f)
            {
                AttackingSide = true;
            }
            else
            {
                AttackingSide = false;
            }
            offset = 3f;
        }
        if (Player.TeamName == "Local")
        {
            opponents = Oteam.Visitors;
        }
        else
        {
            opponents = Oteam.Locals;
        }



        if (Timeb4changeAtt <= 0)
        {
            Timeb4changeAtt = 2f;
            Vector3 tempOffset = new Vector3(0, 10, 0);

            if (!AttackingSide)
            {
                //Debug.Log("Defendiendo");
                for (int i = 0; i < opponents.Count; i++)
                {
                    //Debug.Log(opponents[i].CheckAround(3));
                    if (opponents[i].CheckAround(3) <= 2) //Checks for other defenders near the attacker
                    {
                        TempValue = (opponents[i].transform.position - Player.transform.position).magnitude;
                        if (opponents[i] == Ball.owner)//Prioridad al dueno del balon
                        {
                            TempValue /= 2;
                        }
                        if (opponents[i].PlayerId == Player.PlayerId)
                        {
                            TempValue /= 4;
                        }
                        if (TempValue < tempOffset.magnitude)
                        {
                            centerOffset.y = 0f;
                            centerOffset.x = opponents[i].transform.position.x - Player.transform.position.x;
                            centerOffset.z = opponents[i].transform.position.z - Player.transform.position.z;

                            tempOffset = centerOffset;
                            attacker   = opponents[i];
                        }
                    }
                }
            }

            //Debug.Log(attacker);
            if (centerOffset.magnitude == 0)
            {
                if (Player.playerTeam.name == "Local")
                {
                    centerOffset.x = team.local_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = team.local_position[Player.PlayerId].z - Player.transform.position.z;
                    if (centerOffset.magnitude < 2f)
                    {
                        centerOffset = Vector3.zero;
                    }
                }
                else
                {
                    centerOffset.x = team.visit_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = team.visit_position[Player.PlayerId].z - Player.transform.position.z;
                    if (centerOffset.magnitude < 2f)
                    {
                        centerOffset = Vector3.zero;
                    }
                }
            }
        }
        else
        {
            Timeb4changeAtt -= Time.deltaTime;
            if (attacker != null)
            {
                centerOffset.y = 0f;
                centerOffset.x = attacker.transform.position.x - Player.transform.position.x;
                centerOffset.z = attacker.transform.position.z - Player.transform.position.z + offset;
            }
            else
            {
                if (Player.playerTeam.name == "Local")
                {
                    centerOffset.x = team.local_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = team.local_position[Player.PlayerId].z - Player.transform.position.z;
                    if (centerOffset.magnitude < 2f)
                    {
                        centerOffset = Vector3.zero;
                    }
                }
                else
                {
                    centerOffset.x = team.visit_position[Player.PlayerId].x - Player.transform.position.x;
                    centerOffset.z = team.visit_position[Player.PlayerId].z - Player.transform.position.z;
                    if (centerOffset.magnitude < 2f)
                    {
                        centerOffset = Vector3.zero;
                    }
                }
            }
        }
        //Debug.Log(centerOffset,Player);
        return(centerOffset.normalized);
    }
    /**
     *@funtion CalculateMove
     *@brief Calcula un vector de velocidad dependiendo del comportamiento
     *@param Player jugador al que le corresponde el comportamiento
     *@param context Lista de transforms del equipo
     *@param team Equipo al que pertenece
     *@param Oteam Equipo oponente
     *@param Ball Balon del juego
     *@param Goal Cancha objetivo
     **/
    public override Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal)
    {
        //add all points together and average
        Vector3 AvoidOpponents = Vector3.zero;
        int     nAvoid         = 0;

        List <SPlayer> temp;

        if (Player.transform.parent.name == "Local")
        {
            temp = Oteam.Visitors;
        }
        else
        {
            temp = Oteam.Locals;
        }
        float SquareAvoidanceRadius = 25;

        foreach (SPlayer item in temp)
        {
            if (Vector3.SqrMagnitude(item.transform.position - Player.transform.position) < SquareAvoidanceRadius)
            {
                nAvoid++;
                AvoidOpponents += (Player.transform.position - item.transform.position);
            }
        }

        if (nAvoid > 0)
        {
            AvoidOpponents /= nAvoid;
        }
        else
        {
            return(Player.transform.up);
        }
        float speedDivider = 20;

        if (Player.transform.parent.name == "Local") //Reduce el movimiento hacia atras
        {
            if (Player.bFirstHalf)
            {
                if (AvoidOpponents.z < 0)
                {
                    AvoidOpponents.z = 0;
                }
            }
            else
            {
                if (AvoidOpponents.z > 0)
                {
                    AvoidOpponents.z = 0;
                }
            }
        }
        else
        {
            if (!Player.bFirstHalf)
            {
                if (AvoidOpponents.z < 0)
                {
                    AvoidOpponents.z = 0;
                }
            }
            else
            {
                if (AvoidOpponents.z > 0)
                {
                    AvoidOpponents.z = 0;
                }
            }
        }

        AvoidOpponents.x *= 10;
        AvoidOpponents    = Vector3.SmoothDamp(Player.transform.up, AvoidOpponents, ref currentVelocity, agentSmoothTime);
        return(AvoidOpponents);
    }
Ejemplo n.º 20
0
 /**
  *@funtion CalculateMove
  *@brief Calcula un vector de velocidad dependiendo del comportamiento
  *@param Player jugador al que le corresponde el comportamiento
  *@param context Lista de transforms del equipo
  *@param team Equipo al que pertenece
  *@param Oteam Equipo oponente
  *@param Ball Balon del juego
  *@param Goal Cancha objetivo
  **/
 public abstract Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team, STeam Oteam, Sphere Ball, GameObject Goal);
Ejemplo n.º 21
0
 /**
  *@funtion CalculateMove
  *@brief Calcula un vector de velocidad dependiendo del comportamiento
  *@param Player jugador al que le corresponde el comportamiento
  *@param context Lista de transforms del equipo
  *@param team Equipo al que pertenece
  **/
 public abstract Vector3 CalculateMove(SPlayer Player, List <Transform> context, STeam team);