コード例 #1
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        if (PlayerScript.BallInReceivingRange() || !PlayerScript.GetTeam().InControl())
        {
            PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());

            return;
        }

        Steer2D.Arrive Arr = (Steer2D.Arrive)PlayerScript.GetSteeringController().GetBehaviourByTypeName("Steer2D.Arrive");

        if (Arr.AtTarget)
        {
            //PlayerScript.ChangeState(CallingObject, Wait.Instance());
            //PlayerScript.GetSteeringController().TurnOff(Behaviour.Arrive);
            // PlayerScript.GetSteeringController().TurnOff(Behaviour.Pursue);
            PlayerScript.TrackBall();

            if (PlayerScript.IsClosestTeamMemberToBall())
            {
                PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
            }
        }
    }
コード例 #2
0
    // Como hereda de player, ya tiene un FSM y un Steering

    protected override void Start()
    {
        base.Start();

        // Agregar los estados de este agente, chaser
        PrepareToPlay prepare = new PrepareToPlay(this);
        Nada          nada    = new Nada(this);
        ChaseBall     chase   = new ChaseBall(this);
        SearchGoal    search  = new SearchGoal(this);
        // EscortTeammate escort = new EscortTeammate(this);
        ChaseRival   rival     = new ChaseRival(this);
        Distancia    distancia = new Distancia(this);
        TakePosition take      = new TakePosition(this);

        fsm.AddState(ChaserStateID.nada, nada);
        fsm.AddState(ChaserStateID.PrepareToPlay, prepare);
        fsm.AddState(ChaserStateID.ChaseBall, chase);
        fsm.AddState(ChaserStateID.TakePosition, take);
        fsm.AddState(ChaserStateID.SearchGoal, search);
        // fsm.AddState(ChaserStateID.EscortTeammate, escort);
        fsm.AddState(ChaserStateID.ChaseRival, rival);
        fsm.AddState(GlobalStateID.Distancia, distancia);

        fsm.ChangeState(ChaserStateID.PrepareToPlay);
    }
コード例 #3
0
 public static ChaseBall Instance()
 {
     if (instance == null)
     {
         instance = new ChaseBall();
     }
     return(instance);
 }
コード例 #4
0
ファイル: ChaseBall.cs プロジェクト: remicdv/soccer_sim
    private ChaseBall()
    {
        if (_instance != null)
        {
            return;
        }

        _instance = this;
    }
コード例 #5
0
    protected override void Start()
    {
        base.Start();

        PrepareToPlay prepare = new PrepareToPlay(this);
        ChaseBall     chase   = new ChaseBall(this);

        fsm.AddState(SeekerStateID.PrepareToPlay, prepare);
        fsm.AddState(SeekerStateID.ChaseBall, chase);

        fsm.ChangeState(SeekerStateID.PrepareToPlay);
    }
コード例 #6
0
 private void Awake()
 {
     if (instance == null)
     {
         instance = this;
     }
     else if (instance != this)
     {
         Destroy(this.gameObject);
     }
     DontDestroyOnLoad(this.gameObject);
 }
コード例 #7
0
    protected override void Start()
    {
        base.Start();

        PrepareToPlay prepare  = new PrepareToPlay(this);
        ChaseBall     chase    = new ChaseBall(this);
        GameOver      gameover = new GameOver(this);
        Evade         evade    = new Evade(this);

        fsm.AddState(SeekerStateID.PrepareToPlay, prepare);
        fsm.AddState(SeekerStateID.ChaseBall, chase);
        fsm.AddState(SeekerStateID.GameOver, gameover);
        fsm.AddState(SeekerStateID.Evade, evade);

        fsm.ChangeState(SeekerStateID.PrepareToPlay);
    }
コード例 #8
0
    /**
     *   this will execute when the state is entered
     */
    public override void Enter(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        PlayerScript.GetTeam().SetControllingPlayer(PlayerScript);

        if (!PlayerScript.IsReadyForNextKick())
        {
            PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
        }

        if (PlayerScript.DebugOn)
        {
            Debug.Log("Entering Kick Ball State");
        }
    }
コード例 #9
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        if (!PlayerScript.GetTeam().InControl())
        {
            PlayerScript.ChangeState(CallingObject, ReturnToHomeRegion.Instance());
            return;
        }


        Steer2D.Arrive Arr = (Steer2D.Arrive)PlayerScript.GetSteeringController().GetBehaviourByTypeName("Steer2D.Arrive");

        if (Arr.TargetPoint != PlayerScript.GetTeam().GetSupportSpot())
        {
            PlayerScript.GetSteeringController().TurnOn(Behaviour.Arrive);
            Arr.TargetPoint = PlayerScript.GetTeam().GetSupportSpot();
        }

        Vector2 ShootingTarget = new Vector2();

        if (PlayerScript.GetTeam().CanShoot(CallingObject.transform.position, out ShootingTarget, PlayerScript.MaxShootingForce)) //TODO ?Need Confidence here?
        {
            PlayerScript.GetTeam().RequestPass(CallingObject);
        }

        if (Arr.AtTarget)
        {
            //PlayerScript.GetSteeringController().TurnOff(Behaviour.Arrive);

            PlayerScript.TrackBall();

            if (!PlayerScript.IsThreatened())
            {
                PlayerScript.GetTeam().RequestPass(CallingObject);
            }
        }

        //If closest to ball and not in goalkeepers hands... Chase the ball
        if (PlayerScript.IsClosestTeamMemberToBall() && (!PlayerScript.GetTeam().GetPitch().GoalKeeperHasBall()))
        {
            PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
            return;
        }
    }
コード例 #10
0
    // Como hereda de player, ya tiene un FSM y un Steering

    protected override void Start()
    {
        base.Start();

        // Agregar los estados de este agente, chaser
        PrepareToPlay  prepare = new PrepareToPlay(this);
        ChaseBall      chase   = new ChaseBall(this);
        SearchGoal     search  = new SearchGoal(this);
        EscortTeammate escort  = new EscortTeammate(this);
        ChaseRival     rival   = new ChaseRival(this);

        fsm.AddState(ChaserStateID.PrepareToPlay, prepare);
        fsm.AddState(ChaserStateID.ChaseBall, chase);
        fsm.AddState(ChaserStateID.SearchGoal, search);
        fsm.AddState(ChaserStateID.EscortTeammate, escort);
        fsm.AddState(ChaserStateID.ChaseRival, rival);

        fsm.ChangeState(ChaserStateID.PrepareToPlay);
    }
コード例 #11
0
    protected override void Start()
    {
        base.Start();
        posicionInicial  = transform.position;
        enemigosCercanos = new List <Transform>();
        // Agregar los estados de este agente, chaser
        ChaseBall  chase  = new ChaseBall(this);
        SearchGoal search = new SearchGoal(this);
        Support    supp   = new Support(this);
        Defense    def    = new Defense(this);
        Wait       w      = new Wait(this);

        fsm.AddState(ChaserStateID.ChaseBall, chase);
        fsm.AddState(ChaserStateID.SearchGoal, search);
        fsm.AddState(ChaserStateID.Support, supp);
        fsm.AddState(ChaserStateID.Defense, def);
        fsm.AddState(ChaserStateID.Wait, w);


        fsm.ChangeState(ChaserStateID.ChaseBall);
    }
コード例 #12
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        if (PlayerScript.GetTeam().GetPitch().GetGameInPlay())
        {
            //If closest to ball and not in goalkeepers hands... Chase the ball
            if (PlayerScript.IsClosestTeamMemberToBall() && (!PlayerScript.GetTeam().GetPitch().GoalKeeperHasBall()))
            {
                PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
                return;
            }
        }

        Steer2D.Arrive Arr = (Steer2D.Arrive)PlayerScript.GetSteeringController().GetBehaviourByTypeName("Steer2D.Arrive");

        if (Arr.AtTarget)
        {
            PlayerScript.ChangeState(CallingObject, Wait.Instance());
        }
    }
コード例 #13
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        float dot = Vector3.Dot(CallingObject.transform.right, (PlayerScript.OpponentsGoal.transform.position - CallingObject.transform.position).normalized);

        if (dot > 0.7f) //Facing the goal
        {
            //Dribble towards goal
            Vector2 Target = PlayerScript.transform.position + (CallingObject.transform.right * PlayerScript.DribbleForce);
            PlayerScript.Ball.GetComponent <Football>().AddForce(CallingObject.transform.right * PlayerScript.DribbleForce, Target, "Dribbling Towards Goal");
        }
        else
        {
            //Kick to your prefered turn dir
            //Debug.Log("Turning With Ball");
            Vector2 Target = PlayerScript.transform.position + (CallingObject.transform.right * PlayerScript.DribbleForce);

            PlayerScript.Ball.GetComponent <Football>().AddForce(CallingObject.transform.up * PlayerScript.TurningForce * PlayerScript.PreferedTurnDir, Target, "Turning With Ball");
        }

        PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
    }
コード例 #14
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        PlayerScript.TrackBall();



        if (PlayerScript.GetTeam().GetPitch().GetGameInPlay())
        {
            //If closest to ball and not in goalkeepers hands... Chase the ball
            if (PlayerScript.IsClosestTeamMemberToBall() && (!PlayerScript.GetTeam().GetPitch().GoalKeeperHasBall()))
            {
                PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
                return;
            }
        }

        if (PlayerScript.GetTeam().InControl() && (PlayerScript.GetTeam().ControllingPlayer != PlayerScript && PlayerScript.AheadOfAttacker()))
        {
            PlayerScript.GetTeam().RequestPass(CallingObject);
            return;
        }
    }
コード例 #15
0
    /**
     *   this is the updated fucntion for the state
     */
    public override void Excute(GameObject CallingObject)
    {
        FieldPlayer PlayerScript = CallingObject.GetComponent <FieldPlayer>();

        float dot = Vector3.Dot(CallingObject.transform.right, (PlayerScript.Ball.transform.position - CallingObject.transform.position).normalized);
        float KickPower;

        //If goal keeper has ball/already a recieving player / ball behind player the chase ball
        if (PlayerScript.GetTeam().GetPitch().GoalKeeperHasBall() || (dot < 0))
        {
            PlayerScript.ChangeState(CallingObject, ChaseBall.Instance());
        }

        //If he can shoot
        Vector2 ShootingTarget = new Vector2();

        if (PlayerScript.InShootingRange())
        {
            if (PlayerScript.GetTeam().CanShoot(CallingObject.transform.position, out ShootingTarget, PlayerScript.MaxShootingForce, PlayerScript.ShootingConfidence))
            {
                //Get the Target the player is aiming at
                Vector2 ShotTarget = PlayerScript.AddNoiseToTarget(ShootingTarget);

                //Get the direction of the shot
                Vector2 KickDir = (ShotTarget - (Vector2)PlayerScript.Ball.transform.position).normalized;

                //Set a kick power based on if the player is facing the ball
                KickPower = PlayerScript.MaxShootingForce * dot;



                //Add force to the ball
                PlayerScript.Ball.GetComponent <Football>().AddForce(KickDir * KickPower, ShotTarget, "Shooting Towards Goal");


                PlayerScript.ChangeState(CallingObject, Wait.Instance());

                PlayerScript.FindSupport();

                return;
            }
        }

        KickPower = PlayerScript.PassingForce * dot;

        Player  Reciever      = null;
        Vector3 PassingTarget = new Vector3();



        //Attempt to pass to player
        if (PlayerScript.IsThreatened() && PlayerScript.GetTeam().FindPass(PlayerScript, out Reciever, out PassingTarget, KickPower))
        {
            float FacingPassingPlayerDot = Vector3.Dot(CallingObject.transform.right, (PassingTarget - CallingObject.transform.position).normalized);

            if (dot < 0.7f) //not facing the player
            {
                PlayerScript.FindSupport();

                PlayerScript.ChangeState(CallingObject, Dribble.Instance());

                return;
            }


            Vector2 PassTarget = PlayerScript.AddNoiseToTarget(PassingTarget); //TODO **** Make sure this works! *****

            //Get the direction of the shot
            Vector2 KickDir = (PassTarget - (Vector2)PlayerScript.Ball.transform.position).normalized;

            //Add force to the ball
            PlayerScript.Ball.GetComponent <Football>().AddForce(KickDir * KickPower, PassTarget, "Passing To Player Indepentently");



            //GCHandle Handle = GCHandle.Alloc(PassTarget);
            //System.IntPtr PositionPtr = (System.IntPtr)Handle;

            Dispatcher.Instance().DispatchMessage(0, CallingObject, Reciever.gameObject, PlayerMessages.ReceiveBall, PassTarget);

            PlayerScript.ChangeState(CallingObject, Wait.Instance());

            PlayerScript.FindSupport();

            return;
        }
        else
        {
            PlayerScript.FindSupport();

            PlayerScript.ChangeState(CallingObject, Dribble.Instance());
        }
    }