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; } } }
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"); }
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"); }