void Update() { //Move marbles MoveHandMarbles(); if (turn != GameState.Paused) { //Do every step UpdateSlotSprite(); //Time ProgressTime(); //Text Display InstructionDisplay(); //Click Input Touch[] touches = new Touch[0]; #if UNITY_EDITOR if (Input.GetMouseButtonDown(0)) { touches = new Touch[1]; touches[0] = new Touch(); touches[0].phase = TouchPhase.Began; touches[0].position = Input.mousePosition; } #elif UNITY_ANDROID touches = Input.touches; #endif //Game Turn switch (turn) { case GameState.PickingStartSlot: foreach (Touch i in touches) { Slot slot = FindSlotOnTouch(i); if (slot != null) { //Select start if (slot.slotID >= 0 && slot.slotID <= 6) { nextSlot[0] = slot.slotID; AudioController.instance.PlaySoundEffect(Context.MarblePlace); } else if (slot.slotID >= 8 && slot.slotID < 15) { nextSlot[1] = slot.slotID; AudioController.instance.PlaySoundEffect(Context.MarblePlace); } //If both player slected if (nextSlot[0] > -1 && nextSlot[1] > -1) { //Start Game turn = GameState.BothTurns; //Give player marbles slots[nextSlot[0]].SurrenderMarbles(0); slots[nextSlot[1]].SurrenderMarbles(1); //Move Slot by 1 ProgressSlot(0); ProgressSlot(1); } } } break; case GameState.BothTurns: foreach (Touch i in touches) { Slot slot = FindSlotOnTouch(i); if (slot != null) { //First Turn PlayerTurn(0, slot); PlayerTurn(1, slot); } } //Record who done first. He will move next if (doneFirst < 0) { if (turnDone[0]) { doneFirst = 0; ForfeitHand(0); } else if (turnDone[1]) { doneFirst = 1; ForfeitHand(1); } } //If time is up, surrender all marble in hand to the opponent if (turnDone[0]) { ForfeitHand(0); } else if (turnDone[1]) { ForfeitHand(1); } //Setup Next Turn if (turnDone[0] && turnDone[1]) { turn = (GameState)((int)GameState.P1Turn + 1); StartCoroutine(TurnInBetween(doneFirst)); } break; case GameState.P1Turn: foreach (Touch i in touches) { Slot slot = FindSlotOnTouch(i); if (slot != null) { //P1 Turn PlayerTurn(0, slot); } } if (turnDone[0]) { //Setup next turn if (PlayerValidSlotsNumber(1) > 0) { StartCoroutine(TurnInBetween(1)); } else { StartCoroutine(TurnInBetween(0)); } //Surrender held marbles to the opponent if (marblesHand[0].Count > 0) { slots[7].StoreMarbles(marblesHand[0]); marblesHand[0] = new List <GameObject>(); } } break; case GameState.P2Turn: foreach (Touch i in touches) { Slot slot = FindSlotOnTouch(i); if (slot != null) { //P2 Turn PlayerTurn(1, slot); } } //Turn down checker if (turnDone[1]) { if (PlayerValidSlotsNumber(0) > 0) { StartCoroutine(TurnInBetween(0)); } else { StartCoroutine(TurnInBetween(1)); } if (marblesHand[1].Count > 0) { slots[15].StoreMarbles(marblesHand[1]); marblesHand[1] = new List <GameObject>(); } } break; case GameState.GameEnd: if (touches.Length > 0) { if (roundsToWin > 0) { if (wins[0] == roundsToWin || wins[1] == roundsToWin) { turn = GameState.ResultScreen; endGameScreen.EnableCanvas(false, GenerateTips(), PickDefeatedPotraits()); GPGSHandler.instance.UnlockAchievement(GPGSIds.achievement_wingman); GPGSHandler.instance.IncrementEvent(GPGSIds.event_2p_match_ended); } else { ResetMarbles(); } } else { ResetMarbles(); } } break; case GameState.InBetweens: //Nothing break; case GameState.AdvertisingWait: StartCoroutine(WaitForAd()); break; case GameState.Advertising: if (!AdManager.instance.interstitialUp) { turn = GameState.GameEnd; } break; } //Game End List <GameState> endStates = new List <GameState>(); endStates.Add(GameState.ResultScreen); endStates.Add(GameState.GameEnd); endStates.Add(GameState.Advertising); endStates.Add(GameState.AdvertisingWait); endStates.Add(GameState.InBetweens); if (!endStates.Contains(turn) && PlayerValidSlotsNumber(0) == 0 && PlayerValidSlotsNumber(1) == 0 && marblesHand[0].Count == 0 && marblesHand[1].Count == 0) { turn = GameState.AdvertisingWait; if (slots[7].MarbleAmount() > slots[15].MarbleAmount()) { wins[1]++; winner = 1; } else if (slots[7].MarbleAmount() < slots[15].MarbleAmount()) { wins[0]++; winner = 0; } winsText.text = wins[0] + "-" + wins[1]; AdManager.instance.ShowInterstitial(); } } }