/** * 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()); } } }
// 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); }
public static ChaseBall Instance() { if (instance == null) { instance = new ChaseBall(); } return(instance); }
private ChaseBall() { if (_instance != null) { return; } _instance = this; }
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); }
private void Awake() { if (instance == null) { instance = this; } else if (instance != this) { Destroy(this.gameObject); } DontDestroyOnLoad(this.gameObject); }
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); }
/** * 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"); } }
/** * 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; } }
// 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); }
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); }
/** * 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()); } }
/** * 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()); }
/** * 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; } }
/** * 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()); } }