コード例 #1
0
ファイル: Player.cs プロジェクト: DylanReilly/Switch2.1
    //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;
        }
    }