public static PlayersTurnManager FetchPlayersTurnManager() { GameObject playersTurnManagerObject = GameObject.FindGameObjectWithTag(TagsConstants.PLAYERS_TURN_MANAGER_TAG); PlayersTurnManager playersTurnManager = playersTurnManagerObject.GetComponent <PlayersTurnManager>(); return(playersTurnManager); }
public void GoToNextBase(BaseEnum currentBase, bool isAutomaticCommand = false) { Debug.Log(this.name + " go to next base"); this.IsStaying = false; PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, TurnAvailabilityEnum.WAITING); Vector3 nextPosition = this.GetNextBasePosition(currentBase); this.Target = nextPosition; this.EnableMovement = true; GameManager gameManager = GameUtils.FetchGameManager(); if (!isAutomaticCommand) { Debug.Log(this.name + " proceed manually"); this.CalculateNextAction(); } else if (isAutomaticCommand && gameManager.AttackTeamRunnerList.Count > 1) { if (this.gameObject.Equals(playersTurnManager.GetNextRunnerTakingAction())) { playersTurnManager.IsSkipNextRunnerTurnEnabled = true; } Debug.Log(this.name + " proceed automaticaly"); playersTurnManager.TurnState = TurnStateEnum.RUNNER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
private void DoBattingAction(BallController ballControllerScript, PlayerStatus playerStatusScript, float pitchSuccesRate) { PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); if (!ActionCalculationUtils.HasActionSucceeded(pitchSuccesRate)) { this.EquipedBat.GetComponent <CapsuleCollider2D>().enabled = false; ballControllerScript.IsPitched = false; ballControllerScript.IsHit = true; GameObject homeBase = GameUtils.FetchBaseGameObject(TagsConstants.HOME_BASE_TAG); List <Vector2Int> ballPositionList = ActionCalculationUtils.CalculateBallFallPositionList(this.gameObject, 0, (int)MathUtils.HALF_CIRCLE_ANGLE_IN_DEGREE, 10, true, FieldUtils.GetGameObjectTilePositionOnField(homeBase)); int ballPositionIndex = Random.Range(0, ballPositionList.Count - 1); Vector2Int ballTilePosition = ballPositionList[ballPositionIndex]; ballControllerScript.StopCoroutine(ballControllerScript.MovementCoroutine); ballControllerScript.Target = FieldUtils.GetTileCenterPositionInGameWorld(ballTilePosition); Vector2 direction = MathUtils.CalculateDirection(ballControllerScript.gameObject.transform.position, ballControllerScript.Target.Value); float ballDirectionAngle = MathUtils.CalculateDirectionAngle(direction); Vector3 firstBasePosition = FieldUtils.GetTileCenterPositionInGameWorld(FieldUtils.GetFirstBaseTilePosition()); Vector3 homeBasePosition = FieldUtils.GetTileCenterPositionInGameWorld(FieldUtils.GetHomeBaseTilePosition()); float homeBaseToFirstBaseDistance = Vector3.Distance(homeBasePosition, firstBasePosition); Vector3 rigthSideFictionalPosition = new Vector3(firstBasePosition.x, homeBasePosition.y, 0); float homeBaseToRigthSideFictionalDistance = Vector3.Distance(homeBasePosition, rigthSideFictionalPosition); float foulZoneAngle = Mathf.Acos(homeBaseToRigthSideFictionalDistance / homeBaseToFirstBaseDistance); //Fix calcul when the ball go to the left zone if (ballDirectionAngle < MathUtils.HALF_CIRCLE_ANGLE_IN_DEGREE - foulZoneAngle * Mathf.Rad2Deg && ballDirectionAngle > foulZoneAngle * Mathf.Rad2Deg) { RunnerBehaviour runnerBehaviour = this.ConvertBatterToRunner(playerStatusScript); this.AddRunnerAbilitiesToBatter(this.gameObject); playerStatusScript.IsAllowedToMove = true; runnerBehaviour.EnableMovement = true; } playersTurnManager.IsRunnersTurnsDone = false; StartCoroutine(this.WaitToEnableBatCollider()); } else { float ballOutcomeRate = ActionCalculationUtils.CalculateBallOutcomeProbability(ballControllerScript.CurrentPitcher); bool isBallOutcome = ActionCalculationUtils.HasActionSucceeded(ballOutcomeRate); DialogBoxManager dialogBoxManagerScript = GameUtils.FetchDialogBoxManager(); string outcomeMessage; if (!isBallOutcome) { StrikeOutcomeCount++; outcomeMessage = "STRIKE!!!"; } else { BallOutcomeCount++; outcomeMessage = "BALL!!!"; } ballControllerScript.IsPitched = true; ballControllerScript.Target = FieldUtils.GetTileCenterPositionInGameWorld(FieldUtils.GetCatcherZonePosition()); dialogBoxManagerScript.DisplayDialogAndTextForGivenAmountOfTime(1f, false, outcomeMessage); } }
public void TagOutRunner(GameObject targetToTagOut) { PlayerStatus newBatterStatus = null; GameManager gameManager = GameUtils.FetchGameManager(); DialogBoxManager dialogBoxManagerScript = GameUtils.FetchDialogBoxManager(); PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); RunnerBehaviour tagOutRunnerBehaviourScript = PlayerUtils.FetchRunnerBehaviourScript(targetToTagOut); int batterCount = gameManager.AttackTeamBatterListClone.Count; //test in case there no one left to pick if (batterCount > 0) { GameObject newBatter = gameManager.AttackTeamBatterListClone.First(); newBatterStatus = PlayerUtils.FetchPlayerStatusScript(newBatter); BatterBehaviour newbatterBehaviourScript = PlayerUtils.FetchBatterBehaviourScript(newBatter); newbatterBehaviourScript.EquipedBat = tagOutRunnerBehaviourScript.EquipedBat; newBatter.SetActive(true); } dialogBoxManagerScript.DisplayDialogAndTextForGivenAmountOfTime(1f, false, "TAG OUT !!!!!!!"); tagOutRunnerBehaviourScript.EquipedBat = null; gameManager.AttackTeamRunnerList.Remove(targetToTagOut); targetToTagOut.SetActive(false); playersTurnManager.UpdatePlayerTurnQueue(targetToTagOut); int runnersCount = gameManager.AttackTeamRunnerList.Count; bool isRunnersAllSafeAndStaying = gameManager.AttackTeamRunnerList.TrueForAll(runner => { RunnerBehaviour runnerBehaviour = PlayerUtils.FetchRunnerBehaviourScript(runner); return(runnerBehaviour.IsSafe && runnerBehaviour.IsStaying); }); if (runnersCount == 0 && batterCount == 0 || batterCount == 0 && runnersCount > 0 && isRunnersAllSafeAndStaying) { gameManager.ProcessNextInningHalf(); } else if (runnersCount == 0 && batterCount > 0) { StartCoroutine(gameManager.WaitAndReinit(dialogBoxManagerScript, newBatterStatus, FieldBall)); } else if (runnersCount > 0) { if (isRunnersAllSafeAndStaying && batterCount > 0) { StartCoroutine(gameManager.WaitAndReinit(dialogBoxManagerScript, newBatterStatus, FieldBall)); } else { playersTurnManager.TurnState = TurnStateEnum.FIELDER_TURN; PlayersTurnManager.IsCommandPhase = true; } } }
private void OnTriggerEnter2D(Collider2D collision) { if (this.HasBallCollided(collision)) { BallController ballController = BallUtils.FetchBallControllerScript(collision.transform.gameObject); ballController.Target = null; ballController.IsMoving = false; ballController.IsPassed = false; ballController.IsPitched = false; ballController.IsHit = false; PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.BATTER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
public void PassBallAction(GameObject actionUser, GameObject actionTarget) { PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.STANDBY; PlayerStatus actionUserStatus = PlayerUtils.FetchPlayerStatusScript(actionUser); GenericPlayerBehaviour actionUserGenericBehaviour = PlayerUtils.FetchCorrespondingPlayerBehaviourScript(actionUser, actionUserStatus); BallControllerScript.gameObject.transform.SetParent(null); ballGameObject.SetActive(true); BallControllerScript.BallHeight = BallHeightEnum.LOW; BallControllerScript.IsPassed = true; BallControllerScript.IsHit = false; BallControllerScript.Target = actionTarget.transform.position; BallControllerScript.IsHeld = false; BallControllerScript.CurrentPasser = actionUser; actionUserGenericBehaviour.IsHoldingBall = false; }
private void CalculateNextAction() { PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); if (playersTurnManager.IsRunnersTurnsDone) { playersTurnManager.TurnState = TurnStateEnum.STANDBY; PlayersTurnManager.IsCommandPhase = false; GameManager gameManager = GameUtils.FetchGameManager(); gameManager.IsStateCheckAllowed = true; playersTurnManager.IsRunnersTurnsDone = false; } else { playersTurnManager.TurnState = TurnStateEnum.RUNNER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
public void ReplanAction() { GameManager gameManager = GameUtils.FetchGameManager(); bool isRunnersAllSafe = gameManager.AttackTeamRunnerList.TrueForAll(runner => { RunnerBehaviour runnerBehaviour = PlayerUtils.FetchRunnerBehaviourScript(runner); return(runnerBehaviour.IsSafe); }); if (isRunnersAllSafe) { gameManager.IsStateCheckAllowed = true; } else { PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.FIELDER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
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; } } } }
public RunnerBehaviour ConvertBatterToRunner(PlayerStatus batterStatusScript) { PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); GameObject currentBatter = batterStatusScript.gameObject; GameObject bat = PlayerUtils.GetPlayerBatGameObject(currentBatter); GameManager gameManager = GameUtils.FetchGameManager(); RunnerBehaviour runnerBehaviour = currentBatter.AddComponent <RunnerBehaviour>(); gameManager.AttackTeamRunnerList.Add(runnerBehaviour.gameObject); gameManager.AttackTeamRunnerListClone.Add(runnerBehaviour.gameObject); gameManager.AttackTeamBatterListClone.Remove(currentBatter); playersTurnManager.CurrentRunner = runnerBehaviour.gameObject; runnerBehaviour.EquipedBat = bat; bat.SetActive(false); Destroy(currentBatter.GetComponent <BatterBehaviour>()); batterStatusScript.PlayerFieldPosition = PlayerFieldPositionEnum.RUNNER; TeamUtils.AddPlayerTeamMember(PlayerFieldPositionEnum.RUNNER, currentBatter, TeamUtils.GetBaseballPlayerOwner(currentBatter)); int batterCount = gameManager.AttackTeamBatterListClone.Count; if (batterCount > 0) { GameObject nextBatter = gameManager.AttackTeamBatterListClone.First(); gameManager.EquipBatToPlayer(nextBatter); TeamUtils.AddPlayerTeamMember(PlayerFieldPositionEnum.BATTER, nextBatter, TeamUtils.GetBaseballPlayerOwner(nextBatter)); } string runnerNumber = runnerBehaviour.gameObject.name.Split('_').Last(); string newRunnerName = NameConstants.RUNNER_NAME + "_" + runnerNumber; runnerBehaviour.gameObject.name = newRunnerName; playersTurnManager.TurnState = TurnStateEnum.STANDBY; return(runnerBehaviour); }
public void CalculateFielderColliderInterraction(GameObject ballGameObject, BallController ballControllerScript, GenericPlayerBehaviour genericPlayerBehaviourScript) { float passSuccessRate; if (ballControllerScript.IsPassed) { passSuccessRate = ActionCalculationUtils.CalculatePassSuccessRate(this.gameObject, ballControllerScript.CurrentHolder, ballControllerScript.BallHeight); } else { passSuccessRate = 100f; } if (ActionCalculationUtils.HasActionSucceeded(passSuccessRate)) { PlayerActionsManager.InterceptBall(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); PlayerStatus fielderStatus = PlayerUtils.FetchPlayerStatusScript(this.gameObject); PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.FIELDER_TURN; playersTurnManager.CurrentFielderTypeTurn = fielderStatus.PlayerFieldPosition; PlayersTurnManager.IsCommandPhase = true; } }
public void StayOnCurrentBase() { Debug.Log(this.name + " wait on current base"); this.IsStaying = true; PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, TurnAvailabilityEnum.WAITING); IsoRenderer.ReinitializeAnimator(); GameManager gameManager = GameUtils.FetchGameManager(); bool isRunnersAllSafeAndStaying = gameManager.AttackTeamRunnerList.TrueForAll(runner => { RunnerBehaviour runnerBehaviour = PlayerUtils.FetchRunnerBehaviourScript(runner); return(runnerBehaviour.IsSafe && runnerBehaviour.IsStaying); }); //test if all remaining runner are out and there no more batters int runnersCount = gameManager.AttackTeamRunnerList.Count; int batterCount = gameManager.AttackTeamBatterListClone.Count; if (runnersCount == 0 && batterCount == 0 || batterCount == 0 && runnersCount > 0 && isRunnersAllSafeAndStaying) { gameManager.IsStateCheckAllowed = false; gameManager.ProcessNextInningHalf(); return; } else if (isRunnersAllSafeAndStaying) { playersTurnManager.IsRunnersTurnsDone = true; } Vector3 nextBasePosition = this.GetNextBasePosition(this.CurrentBase); IsoRenderer.LookAtFieldElementAnimation(nextBasePosition); this.CalculateNextAction(); }
public void CalculatePitcherColliderInterraction(GameObject ballGameObject, BallController ballControllerScript, GenericPlayerBehaviour genericPlayerBehaviourScript) { int runnersOnFieldCount = -1; List <GameObject> runners = PlayerUtils.GetRunnersOnField(); runnersOnFieldCount = runners.Count; if (runnersOnFieldCount < 1) { return; } //Choose the runner who just hit the ball GameObject runnerToGetOut = runners.Last(); bool hasIntercepted = false; PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); if (ballControllerScript.BallHeight == BallHeightEnum.HIGH || ballControllerScript.BallHeight == BallHeightEnum.LOW) { GameManager gameManager = GameUtils.FetchGameManager(); DialogBoxManager dialogBoxManagerScript = GameUtils.FetchDialogBoxManager(); dialogBoxManagerScript.DisplayDialogAndTextForGivenAmountOfTime(1f, false, "TAG OUT !!!!!!!"); ballControllerScript.Target = null; PlayerActionsManager.InterceptBall(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); hasIntercepted = true; gameManager.AttackTeamRunnerList.Remove(runnerToGetOut); runnerToGetOut.SetActive(false); playersTurnManager.UpdatePlayerTurnQueue(runnerToGetOut); gameManager.AttackTeamBatterListClone.First().SetActive(true); RunnerBehaviour runnerBehaviourScript = PlayerUtils.FetchRunnerBehaviourScript(runnerToGetOut); BatterBehaviour batterBehaviourScript = PlayerUtils.FetchBatterBehaviourScript(gameManager.AttackTeamBatterListClone.First()); batterBehaviourScript.EquipedBat = runnerBehaviourScript.EquipedBat; runnerBehaviourScript.EquipedBat = null; if (runnersOnFieldCount == 1) { GameData.isPaused = true; StartCoroutine(gameManager.WaitAndReinit(dialogBoxManagerScript, PlayerUtils.FetchPlayerStatusScript(gameManager.AttackTeamBatterListClone.First()), FieldBall)); return; } else { GameObject bat = batterBehaviourScript.EquipedBat; bat.transform.SetParent(null); bat.transform.position = FieldUtils.GetBatCorrectPosition(batterBehaviourScript.transform.position); bat.transform.rotation = Quaternion.Euler(0f, 0f, -70f); bat.transform.SetParent(gameManager.AttackTeamBatterListClone.First().transform); batterBehaviourScript.EquipedBat.SetActive(true); TeamUtils.AddPlayerTeamMember(PlayerFieldPositionEnum.BATTER, batterBehaviourScript.gameObject, TeamUtils.GetBaseballPlayerOwner(batterBehaviourScript.gameObject)); } } if (runnersOnFieldCount >= 1) { if (!hasIntercepted) { PlayerActionsManager.InterceptBall(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); } PlayerActionsManager playerActionsManager = GameUtils.FetchPlayerActionsManager(); PlayerAbilities playerAbilities = PlayerUtils.FetchPlayerAbilitiesScript(this.gameObject); playerAbilities.ReinitAbilities(); PlayerAbility passPlayerAbility = new PlayerAbility("Pass to fielder", AbilityTypeEnum.BASIC, AbilityCategoryEnum.NORMAL, playerActionsManager.GenericPassAction, this.gameObject, true); playerAbilities.AddAbility(passPlayerAbility); playersTurnManager.TurnState = TurnStateEnum.PITCHER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
private void OnCollisionEnter2D(Collision2D collision) { PlayerStatus playerStatusScript = PlayerUtils.FetchPlayerStatusScript(this.gameObject); GenericPlayerBehaviour genericPlayerBehaviourScript = PlayerUtils.FetchCorrespondingPlayerBehaviourScript(this.gameObject, playerStatusScript); if (ColliderUtils.HasBallCollided(collision.collider)) { GameObject ballGameObject = collision.collider.gameObject; BallController ballControllerScript = BallUtils.FetchBallControllerScript(ballGameObject); if (PlayerUtils.HasCatcherPosition(this.gameObject) && ballControllerScript.CurrentPasser != this.gameObject) { CatcherBehaviour catcherBehaviour = (CatcherBehaviour)genericPlayerBehaviourScript; if (catcherBehaviour.CatcherMode == ModeConstants.CATCHER_FIELDER_MODE) { PlayerActionsManager.InterceptBall(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); catcherBehaviour.CatcherMode = ModeConstants.CATCHER_NORMAL_MODE; this.gameObject.transform.position = FieldUtils.GetTileCenterPositionInGameWorld(FieldUtils.GetCatcherZonePosition()); catcherBehaviour.IsoRenderer.ReinitializeAnimator(); } PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.CATCHER_TURN; PlayersTurnManager.IsCommandPhase = true; } else if (PlayerUtils.HasFielderPosition(this.gameObject) && !ballControllerScript.IsPitched && ballControllerScript.CurrentPasser != this.gameObject) { ((FielderBehaviour)genericPlayerBehaviourScript).CalculateFielderColliderInterraction(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); } else if (PlayerUtils.HasPitcherPosition(this.gameObject) && !ballControllerScript.IsPitched && !ballControllerScript.IsPassed && ballControllerScript.CurrentPasser != this.gameObject) { ((PitcherBehaviour)genericPlayerBehaviourScript).CalculatePitcherColliderInterraction(ballGameObject, ballControllerScript, genericPlayerBehaviourScript); } } else if (ColliderUtils.HasPlayerCollided(collision)) { if (PlayerUtils.HasFielderPosition(this.gameObject) && genericPlayerBehaviourScript.IsHoldingBall && PlayerUtils.HasRunnerPosition(collision.gameObject)) { PlayerStatus runnerToTagOutStatus = PlayerUtils.FetchPlayerStatusScript(collision.transform.gameObject); RunnerBehaviour runnerBehaviourScript = ((RunnerBehaviour)PlayerUtils.FetchCorrespondingPlayerBehaviourScript(collision.transform.gameObject, runnerToTagOutStatus)); if (!runnerBehaviourScript.IsSafe) { ((FielderBehaviour)genericPlayerBehaviourScript).TagOutRunner(collision.transform.gameObject); } else { ((FielderBehaviour)genericPlayerBehaviourScript).ReplanAction(); } } } else { if (PlayerUtils.HasRunnerPosition(this.gameObject)) { if (!ColliderUtils.IsBaseTile(collision.gameObject.name)) { return; } if (genericPlayerBehaviourScript == null) { return; } if (!genericPlayerBehaviourScript.IsPrepared) { return; } RunnerBehaviour runnerBehaviour = ((RunnerBehaviour)genericPlayerBehaviourScript); BaseEnum baseReached = runnerBehaviour.NextBase; if (baseReached == BaseEnum.HOME_BASE && runnerBehaviour.HasPassedThroughThreeFirstBases()) { //win a point automaticaly without issuing commands if arrived at home base after a complete turn runnerBehaviour.CalculateRunnerColliderInterraction(FieldUtils.GetTileEnumFromName(collision.gameObject.name), true); } else if (baseReached == BaseEnum.FIRST_BASE && runnerBehaviour.IsInWalkState) { //Walk done after 4 ball from pitcher runnerBehaviour.CalculateRunnerColliderInterraction(FieldUtils.GetTileEnumFromName(collision.gameObject.name)); PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); playersTurnManager.TurnState = TurnStateEnum.PITCHER_TURN; PlayersTurnManager.IsCommandPhase = true; } else if (baseReached == BaseEnum.HOME_BASE) { //automaticaly run to next base, no need for command input runnerBehaviour.CalculateRunnerColliderInterraction(FieldUtils.GetTileEnumFromName(collision.gameObject.name)); runnerBehaviour.GoToNextBase(baseReached, true); } else { //Runner next turn runnerBehaviour.CalculateRunnerColliderInterraction(FieldUtils.GetTileEnumFromName(collision.gameObject.name), true); } } } }
public void CalculateRunnerColliderInterraction(BaseEnum baseReached, bool isNextRunnerTurnPossible = false) { Debug.Log(this.name + " interracted with " + baseReached.ToString()); this.CurrentBase = baseReached; PlayerStatus playerStatusScript = PlayerUtils.FetchPlayerStatusScript(this.gameObject); this.EnableMovement = false; PlayersTurnManager playersTurnManager = GameUtils.FetchPlayersTurnManager(); TurnAvailabilityEnum turnAvailabilityEnum = TurnAvailabilityEnum.READY; switch (baseReached) { case BaseEnum.HOME_BASE: if (baseReached == BaseEnum.HOME_BASE && !this.HasPassedThroughThreeFirstBases()) { Debug.Log("Get on HOME BASE FIRST TIME !!"); this.NextBase = BaseEnum.FIRST_BASE; playersTurnManager.TurnState = TurnStateEnum.STANDBY; playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, turnAvailabilityEnum); } else { Debug.Log("Get on HOME BASE to mark a point"); Debug.Log("WIN ONE POINT !!!"); this.Target = null; this.NextBase = this.CurrentBase; playerStatusScript.IsAllowedToMove = false; this.HasReachedHomeBase = true; PlayerEnum playerEnum = playerStatusScript.PlayerOwner; TeamsScoreManager teamsScoreManagerScript = GameUtils.FetchTeamsScoreManager(); teamsScoreManagerScript.IncrementTeamScore(GameData.teamIdEnumMap[playerEnum]); this.IsStaying = true; IsoRenderer.ReinitializeAnimator(); GameManager gameManager = GameUtils.FetchGameManager(); this.gameObject.SetActive(false); gameManager.AttackTeamRunnerList.Remove(this.gameObject); playersTurnManager.UpdatePlayerTurnQueue(this.gameObject); gameManager.AttackTeamRunnerHomeList.Add(this.gameObject); int batterCount = gameManager.AttackTeamBatterListClone.Count; if (this.EquipedBat != null && batterCount > 0) { GameObject newBatter = gameManager.AttackTeamBatterListClone.First(); BatterBehaviour newbatterBehaviourScript = PlayerUtils.FetchBatterBehaviourScript(newBatter); newbatterBehaviourScript.EquipedBat = this.EquipedBat; this.EquipedBat = null; gameManager.EquipBatToPlayer(newBatter); } int runnersCount = gameManager.AttackTeamRunnerList.Count; bool isRunnersAllSafeAndStaying = gameManager.AttackTeamRunnerList.TrueForAll(runner => { RunnerBehaviour runnerBehaviour = PlayerUtils.FetchRunnerBehaviourScript(runner); return(runnerBehaviour.IsSafe && runnerBehaviour.IsStaying); }); if (runnersCount == 0 && batterCount == 0 || batterCount == 0 && runnersCount > 0 && isRunnersAllSafeAndStaying) { gameManager.IsStateCheckAllowed = false; gameManager.ProcessNextInningHalf(); } else { gameManager.IsStateCheckAllowed = true; } } break; case BaseEnum.FIRST_BASE: Debug.Log("Get on FIRST BASE"); this.NextBase = BaseEnum.SECOND_BASE; this.HasReachedFirstBase = true; if (this.IsInWalkState) { this.IsInWalkState = false; turnAvailabilityEnum = TurnAvailabilityEnum.WAITING; IsoRenderer.ReinitializeAnimator(); } playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, turnAvailabilityEnum); break; case BaseEnum.SECOND_BASE: Debug.Log("Get on SECOND BASE"); this.NextBase = BaseEnum.THIRD_BASE; this.HasReachedSecondBase = true; playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, turnAvailabilityEnum); break; case BaseEnum.THIRD_BASE: Debug.Log("Get on THIRD BASE"); this.NextBase = BaseEnum.HOME_BASE; this.HasReachedThirdBase = true; playersTurnManager.UpdatePlayerTurnAvailability(this.gameObject.name, turnAvailabilityEnum); break; default: Debug.Log("DO NOT KNOW WHAT HAPPEN"); break; } if (isNextRunnerTurnPossible) { playersTurnManager.TurnState = TurnStateEnum.RUNNER_TURN; PlayersTurnManager.IsCommandPhase = true; } }
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; } } }