// Update is called once per frame void FixedUpdate() { if (ArbiterFls == null) { ArbiterFls = new ArbiterFLS(); } if (ArbiterRobot != null) { hits = Physics.OverlapSphere(ArbiterRobot.transform.position, RobotBallRadius, 1 << 10); if (hits.Length == 1) { Collider bestTeamMate = null; var shoot = GetShootStatus(); var pass = GetPassStatus(out bestTeamMate); var ballX = (ArbiterRobot.Team.Team == TeamController.TEAM.RED) ? (-Ball.transform.position.z) : Ball.transform.position.z; var ballY = Ball.transform.position.x; var priority = ArbiterFls.GetPriority(shoot, pass, ballX, ballY); if (priority > 68) { Action = ACTION.SHOOT; var ArbiterBallOrientation = Angle.ComputeRelativeAngle(ArbiterRobot.transform.eulerAngles.y, ArbiterRobot.transform.position.x, ArbiterRobot.transform.position.y, Ball.transform.position.x, Ball.transform.position.y); var ArbiterGoalOrientation = Angle.ComputeRelativeAngle(ArbiterRobot.transform.eulerAngles.y, ArbiterRobot.transform.position.x, ArbiterRobot.transform.position.y, ArbiterRobot.Team.OpponentGoal.transform.position.x, ArbiterRobot.Team.OpponentGoal.transform.position.y); //Ball is front of robot if (Math.Abs(ArbiterBallOrientation) <= 22) { if (Math.Abs(ArbiterGoalOrientation) <= 20) { ArbiterRobot.Shove = true; } else { ArbiterRobot.Spin = (ArbiterGoalOrientation < 0) ? -1 : 1; } } else { ArbiterRobot.Spin = (ArbiterGoalOrientation < 0) ? -1 : 1; } } else if (priority > 34) { Action = ACTION.PASS; var ArbiterBallOrientation = Angle.ComputeRelativeAngle(ArbiterRobot.transform.eulerAngles.y, ArbiterRobot.transform.position.x, ArbiterRobot.transform.position.y, Ball.transform.position.x, Ball.transform.position.y); //Ball is front of robot if (Math.Abs(ArbiterBallOrientation) <= 10) { if (bestTeamMate != null) { var ArbiterTeamMateOrientation = Angle.ComputeRelativeAngle(ArbiterRobot.transform.eulerAngles.y, ArbiterRobot.transform.position.x, ArbiterRobot.transform.position.y, bestTeamMate.gameObject.transform.position.x, bestTeamMate.gameObject.transform.position.y); if (Math.Abs(ArbiterTeamMateOrientation) <= 20) { ArbiterRobot.Shove = true; } else { ArbiterRobot.Spin = (ArbiterTeamMateOrientation < 0) ? -1 : 1; } } } else { if (bestTeamMate != null) { var ArbiterTeamMateOrientation = Angle.ComputeRelativeAngle(ArbiterRobot.transform.eulerAngles.y, ArbiterRobot.transform.position.x, ArbiterRobot.transform.position.y, bestTeamMate.gameObject.transform.position.x, bestTeamMate.gameObject.transform.position.y); ArbiterRobot.Spin = (ArbiterTeamMateOrientation < 0) ? -1 : 1; } } } else { Action = ACTION.DRIBBLE; ArbiterRobot.DestX = ArbiterRobot.Team.OpponentGoal.transform.position.x; ArbiterRobot.DestY = ArbiterRobot.Team.OpponentGoal.transform.position.z; } } else { //Move towards ball ArbiterRobot.DestX = Ball.transform.position.x; ArbiterRobot.DestY = Ball.transform.position.z; } } }
// Use this for initialization void Start() { this.ArbiterFls = new ArbiterFLS(); }