コード例 #1
0
    // 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;
            }
        }
    }
コード例 #2
0
 // Use this for initialization
 void Start()
 {
     this.ArbiterFls = new ArbiterFLS();
 }