예제 #1
0
    public void CmdDrawCard()
    {
        if (isServer)
        {
            if (connectionToClient == GameManager.CurrPlayer && !GameManager.NewCardFlipped)
            {
                GameManager.deck.Callback += DeckChanged;
                deck = GameManager.deck;

                TargetDeselectCard(connectionToClient);

                GameObject newCard = Instantiate(CardPrefab, new Vector3(0, 0, 0), Quaternion.identity);
                newCard.GetComponent <Selectable>().faceUp = true;
                newCard.name = deck.Last <string>();
                NetworkServer.Spawn(newCard);
                newCard.transform.SetParent(Discard.transform, false);
                RpcDrawCard(newCard, deck.Last <string>());
                GameManager.UpdateDeck();
                GameManager.NewCardFlipped = true;
            }
        }
    }
예제 #2
0
    void RestartRound()
    {
        RpcUnhighlightAll();
        RpcReset();

        GameObject[] areas = GameObject.FindGameObjectsWithTag("PlayerArea");

        foreach (GameObject area in areas)
        {
            foreach (Transform card in area.transform)
            {
                Destroy(card.gameObject);
            }
        }

        foreach (Transform card in Discard.transform)
        {
            Destroy(card.gameObject);
        }

        Debug.Log("Old Cards Destroyed");

        Debug.Log("Areas to remove: " + PlayersRemoved.Count);
        foreach (int toRemove in PlayersRemoved)
        {
            areas[toRemove].transform.parent.gameObject.SetActive(false);
            int thisPlayer = 0;
            foreach (NetworkConnection conn in GameManager.PlayerConnections)
            {
                if (conn != null)
                {
                    TargetRemoveArea(conn, toRemove, thisPlayer);
                    thisPlayer++;
                }
            }
            GameManager.NumPlayers--;
        }

        GameManager.GenerateDeck();

        cardStrings = new string[GameManager.NumPlayers];
        cardObjects = new GameObject[GameManager.NumPlayers];

        GameObject[] updatedAreas = GameObject.FindGameObjectsWithTag("PlayerArea");

        Debug.Log("Player areas found: " + updatedAreas.Length);

        Debug.Log("Number of players: " + GameManager.NumPlayers);

        // ____________________________________ Deal cards ____________________________________
        for (int j = 0; j < 6; j++)
        {
            for (int i = 0; i < GameManager.NumPlayers; i++)
            {
                GameManager.deck.Callback += DeckChanged;
                deck = GameManager.deck;
                GameObject newCard = Instantiate(CardPrefab, new Vector3(0, 0, 0), Quaternion.identity);
                // newCard.GetComponent<Selectable>().faceUp = true;
                newCard.name   = deck.Last <string>();
                cardStrings[i] = deck.Last <string>();
                cardObjects[i] = newCard;
                NetworkServer.Spawn(newCard);
                newCard.transform.SetParent(updatedAreas[i].transform, false);
                GameManager.UpdateDeck();
            }



            int index = 0;
            foreach (Mirror.NetworkConnectionToClient conn in GameManager.PlayerConnections)
            {
                if (conn != null)
                {
                    TargetDealCards(conn, cardStrings, cardObjects, index);
                    index++;
                }
            }
        }

        // ____________________________________ Initial Discard Card ____________________________________
        GameManager.deck.Callback += DeckChanged;
        deck = GameManager.deck;

        GameObject FirstDiscard = Instantiate(CardPrefab, new Vector3(0, 0, 0), Quaternion.identity);

        FirstDiscard.GetComponent <Selectable>().faceUp = true;
        FirstDiscard.name = deck.Last <string>();
        NetworkServer.Spawn(FirstDiscard);
        FirstDiscard.transform.SetParent(Discard.transform, false);
        RpcDrawCard(FirstDiscard, deck.Last <string>());
        GameManager.UpdateDeck();


        // ____________________________________ Reset Values ____________________________________
        GameManager.numReady       = 0;
        GameManager.RoundOver      = false;
        GameManager.MaxFlipped     = 2;
        GameManager.NewCardFlipped = false;

        GameManager.ChangeGameState("InitialCardFlip");
    }
예제 #3
0
    public void CmdStartGame()
    {
        // ____________________________________ Create deck button ____________________________________
        GameObject deckButton = Instantiate(deckButtonPrefab, new Vector3(-37, -49, 0), Quaternion.identity);

        deckButton.name = "DeckButton";
        NetworkServer.Spawn(deckButton);
        deckButton.transform.SetParent(mainCanvas.transform, false);
        startButton.SetActive(false);
        RpcStartGame(deckButton);

        // ____________________________________ Create player areas ____________________________________
        numPlayers = NetworkServer.connections.Count;

        GameManager.NumPlayers = numPlayers;
        GameManager.Scores     = new int[numPlayers];
        GameManager.AddPlayers();

        cardStrings = new string[numPlayers];
        cardObjects = new GameObject[numPlayers];
        PlayerNames = new string[numPlayers];
        PlayerAreas = new GameObject[numPlayers];

        // TODO: Let users input names
        for (int i = 0; i < numPlayers; i++)
        {
            PlayerNames[i] = "Player " + (i + 1).ToString();
        }

        for (int i = 0; i < numPlayers; i++)
        {
            GameObject playerArea = Instantiate(PlayerAreaPrefab, new Vector3(0, 0, 0), Quaternion.identity);
            NetworkServer.Spawn(playerArea);
            playerArea.transform.GetChild(0).tag = "PlayerArea";
            if (isServer)
            {
                playerArea.name = i.ToString();
                PlayerAreas[i]  = (playerArea.transform.GetChild(0).gameObject);
                playerArea.transform.SetParent(Background.transform, false);
                playerArea.transform.SetAsFirstSibling();
            }

            int playerIndex = 0;
            foreach (Mirror.NetworkConnectionToClient conn in GameManager.PlayerConnections)
            {
                if (conn != null)
                {
                    TargetSpawnArea(conn, playerArea, PlayerNames, i, playerIndex, GameManager.NumPlayers);
                    playerIndex++;
                }
            }
        }



        // ____________________________________ Deal cards ____________________________________
        for (int j = 0; j < 6; j++)
        {
            for (int i = 0; i < numPlayers; i++)
            {
                GameManager.deck.Callback += DeckChanged;
                deck = GameManager.deck;
                GameObject newCard = Instantiate(CardPrefab, new Vector3(0, 0, 0), Quaternion.identity);
                // newCard.GetComponent<Selectable>().faceUp = true;
                newCard.name   = deck.Last <string>();
                cardStrings[i] = deck.Last <string>();
                cardObjects[i] = newCard;
                NetworkServer.Spawn(newCard);
                GameManager.UpdateDeck();
            }

            if (isServer)
            {
                int num = cardStrings.Length;
                for (int i = 0; i < num; i++)
                {
                    cardObjects[i].name = cardStrings[i];
                    (cardObjects[i]).transform.SetParent((PlayerAreas[i]).transform, false);
                }
            }

            Debug.Log("Num players: " + GameManager.NumPlayers);
            int index = 0;
            foreach (Mirror.NetworkConnectionToClient conn in GameManager.PlayerConnections)
            {
                if (conn != null)
                {
                    TargetDealCards(conn, cardStrings, cardObjects, index);
                    index++;
                }
            }
        }

        // ____________________________________ Initial Discard Card ____________________________________
        GameManager.deck.Callback += DeckChanged;
        deck = GameManager.deck;

        GameObject FirstDiscard = Instantiate(CardPrefab, new Vector3(0, 0, 0), Quaternion.identity);

        FirstDiscard.GetComponent <Selectable>().faceUp = true;
        FirstDiscard.name = deck.Last <string>();
        NetworkServer.Spawn(FirstDiscard);
        FirstDiscard.transform.SetParent(Discard.transform, false);
        RpcDrawCard(FirstDiscard, deck.Last <string>());
        GameManager.UpdateDeck();


        // ____________________________________ Score Board Setup ____________________________________
        for (int i = 1; i <= GameManager.NumPlayers; i++)
        {
            GameObject scoreText = Instantiate(GameManager.ScoreTextPrefab, new Vector3(0, 0, 0), Quaternion.identity);
            NetworkServer.Spawn(scoreText);
            PlayerScores.Add(scoreText);
            scoreText.GetComponent <Text>().text = "Player " + i.ToString() + "\n 0";
            scoreText.transform.SetParent(GameManager.ScoresObject.transform, false);
            RpcScoreRound(scoreText, i);
        }

        GameManager.ChangeGameState("InitialCardFlip");
    }