示例#1
0
    public void HitBallAction(GameObject actionUser)
    {
        //BATTER TURN
        GameObject      batter = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.BATTER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.BATTER));
        BatterBehaviour batterBehaviourScript = PlayerUtils.FetchBatterBehaviourScript(batter);

        batterBehaviourScript.IsReadyToSwing     = true;
        batterBehaviourScript.IsSwingHasFinished = false;

        if (PlayerUtils.HasBatterPosition(batter))
        {
            PlayerStatus playerStatusScript = PlayerUtils.FetchPlayerStatusScript(batter);
            batterBehaviourScript.CalculateBatterColliderInterraction(PitcherGameObject, BallControllerScript, playerStatusScript);
        }
    }
示例#2
0
    public void CatchBallAction(GameObject actionUser)
    {
        //CATCHER TURN
        GameObject       catcher                       = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.CATCHER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.CATCHER));
        PlayerStatus     catcherStatusScript           = PlayerUtils.FetchPlayerStatusScript(catcher);
        CatcherBehaviour genericCatcherBehaviourScript = ((CatcherBehaviour)PlayerUtils.FetchCorrespondingPlayerBehaviourScript(catcher, catcherStatusScript));

        genericCatcherBehaviourScript.CalculateCatcherColliderInterraction(PitcherGameObject, ballGameObject, ballControllerScript);
    }
    public void CalculateCatcherColliderInterraction(GameObject pitcherGameObject, GameObject ballGameObject, BallController ballControllerScript)
    {
        GameManager        gameManager            = GameUtils.FetchGameManager();
        GameObject         currentBatter          = gameManager.AttackTeamBatterListClone.First();
        BatterBehaviour    currentBatterBehaviour = PlayerUtils.FetchBatterBehaviourScript(currentBatter);
        GameObject         bat = currentBatterBehaviour.EquipedBat;
        PlayerStatus       currentBatterStatus = PlayerUtils.FetchPlayerStatusScript(currentBatter);
        PlayersTurnManager playersTurnManager  = GameUtils.FetchPlayersTurnManager();
        GameObject         pitcher             = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.PITCHER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.PITCHER));

        float catchSuccesRate = ActionCalculationUtils.CalculateCatchSuccessRate(this.gameObject, pitcherGameObject);

        if (!ActionCalculationUtils.HasActionSucceeded(catchSuccesRate))
        {
            ballControllerScript.Target    = null;
            ballControllerScript.IsPitched = false;
            ballControllerScript.Target    = FieldUtils.GetTileCenterPositionInGameWorld(FieldUtils.GetCathcherOutBallZonePosition());

            if (currentBatterBehaviour.StrikeOutcomeCount == 3)
            {
                RunnerBehaviour runnerBehaviour = currentBatterBehaviour.ConvertBatterToRunner(currentBatterStatus);
                currentBatterBehaviour.AddRunnerAbilitiesToBatter(currentBatter);

                //Not realy hit but rather not catch properly!!!!!
                ballControllerScript.IsHit          = true;
                currentBatterStatus.IsAllowedToMove = true;
                runnerBehaviour.EnableMovement      = true;
                this.SetUpNewBatter(gameManager);
                bat.GetComponent <CapsuleCollider2D>().enabled = false;
                StartCoroutine(this.WaitForPeriod(4f));
            }
            else
            {
                gameManager.ReinitPitcher(pitcher);
                gameManager.ReturnBallToPitcher(ballControllerScript.gameObject);
                gameManager.ReinitRunners(gameManager.AttackTeamRunnerList);
                currentBatter.transform.rotation  = Quaternion.identity;
                bat.transform.position            = FieldUtils.GetBatCorrectPosition(currentBatter.transform.position);
                bat.transform.rotation            = Quaternion.Euler(0f, 0f, -70f);
                playersTurnManager.TurnState      = TurnStateEnum.PITCHER_TURN;
                PlayersTurnManager.IsCommandPhase = true;
            }
        }
        else
        {
            bool isInWalkState = false;

            ballGameObject.SetActive(false);
            ballControllerScript.CurrentHolder = this.gameObject;

            if (currentBatterBehaviour.StrikeOutcomeCount == 3)
            {
                currentBatter.SetActive(false);
                gameManager.AttackTeamBatterListClone.Remove(currentBatter);
                this.SetUpNewBatter(gameManager);
                currentBatterBehaviour.StrikeOutcomeCount = 0;
                currentBatterBehaviour.BallOutcomeCount   = 0;
                gameManager.BatterOutCount++;
            }
            else if (currentBatterBehaviour.BallOutcomeCount == 4)
            {
                isInWalkState = true;

                RunnerBehaviour newRunnerBehaviour = currentBatterBehaviour.ConvertBatterToRunner(currentBatterStatus);
                currentBatterBehaviour.AddRunnerAbilitiesToBatter(currentBatter);

                newRunnerBehaviour.IsInWalkState          = isInWalkState;
                currentBatterStatus.IsAllowedToMove       = true;
                newRunnerBehaviour.EnableMovement         = true;
                currentBatterBehaviour.StrikeOutcomeCount = 0;
                currentBatterBehaviour.BallOutcomeCount   = 0;
                this.SetUpNewBatter(gameManager);
            }
            else
            {
                currentBatter.transform.rotation = Quaternion.identity;
                bat.transform.position           = FieldUtils.GetBatCorrectPosition(currentBatter.transform.position);
                bat.transform.rotation           = Quaternion.Euler(0f, 0f, -70f);
            }


            gameManager.ReinitPitcher(pitcher);
            gameManager.ReturnBallToPitcher(ballControllerScript.gameObject);
            gameManager.ReinitRunners(gameManager.AttackTeamRunnerList);

            bool isInningHalfEnd = gameManager.BatterOutCount == 3;

            if (isInningHalfEnd)
            {
                //Team switch attack/defense
                gameManager.BatterOutCount = 0;
                gameManager.ProcessNextInningHalf();
            }

            if (!isInWalkState && !isInningHalfEnd)
            {
                playersTurnManager.TurnState      = TurnStateEnum.PITCHER_TURN;
                PlayersTurnManager.IsCommandPhase = true;
            }
        }
    }
示例#4
0
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (ColliderUtils.HasBallCollided(collision) && !GameData.isPaused)
        {
            GameObject     ball = collision.gameObject;
            BallController ballControllerScript = BallUtils.FetchBallControllerScript(ball);

            if (ballControllerScript.IsHit)
            {
                timeElapsed += Time.deltaTime;

                if (timeElapsed >= TIME_TO_WAIT_IN_FOUL_ZONE)
                {
                    Debug.Log("the ball is foul");
                    timeElapsed = 0;

                    DialogBoxManager dialogBoxManagerScript = GameUtils.FetchDialogBoxManager();
                    dialogBoxManagerScript.DisplayDialogAndTextForGivenAmountOfTime(1f, false, "FOUL!!");
                    PlayersTurnManager playersTurnManager     = GameUtils.FetchPlayersTurnManager();
                    GameObject         pitcher                = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.PITCHER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.PITCHER));
                    GameManager        gameManager            = GameUtils.FetchGameManager();
                    GameObject         currentBatter          = gameManager.AttackTeamBatterListClone.First();
                    BatterBehaviour    currentBatterBehaviour = PlayerUtils.FetchBatterBehaviourScript(currentBatter);
                    GameObject         bat = currentBatterBehaviour.EquipedBat;
                    currentBatterBehaviour.FoulOutcomeCount += 1;
                    currentBatter.transform.rotation         = Quaternion.identity;
                    bat.transform.position = FieldUtils.GetBatCorrectPosition(currentBatter.transform.position);
                    bat.transform.rotation = Quaternion.Euler(0f, 0f, -70f);
                    gameManager.ReinitPitcher(pitcher);
                    gameManager.ReturnBallToPitcher(ballControllerScript.gameObject);
                    gameManager.ReinitRunners(gameManager.AttackTeamRunnerList);
                    ballControllerScript.IsInFoulState = false;
                    playersTurnManager.TurnState       = TurnStateEnum.PITCHER_TURN;
                    PlayersTurnManager.IsCommandPhase  = true;
                }
            }
        }
    }
    // Update is called once per frame
    void Update()
    {
        if (CommandMenuManager.isMenuDisplayEnabled && !TargetSelectionManager.IsActivated)
        {
            PlayerAbilities playerAbilitiesScript = null;

            switch (this.TurnState)
            {
            case TurnStateEnum.STANDBY:
                break;

            case TurnStateEnum.PITCHER_TURN:
                GameObject pitcher = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.PITCHER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.PITCHER));
                playerAbilitiesScript = PlayerUtils.FetchPlayerAbilitiesScript(pitcher);
                break;

            case TurnStateEnum.BATTER_TURN:
                GameObject batter = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.BATTER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.BATTER));
                playerAbilitiesScript = PlayerUtils.FetchPlayerAbilitiesScript(batter);
                break;

            case TurnStateEnum.RUNNER_TURN:
                GameObject runner = this.GetNextRunner();
                if (runner != null)
                {
                    playerAbilitiesScript = PlayerUtils.FetchPlayerAbilitiesScript(runner);
                }
                break;

            case TurnStateEnum.CATCHER_TURN:
                GameObject catcher = TeamUtils.GetPlayerTeamMember(PlayerFieldPositionEnum.CATCHER, TeamUtils.GetPlayerIdFromPlayerFieldPosition(PlayerFieldPositionEnum.CATCHER));
                playerAbilitiesScript = PlayerUtils.FetchPlayerAbilitiesScript(catcher);
                break;

            case TurnStateEnum.FIELDER_TURN:
                GameObject fielder = TeamUtils.GetPlayerTeamMember(CurrentFielderTypeTurn, TeamUtils.GetPlayerIdFromPlayerFieldPosition(CurrentFielderTypeTurn));
                playerAbilitiesScript = PlayerUtils.FetchPlayerAbilitiesScript(fielder);
                break;

            default:
                break;
            }

            if (playerAbilitiesScript != null)
            {
                CameraController.FocusOnPlayer(playerAbilitiesScript.gameObject.transform);
                CommandMenuManager.GenerateCommandMenu(playerAbilitiesScript);
            }
        }
    }