public void FixedUpdate()
    {
        /* First find the position of the ball on the x axis and than compare it
         * with the state boundary which is the point where the states meet.
         * There is no need to make different states for the y axis since
         * the AI should change its behaviour based on how far away/close he is
         * from its own and from the opponents goal.
         */

        AIBasicBehaviour.Sprint(player, 0);

        xPos = ball.transform.position.x;
        if (xPos >= boundary)
        {
            defendState.Run();
        }
        else if (xPos < boundary && xPos > 0)
        {
            tackleState.Run();
        }
        else if (xPos < 0 && xPos > -boundary)
        {
            attackState.Run();
        }
        else if (xPos <= -boundary)
        {
            shootState.Run();
        }
    }
    public static void MoveBackward(GameObject player)
    {
        // Works the same as above but x and y are flipped
        Vector2 dir = AIDirectionBehaviour.GetRotationVector(player);

        AIBasicBehaviour.GetController(player).playerController.playerMovement.MovePlayer(-dir.x, -dir.y);
    }
Exemple #3
0
 public new void RunOnePosition()
 {
     /* OGoal | AI | Ball | Player | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         if (AICheckBehaviour.CheckOpponentsHealth(opponent))
         {
             AIMovementBehaviour.LookAt(player, opponent);
             AIBasicBehaviour.UseGun(player);
         }
         else if (AICheckBehaviour.CheckIfCloseToPickup(GetActivePickups(), player))
         {
             AIMovementBehaviour.LookAt(player, AICheckBehaviour.GetClosestPickup(GetActivePickups(), GetActiveCount(), player));
             AIMovementBehaviour.MoveForward(player);
         }
         else
         {
             AIGlobalBehaviour.PositionAndShoot(player, ball, aIController.lineOfSight.GetAvailablePoint());
         }
     }
     else
     {
         AIGlobalBehaviour.PositionAndShoot(player, ball, aIController.lineOfSight.GetAvailablePoint());
     }
 }
 public new void RunOnePosition()
 {
     /* OGoal | AI | Ball | Player | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         AIBasicBehaviour.Sprint(player, 1);
         if (AICheckBehaviour.CheckIfCloseToPickup(GetActivePickups(), player))
         {
             AIMovementBehaviour.LookAt(player, AICheckBehaviour.GetClosestPickup(GetActivePickups(), GetActiveCount(), player));
             AIMovementBehaviour.MoveForward(player);
         }
         else
         {
             AIMovementBehaviour.LookAt(player, opponent);
             AIBasicBehaviour.UseGun(player);
             AIMovementBehaviour.MoveTowards(player, ball);
         }
     }
     else
     {
         AIBasicBehaviour.Sprint(player, 1);
         AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
     }
 }
 public new void RunTwoPosition()
 {
     /* OGoal | Player | Ball | AI | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         if (AICheckBehaviour.CheckIfCloseToOpponent(player, opponent))
         {
             AIMovementBehaviour.LookAt(player, opponent);
             AIBasicBehaviour.UseSword(player);
             AIMovementBehaviour.MoveTowards(player, ball);
         }
         else if (AICheckBehaviour.CheckOpponentsHealth(opponent))
         {
             AIMovementBehaviour.LookAt(player, opponent);
             AIBasicBehaviour.UseGun(player);
             AIMovementBehaviour.MoveTowards(player, ball);
         }
         else
         {
             AIMovementBehaviour.LookAt(player, ball);
             AIBasicBehaviour.UseGun(player);
             AIMovementBehaviour.MoveTowards(player, ball);
         }
     }
     else
     {
         if (AICheckBehaviour.CheckIfBallApproaching(player, ball))
         {
             AIBasicBehaviour.UseShield(player);
         }
         AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
     }
 }
    public new void RunThreePosition()
    {
        /* OGoal | Player, AI | Ball | AIGoal
         */

        if (AICheckBehaviour.FarFromBall(player, ball))
        {
            AIBasicBehaviour.Sprint(player, 1);
            if (AICheckBehaviour.CheckIfCloseToOpponent(player, opponent))
            {
                AIMovementBehaviour.LookAt(player, opponent);
                AIBasicBehaviour.UseSword(player);
                AIMovementBehaviour.MoveTowards(player, ball);
            }
            else if (AICheckBehaviour.CheckOpponentsHealth(opponent))
            {
                AIMovementBehaviour.LookAt(player, opponent);
                AIBasicBehaviour.UseGun(player);
                AIMovementBehaviour.MoveTowards(player, ball);
            }
            else
            {
                AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
            }
        }
        else
        {
            AIBasicBehaviour.Sprint(player, 1);
            // Move towards the ball as fast as possible.
            AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
        }
    }
Exemple #7
0
 public new void RunThreePosition()
 {
     /* OGoal | Player, AI | Ball | AIGoal
      */
     AIBasicBehaviour.Sprint(player, 1);
     AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
 }
Exemple #8
0
    public static void ShootInTheMiddle(GameObject player, GameObject ball, GameObject goal)
    {
        /* Same as ShootAtGoal method but this time the player kicks the towards the middle of
         * the football pitch.
         */
        Vector2 goalDirection = AIDirectionBehaviour.FindPositionOf(ball, goal, 0.9f);

        AIMovementBehaviour.LookAt(player, ball);
        if (AICalculate.CalculateLengthBetween(player, ball.transform.position.x, ball.transform.position.y) < 2) // If player is close to the ball
        {
            if (AICalculate.CalculateLengthBetween(player, goalDirection.x, goalDirection.y) > 0.3)
            {
                PositionInFrontOf(player, ball, goal);
            }
            else
            {
                AIMovementBehaviour.LookAt(player, player.transform.position.x, player.GetComponent <PlayerController>().globalSettings.stateBoundary);
                AIBasicBehaviour.UseSword(player);
            }
        }
        else
        {
            AIMovementBehaviour.MoveForward(player);
        }
    }
Exemple #9
0
    // Should be used as the default behaviour.
    public static void PositionAndShoot(GameObject player, GameObject ball, GameObject goal)
    {
        /* First a position of the goal is found, then player is rotated to face the ball.
         * Next distance from the player to the point from which he would be able to shoot is found.
         * Then the player is moved closer to it or uses a sword to shot at the goal. */
        AIMovementBehaviour.LookAt(player, ball);

        Vector2 goalDirection = AIDirectionBehaviour.FindPositionOf(ball, goal, 0.9f);                            // The point where player should position itself

        if (AICalculate.CalculateLengthBetween(player, ball.transform.position.x, ball.transform.position.y) < 2) // If player is close to the ball
        {
            if (AICalculate.CalculateLengthBetween(player, goalDirection.x, goalDirection.y) > 0.3)
            {
                PositionInFrontOf(player, ball, goal);
            }
            else
            {
                AIBasicBehaviour.UseSword(player);
            }
        }
        else
        {
            AIMovementBehaviour.MoveForward(player);
        }
    }
Exemple #10
0
 public new void RunTwoPosition()
 {
     /* OGoal | Player | Ball | AI | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         AIBasicBehaviour.Sprint(player, 1);
         if (aIController.lineOfSight.CheckIfBallSpotted())
         {
             AIMovementBehaviour.LookAt(player, ball);
             AIBasicBehaviour.UseGun(player);
             AIMovementBehaviour.MoveTowards(player, ball);
         }
         else
         {
             AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
         }
     }
     else
     {
         if (AICheckBehaviour.CheckIfBallApproaching(player, ball))
         {
             AIBasicBehaviour.UseShield(player);
         }
         AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
     }
 }
    public static void MoveForward(GameObject player)
    {
        /* This method moves player forward but it does not
         * take care of the direction. To make the player run to the ball
         * use RunToTheBall method.
         */

        Vector2 dir = AIDirectionBehaviour.GetRotationVector(player);

        AIBasicBehaviour.GetController(player).playerController.playerMovement.MovePlayer(dir.x, dir.y);
    }
    public static void LookAt(GameObject player, GameObject o)
    {
        /* This method makes the player look at the object.
         * This is usually used to make the player look at the ball.
         * First, the position of the object we want to look at, in regards of the player
         * is found and then the player is rotated.
         */
        float x = o.transform.position.x - player.transform.position.x;
        float y = o.transform.position.y - player.transform.position.y;

        AIBasicBehaviour.GetController(player).playerRotator.Rotate(x, y);
    }
Exemple #13
0
 public new void RunTwoPosition()
 {
     /* OGoal | Player | Ball | AI | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         AIBasicBehaviour.Sprint(player, 1);
         AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
     }
     else
     {
         if (AICheckBehaviour.CheckIfBallApproaching(player, ball))
         {
             AIBasicBehaviour.UseShield(player);
         }
         AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
     }
 }
Exemple #14
0
 public new void RunZeroPosition()
 {
     /* OGoal | Ball | Player, AI | AIGoal
      */
     if (AICheckBehaviour.FarFromBall(player, ball))
     {
         if (aIController.lineOfSight.CheckIfBallSpotted())
         {
             AIMovementBehaviour.LookAt(player, ball);
             AIBasicBehaviour.UseGun(player);
         }
     }
     if (aIController.lineOfSight.CheckIfWallSpotted())
     {
         AIGlobalBehaviour.ShootInTheMiddle(player, ball, goal);
     }
     else
     {
         AIGlobalBehaviour.PositionAndShoot(player, ball, aIController.lineOfSight.GetAvailablePoint());
     }
 }
    public new void RunZeroPosition()
    {
        /* OGoal | Ball | Player, AI | AIGoal
         */


        if (AICheckBehaviour.FarFromBall(player, ball))
        { // If far from ball
            if (aIController.lineOfSight.CheckIfWallSpotted())
            {
                AIGlobalBehaviour.ShootInTheMiddle(player, ball, goal);
            }
            else
            {
                AIGlobalBehaviour.PositionAndShoot(player, ball, aIController.lineOfSight.GetAvailablePoint());
            }
        }
        else
        {
            // If close to a pickup - move towards it

            if (aIController.lineOfSight.CheckIfBallSpotted())
            {
                AIMovementBehaviour.LookAt(player, ball);
                AIBasicBehaviour.UseGun(player);
                AIMovementBehaviour.MoveTowards(player, ball);
            }
            else if (AICheckBehaviour.CheckIfCloseToPickup(GetActivePickups(), player))
            {
                AIMovementBehaviour.LookAt(player, AICheckBehaviour.GetClosestPickup(GetActivePickups(), GetActiveCount(), player));
                AIMovementBehaviour.MoveForward(player);
            }
            else
            {
                AIGlobalBehaviour.PositionAndShoot(player, ball, aIController.lineOfSight.GetAvailablePoint());
            }
        }
    }
    public new void RunThreePosition()
    {
        /* OGoal | Player, AI | Ball | AIGoal
         */

        if (AICheckBehaviour.FarFromBall(player, ball))
        {
            if (AICheckBehaviour.CheckIfCloseToOpponent(player, opponent))
            {
                AIMovementBehaviour.LookAt(player, opponent);
                AIBasicBehaviour.UseSword(player);
            }
            AIBasicBehaviour.Sprint(player, 1);
            AIMovementBehaviour.LookAt(player, opponent);
            AIBasicBehaviour.UseGun(player);
            AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
        }
        else
        {
            AIBasicBehaviour.Sprint(player, 1);
            AIGlobalBehaviour.PositionAndShoot(player, ball, goal);
        }
    }
 public static void MoveForward(GameObject player, float x, float y)
 {
     /* x and y are not the position of the object but the vector towards it.
      */
     AIBasicBehaviour.GetController(player).playerController.playerMovement.MovePlayer(x, y);
 }
 public static void LookAt(GameObject player, float x, float y)
 {
     AIBasicBehaviour.GetController(player).playerRotator.Rotate(x - player.transform.position.x, y - player.transform.position.y);
 }