public override void OnTriggerEnter(Cornerback_Controller_FSM cornerback, Collider2D other) { if (other.gameObject.tag == "Ball") { Transform ballGo = other.gameObject.transform.parent; //check the height of the ball //Debug.Log("Ball height: " + "<color=green><b> " + ballGo.transform.position.z + "</b></color>"); bool canCatchBall = ballGo.transform.position.z <= GameManager.Instance.catchableHeight; //try to catch ball if (canCatchBall) { other.gameObject.tag = "BallCaught"; ballGo.parent = cornerback.transform; ballGo.transform.position = cornerback.transform.position; //baselines BallBug Test Rigidbody ballRb = ballGo.GetComponent <Rigidbody>(); ballRb.isKinematic = true; cornerback.TransitionToState(cornerback.ballCaught_State); } else { cornerback.TransitionToState(cornerback.cover_State); } } }
IEnumerator ApplyRotation(Cornerback_Controller_FSM cornerback) { yield return(new WaitForSeconds(cornerback.reactionDelay)); GetRotation(cornerback); doReact = true; }
public override void Update(Cornerback_Controller_FSM cornerback) { Vector2 localRight = cornerback.transform.rotation * Vector2.right; cornerback.myRb.AddForce(localRight * cornerback.speed * Time.deltaTime); //float angle = Vector2.SignedAngle(Vector2.left - (Vector2)cornerback.transform.position, new Vector2(1.0f, 0.0f)); float angle = Vector2.SignedAngle(Vector2.left, new Vector2(1.0f, 0.0f)); cornerback.myRb.MoveRotation(Mathf.LerpAngle(cornerback.myRb.rotation, -angle, cornerback.rotationSpeed * Time.deltaTime)); }
public override void Update(Cornerback_Controller_FSM cornerback) { Vector2 localRight = cornerback.transform.rotation * Vector2.right; cornerback.myRb.AddForce(localRight * cornerback.speed * Time.deltaTime); //it should be the best strategy to intecept the ball if the cornerback tries to head into //the direction where the ball is going Vector3 ballDir = cornerback.ball_controller.target.position; float angle = Vector2.SignedAngle(ballDir - cornerback.transform.position, new Vector2(1.0f, 0.0f)); cornerback.myRb.MoveRotation(Mathf.LerpAngle(cornerback.myRb.rotation, -angle, cornerback.rotationSpeed * Time.deltaTime)); }
public override void Update(Cornerback_Controller_FSM cornerback) { Vector2 localRight = cornerback.transform.rotation * Vector2.right; cornerback.myRb.AddForce(localRight * cornerback.speed * Time.deltaTime); //mechanism to simulate reaction time for cornerback if (doReact == true) { cornerback.StartCoroutine(ApplyRotation(cornerback)); doReact = false; } //try to intercept the ball if its in the air if (cornerback.qB_Controller.Receiver_current == cornerback.PlayerToCover.gameObject) { //here we make sure that onlt the right cornerback tries to intercept the ball //if (cornerback.ball_controller.launched == true) if (GameManager.Instance.ballLaunched == true) { cornerback.TransitionToState(cornerback.intercept_State); } } }
public override void OnCollisionExit(Cornerback_Controller_FSM cornerback, Collision2D other) { }
private void GetRotation(Cornerback_Controller_FSM cornerback) { float angle = Vector2.SignedAngle(cornerback.PlayerToCover.position - cornerback.transform.position, new Vector2(1.0f, 0.0f)); cornerback.myRb.MoveRotation(-angle); }
public override void EnterState(Cornerback_Controller_FSM cornerback) { GetRotation(cornerback); doReact = true; }
public abstract void Update(Cornerback_Controller_FSM cornerback);
public abstract void CleanUp(Cornerback_Controller_FSM cornerback);
public abstract void OnTriggerExit(Cornerback_Controller_FSM cornerback, Collider2D other);
public abstract void OnCollisionExit(Cornerback_Controller_FSM cornerback, Collision2D other);
public override void EnterState(Cornerback_Controller_FSM cornerback) { //set the Game to be reset GameManager.Instance.ballIntercepted = true; }
public override void CleanUp(Cornerback_Controller_FSM cornerback) { cornerback.speed -= 1; }
public override void OnTriggerExit(Cornerback_Controller_FSM cornerback, Collider2D other) { }
public abstract void EnterState(Cornerback_Controller_FSM cornerback);
public override void CleanUp(Cornerback_Controller_FSM cornerback) { }
public override void EnterState(Cornerback_Controller_FSM cornerback) { cornerback.speed += 1; }