void Update() { switch (GameStateHolder.GameMode) { case GameStateHolder.GameModesEnum.SinglePlayer: FirstPlayerScoreText.text = TurnAndScoreScript.GetComponent <TurnAndScore> ().GetScoreFirstPlayer().ToString(); SecondPlayerScoreText.text = TurnAndScoreScript.GetComponent <TurnAndScore> ().GetScoreSecondPlayer().ToString(); QueenPocketedBy = TurnAndScoreScript.GetComponent <TurnAndScore> ().GetQueenPocketed(); QueenCoveredBy = TurnAndScoreScript.GetComponent <TurnAndScore> ().GetQueenCovered(); break; case GameStateHolder.GameModesEnum.MultiPlayer: FirstPlayerScoreText.text = TurnAndScoreScript.GetComponent <MPTurnAndScore> ().GetScoreFirstPlayer().ToString(); SecondPlayerScoreText.text = TurnAndScoreScript.GetComponent <MPTurnAndScore> ().GetScoreSecondPlayer().ToString(); QueenPocketedBy = TurnAndScoreScript.GetComponent <MPTurnAndScore> ().GetQueenPocketed(); QueenCoveredBy = TurnAndScoreScript.GetComponent <MPTurnAndScore> ().GetQueenCovered(); break; } if (QueenPocketedBy != PlayerStateHolder.PlayerEnum.Unknown && QueenCoveredBy == PlayerStateHolder.PlayerEnum.Unknown) { QueenText.text = QueenPocketedBy.ToString() + " (Pocketed)"; } else if (QueenPocketedBy != PlayerStateHolder.PlayerEnum.Unknown && QueenCoveredBy != PlayerStateHolder.PlayerEnum.Unknown) { QueenText.text = QueenPocketedBy.ToString() + " (Pocketed + Covered)"; } else { QueenText.text = "Not pocketed yet."; } }
void Start() { GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.Unknown; PrevPlayerTurn = PlayerStateHolder.PlayerEnum.Unknown; FirstPlayerPocketedArray = new ArrayList(); SecondPlayerPocketedArray = new ArrayList(); DisplayScoreScript = (DisplayScores)GameObject.FindObjectOfType(typeof(DisplayScores)); PlayerPrefs.SetInt("Winner", -1); }
public void PrevPlayerTurnChange(int val) { PrevPlayerTurnInt = val; switch (PrevPlayerTurnInt) { case 1: PrevPlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; break; case 2: PrevPlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; break; } }
void Update() { if (!FirstTurnAllocated) { //Tossing int val = Random.Range(1, 3); switch (val) { case 1: GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; PrevPlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; break; case 2: GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; PrevPlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; break; } FirstTurnAllocated = true; //Placing Striker GameObject Striker = GameObject.FindGameObjectWithTag("Striker"); switch (GameStateHolder.PlayerTurn) { case PlayerStateHolder.PlayerEnum.FirstPlayer: Striker.transform.localPosition = new Vector3(0f, 0f, (-1) * StrikerZeroPos); Striker.transform.localRotation = Quaternion.identity; break; case PlayerStateHolder.PlayerEnum.SecondPlayer: Striker.transform.localPosition = new Vector3(0f, 0f, StrikerZeroPos); Striker.transform.localRotation = Quaternion.Euler(0f, 180f, 0f); break; } } if (GameStateHolder.PlayerTurn == PlayerStateHolder.PlayerEnum.Unknown) { if (!MainCoroutineStarted) { MainCoroutineStarted = true; StartCoroutine(MainCoroutine()); } } }
IEnumerator MainCoroutine() { FirstPlayerTempPocketedArray = new ArrayList(); SecondPlayerTempPocketedArray = new ArrayList(); yield return(new WaitForSeconds(TimeDelayBeforeBaseCoroutine)); while (!EveryPieceAndStrikerStopped()) { yield return(new WaitForSeconds(1f)); } bool Foul = false; int WhitePiecesPocketed = FirstPlayerPocketedArray.Count; int BlackPiecesPocketed = SecondPlayerPocketedArray.Count; switch (PrevPlayerTurn) { case PlayerStateHolder.PlayerEnum.FirstPlayer: foreach (GameObject G in FirstPlayerTempPocketedArray) { //Striker Pocketting Foul if (G.tag.Equals("Striker")) { Foul = true; } //Opponent Piece Pocketting Foul if (G.tag.Equals("BlackPiece")) { BlackPiecesPocketed++; Foul = true; } //Queen Covering if (FirstPlayerPocketedArray.Count > 0 && G.tag.Equals("Queen")) { FirstPlayerQueenPocketed = true; } if (FirstPlayerQueenPocketed && G.tag.Equals("WhitePiece")) { FirstPlayerQueenCovered = true; } //All White Pieces Pocketted Before Queen => Foul if (G.tag.Equals("WhitePiece")) { WhitePiecesPocketed++; if (WhitePiecesPocketed == 9 && !FirstPlayerQueenPocketed) { Foul = true; } } } if (Foul) { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Foul, "Player 1's Foul"); //Opponent Last Piece Pocketting Handling if (BlackPiecesPocketed == 9) { foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("BlackPiece")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; break; } } } //Own Foul Pieces Handling foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("WhitePiece")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; } } //Giving A Penality Piece bool PenalityGiven = false; if (FirstPlayerPocketedArray.Count > 0) { ((GameObject)FirstPlayerPocketedArray [0]).transform.localPosition = Vector3.zero; ((GameObject)FirstPlayerPocketedArray [0]).GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerPocketedArray.RemoveAt(0); PenalityGiven = true; } //Duing Piece if not Penality Given if (!PenalityGiven) { FirstPlayerPenalityDue++; } //Returning Queen if not Covered if (!FirstPlayerQueenCovered && FirstPlayerQueenPocketed) { bool QueenReturned = false; foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerQueenPocketed = false; QueenReturned = true; break; } } if (!QueenReturned) { foreach (GameObject G in FirstPlayerPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerPocketedArray.Remove(G); FirstPlayerQueenPocketed = false; QueenReturned = true; break; } } } } //Changing Turn yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; } // No Foul else { //Counting Pieces Pocketted int WhitePocketedThisTurn = 0; foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("WhitePiece")) { WhitePocketedThisTurn++; } } //If No White Piece Pocketted if (WhitePocketedThisTurn == 0) { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Info, "No White Piece Pocketed"); //Returning Queen if not Covered if (!FirstPlayerQueenCovered && FirstPlayerQueenPocketed) { bool QueenReturned = false; foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerQueenPocketed = false; QueenReturned = true; break; } } if (!QueenReturned) { foreach (GameObject G in FirstPlayerPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerPocketedArray.Remove(G); FirstPlayerQueenPocketed = false; QueenReturned = true; break; } } } } //Changing Turn yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; } //If Some pieces are pocketted else { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Score, WhitePocketedThisTurn.ToString() + " Piece(s) Pocketed"); //Adding All White Pieces to Our Array foreach (GameObject G in FirstPlayerTempPocketedArray) { if (G.tag.Equals("WhitePiece") || G.tag.Equals("Queen")) { FirstPlayerPocketedArray.Add(G); } } yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; } //Giving Due Penality Piece if Possible while (FirstPlayerPocketedArray.Count > 0) { if (FirstPlayerPenalityDue > 0) { ((GameObject)FirstPlayerPocketedArray [0]).transform.localPosition = Vector3.zero; ((GameObject)FirstPlayerPocketedArray [0]).GetComponent <Rigidbody> ().isKinematic = false; FirstPlayerPocketedArray.RemoveAt(0); FirstPlayerPenalityDue--; } else { break; } } if (GameStateHolder.GameMode == GameStateHolder.GameModesEnum.SinglePlayer && FirstPlayerQueenCovered && FirstPlayerPocketedArray.Count == 10) { int ScoresToSave = GetScores(PlayerStateHolder.PlayerName); switch (GameStateHolder.PlayerGameDifficulty) { case GameStateHolder.GameDifficultyEnum.Easy: ScoresToSave += 5; break; case GameStateHolder.GameDifficultyEnum.Medium: ScoresToSave += 10; break; case GameStateHolder.GameDifficultyEnum.Hard: ScoresToSave += 15; break; } SaveScores(PlayerStateHolder.PlayerName, ScoresToSave); PlayerPrefs.SetInt("Winner", 1); PlayerPrefs.Save(); SceneManager.LoadScene("EndGame"); } else if (GameStateHolder.GameMode == GameStateHolder.GameModesEnum.MultiPlayer && (FirstPlayerQueenCovered && PlayerStateHolder.PlayerType == PlayerStateHolder.PlayerEnum.FirstPlayer) && FirstPlayerPocketedArray.Count == 10) { int ScoresToSave = GetScores(PlayerStateHolder.PlayerName); ScoresToSave += 10; SaveScores(PlayerStateHolder.PlayerName, ScoresToSave); PlayerPrefs.SetInt("Winner", 1); PlayerPrefs.Save(); SceneManager.LoadScene("EndGame"); } } break; case PlayerStateHolder.PlayerEnum.SecondPlayer: foreach (GameObject G in SecondPlayerTempPocketedArray) { //Striker Pocketting Foul if (G.tag.Equals("Striker")) { Foul = true; } //Opponent Piece Pocketting Foul if (G.tag.Equals("WhitePiece")) { WhitePiecesPocketed++; Foul = true; } //Queen Covering if (SecondPlayerPocketedArray.Count > 0 && G.tag.Equals("Queen")) { SecondPlayerQueenPocketed = true; } if (SecondPlayerQueenPocketed && G.tag.Equals("BlackPiece")) { SecondPlayerQueenCovered = true; } //All White Pieces Pocketted Before Queen => Foul if (G.tag.Equals("BlackPiece")) { BlackPiecesPocketed++; if (BlackPiecesPocketed == 9 && !SecondPlayerQueenPocketed) { Foul = true; } } } if (Foul) { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Foul, "Player 2's Foul"); //Opponent Last Piece Pocketting Handling if (WhitePiecesPocketed == 9) { foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("WhitePiece")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; break; } } } //Own Foul Pieces Handling foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("BlackPiece")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; } } //Giving A Penality Piece bool PenalityGiven = false; if (SecondPlayerPocketedArray.Count > 0) { ((GameObject)SecondPlayerPocketedArray [0]).transform.localPosition = Vector3.zero; ((GameObject)SecondPlayerPocketedArray [0]).GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerPocketedArray.RemoveAt(0); PenalityGiven = true; } //Duing Piece if not Penality Given if (!PenalityGiven) { SecondPlayerPenalityDue++; } //Returning Queen if not Covered if (!SecondPlayerQueenCovered && SecondPlayerQueenPocketed) { bool QueenReturned = false; foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerQueenPocketed = false; QueenReturned = true; break; } } if (!QueenReturned) { foreach (GameObject G in SecondPlayerPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerPocketedArray.Remove(G); SecondPlayerQueenPocketed = false; QueenReturned = true; break; } } } } //Changing Turn yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; } // No Foul else { //Counting Pieces Pocketted int BlackPocketedThisTurn = 0; foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("BlackPiece")) { BlackPocketedThisTurn++; } } //If No White Piece Pocketted if (BlackPocketedThisTurn == 0) { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Info, "No Black Piece Pocketed"); //Returning Queen if not Covered if (!SecondPlayerQueenCovered && SecondPlayerQueenPocketed) { bool QueenReturned = false; foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerQueenPocketed = false; QueenReturned = true; break; } } if (!QueenReturned) { foreach (GameObject G in SecondPlayerPocketedArray) { if (G.tag.Equals("Queen")) { G.transform.localPosition = Vector3.zero; G.GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerPocketedArray.Remove(G); SecondPlayerQueenPocketed = false; QueenReturned = true; break; } } } } //Changing Turn yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.FirstPlayer; } //If Some pieces are pocketted else { DisplayScoreScript.ShowNotification(DisplayScores.NotificationTypeEnum.Score, BlackPocketedThisTurn.ToString() + " Piece(s) Pocketed"); //Adding All White Pieces to Our Array foreach (GameObject G in SecondPlayerTempPocketedArray) { if (G.tag.Equals("BlackPiece") || G.tag.Equals("Queen")) { SecondPlayerPocketedArray.Add(G); } } yield return(new WaitForSeconds(1f)); PrevPlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; GameStateHolder.PlayerTurn = PlayerStateHolder.PlayerEnum.SecondPlayer; } //Giving Due Penality Piece if Possible while (SecondPlayerPocketedArray.Count > 0) { if (SecondPlayerPenalityDue > 0) { ((GameObject)SecondPlayerPocketedArray [0]).transform.localPosition = Vector3.zero; ((GameObject)SecondPlayerPocketedArray [0]).GetComponent <Rigidbody> ().isKinematic = false; SecondPlayerPocketedArray.RemoveAt(0); SecondPlayerPenalityDue--; } else { break; } } } if (GameStateHolder.GameMode == GameStateHolder.GameModesEnum.MultiPlayer && (SecondPlayerQueenCovered && PlayerStateHolder.PlayerType == PlayerStateHolder.PlayerEnum.SecondPlayer) && SecondPlayerPocketedArray.Count == 10) { int ScoresToSave = GetScores(PlayerStateHolder.PlayerName); ScoresToSave += 10; SaveScores(PlayerStateHolder.PlayerName, ScoresToSave); PlayerPrefs.SetInt("Winner", 2); PlayerPrefs.Save(); SceneManager.LoadScene("EndGame"); } break; } //Placing Striker GameObject Striker = GameObject.FindGameObjectWithTag("Striker"); Striker.GetComponent <Rigidbody> ().velocity = Vector3.zero; Striker.GetComponent <Rigidbody> ().angularVelocity = Vector3.zero; switch (GameStateHolder.PlayerTurn) { case PlayerStateHolder.PlayerEnum.FirstPlayer: Striker.transform.localPosition = new Vector3(0f, 0f, (-1) * StrikerZeroPos); Striker.transform.localRotation = Quaternion.identity; break; case PlayerStateHolder.PlayerEnum.SecondPlayer: Striker.transform.localPosition = new Vector3(0f, 0f, StrikerZeroPos); Striker.transform.localRotation = Quaternion.Euler(0f, 180f, 0f); break; } //CoroutineStarted false so that it can run again MainCoroutineStarted = false; yield return(null); }