//Recives event to play card, updating deck on all clients public void HandlePhotonEvents(EventData photonEvent) { byte eventCode = photonEvent.Code; switch (eventCode) { case 1: //------Playing Cards { if (view.IsMine) { //Stores the number of each trick card where the number matters byte[] cards = (byte[])photonEvent.CustomData; //A count of each trick card played //Aces = index[0] 2s = index[2] | 8s = index[2] | Jacks = index[3] | Black Queens = index[4] | Kings of Hearts = index[5] byte[] trickCards = new byte[6]; #region Trick Card reading //Get a count of each trick card in the cards played foreach (byte id in cards) { Card card = deck.FindCard(id); switch (card.GetValue()) { //Ace case 1: trickCards[0]++; break; //Twos case 2: trickCards[1]++; break; //Eights case 8: turnHandler.PlayerUseTurn(); trickCards[2]++; break; //Jacks case 11: turnHandler.ReverseOrder(); trickCards[3]++; break; //Black Queens case 12: if (card.GetCardId() == 102) { lights.DiscoMode(); } break; //King of Hearts case 13: if (card.GetSuit() == 1) { trickCards[5]++; } break; } } twoCount += trickCards[1]; kingCount += trickCards[5]; //Let player set ace value if (trickCards[0] > 0 && turnHandler.GetCurrentPlayer() == view.ViewID) { playerHud.aceSelectionArea.GetComponent <CanvasGroup>().alpha = 1; } //Only use turn if jacks havn't reversed the order if (trickCards[3] % 2 == 0 || trickCards[3] == 0) { turnHandler.PlayerUseTurn(); } #endregion deck.PlayCard(cards); playerHud.topCardPrompt.GetComponent <Image>().sprite = deck.GetPlayDeckTopCard().GetCardSprite(); } } break; case 2: //------Game Start { if (view.IsMine) { //Shuffles all players decks using the same seed, meaning all players will have the same randomization byte seed = (byte)photonEvent.CustomData; deck.Shuffle(seed); deck.PlayFirstCard(); //Enables all UI buttons on game start playerHud.drawCardsButton.interactable = true; playerHud.sortCardsButton.interactable = true; playerHud.believeButton.interactable = true; playerHud.lastCardButton.interactable = true; gameStartButton.gameObject.SetActive(false); //Adds all the current players to the turn handler to be sorted through turnHandler.AddPlayers(); } } break; case 3: //------Drawing Cards { if (view.IsMine) { if ((int)photonEvent.CustomData != view.ViewID) { Card card = deck.DrawCard(); } if ((int)photonEvent.CustomData == turnHandler.GetCurrentPlayer()) { turnHandler.PlayerUseTurn(); } } } break; case 4: //------Game Start Card Dealing { int eventViewID = (int)photonEvent.CustomData; if (eventViewID == view.ViewID && view.IsMine) { DrawMultipleCards(5); DealStartCardsLoop(); } } break; case 5: //------Game Start Card Loop { DealStartCards(); } break; case 6: //------Set trick cards to be used { twoCount = 0; kingCount = 0; } break; case 7: //------Update game log { if (view.IsMine) { string text = (string)photonEvent.CustomData; playerHud.SendChatboxMessage(text); } } break; case 8: //------Handle Game Over { if (view.IsMine) { string[] message = (string[])photonEvent.CustomData; playerHud.gameObject.SetActive(false); GameObject winnerScreen = GameObject.Find("WinnerScreen"); winnerScreen.GetComponent <CanvasGroup>().alpha = 1; string gameOverMessage; //If someone won... if (message[1] == "Winner") { //If they were also first winner, display flawless message if (firstWinner == message[0]) { gameOverMessage = winnerScreen.GetComponentInChildren <Text>().text = message[0] + "\n is flawless!"; } //Else just display winner message else { gameOverMessage = winnerScreen.GetComponentInChildren <Text>().text = message[0] + "\n is the winner!"; } } //If the deck ran out of cards... else { gameOverMessage = winnerScreen.GetComponentInChildren <Text>().text = message[0] + "\n ruined the game..."; } //Print the winner, time and game log to file string path = "GameLog.txt"; StreamWriter writer = new StreamWriter(path, true); writer.WriteLine(DateTime.Now.ToString()); writer.WriteLine(playerHud.chatBoxText.GetComponent <Text>().text); writer.WriteLine(gameOverMessage); writer.WriteLine("----------------------------< Game End >----------------------------"); writer.Close(); //Move back to the main menu StartCoroutine("ChangeScene"); } } break; case 9: //------Set first winner { firstWinner = (string)photonEvent.CustomData; } break; case 10: //Blind play / belief button { if (view.IsMine) { Card card = deck.DrawCard(); } } break; case 11: //Handle Black queen { } break; case 12: //Recieving your cards from a black queen target { short[] data = (short[])photonEvent.CustomData; if (data[0] == view.ViewID) { for (int i = 1; i < data.Length; i++) { Card temp = deck.FindCard((byte)data[i]); myCards.Add(temp.GetCardId(), temp); } } } break; } }