- Home /
RPC replace the existing list on all players
Hello,i am making a game of cards I have the assigning deck script. Pops up the window player choose the deck and i have a player base class The following script is attached on a manager game object.
My problem is that as long the 2nd player connects replace the list of the first player... ALl the other informations are fine,the list is the only thing that get replaces.
As result the both players have the same deck. How i can fix it so that wont replace the deck on the other player?
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class AssignDeck : MonoBehaviour {
private Rect chooseDeckRect;
private string chooseDeckWindowTitle = "Choose Deck";
private int chooseDeckWindowWidth = 330;
private int chooseDeckWindowHeight = 100;
private int chooseDeckLeftIndent;
private int chooseDeckTopIndent;
private int buttonHeight = 40;
public bool deckWindow = false;
private bool setDecks = false;
private int waitForOtherPlayer = 0;
private PreConstructedDecks selectedDeckScript;
private InitialDeckStats statsScript;
private List<GameObject> playerDeck = new List<GameObject>();
void Start ()
{
selectedDeckScript = GetComponent<PreConstructedDecks>();
statsScript = GetComponent<InitialDeckStats>();
if(waitForOtherPlayer == 1)
{
waitForOtherPlayer++;
}
}
void OnGUI()
{
if(deckWindow)
{
chooseDeckLeftIndent = Screen.width / 2 - chooseDeckWindowWidth / 2;
chooseDeckTopIndent = Screen.height / 2 - chooseDeckWindowHeight / 2;
chooseDeckRect = new Rect(chooseDeckLeftIndent, chooseDeckTopIndent,
chooseDeckWindowWidth, chooseDeckWindowHeight);
chooseDeckRect = GUILayout.Window(0, chooseDeckRect, PreconstructedDecks,chooseDeckWindowTitle);
}
if(waitForOtherPlayer == 1)
{
GUI.Label(new Rect(Screen.width*.4f,Screen.height*.5f,200,100),"Waiting for other player...");
}
}
void PreconstructedDecks (int windowID)
{
if(GUILayout.Button("1 Deck", GUILayout.Height(buttonHeight))) {
playerDeck = new List<GameObject>(selectedDeckScript.one);
playerDeck = transform.GetComponent<Shuffle>().ShuffleDeck(playerDeck);
setDecks = true;
deckWindow = false;
statsScript.setStats = true;
statsScript.decidedDeck = 1;
}
if(GUILayout.Button("2 Deck", GUILayout.Height(buttonHeight))) {
playerDeck = new List<GameObject>(selectedDeckScript.two);
playerDeck = transform.GetComponent<Shuffle>().ShuffleDeck(playerDeck);
setDecks = true;
deckWindow = false;
statsScript.setStats = true;
statsScript.decidedDeck = 2;
}
if(GUILayout.Button("3 Deck", GUILayout.Height(buttonHeight))) {
playerDeck = new List<GameObject>(selectedDeckScript.three);
playerDeck = transform.GetComponent<Shuffle>().ShuffleDeck(playerDeck);
setDecks = true;
deckWindow = false;
statsScript.setStats = true;
statsScript.decidedDeck = 3;
}
if(GUILayout.Button("4 Deck", GUILayout.Height(buttonHeight))) {
playerDeck = new List<GameObject>(selectedDeckScript.four);
playerDeck = transform.GetComponent<Shuffle>().ShuffleDeck(playerDeck);
setDecks = true;
deckWindow = false;
statsScript.setStats = true;
statsScript.decidedDeck = 4;
}
}
void Update ()
{
if(setDecks == true)
{
networkView.RPC("EditPlayerListWithDecks",RPCMode.AllBuffered,Network.player);
networkView.RPC("Wait",RPCMode.AllBuffered);
setDecks = false;
}
}
[RPC]
void Wait()
{
waitForOtherPlayer++;
}
[RPC]
void EditPlayerListWithDecks(NetworkPlayer nPlayer)
{
GameObject manager = GameObject.FindGameObjectWithTag("GamePlayManager");
PlayerDataBase dataBaseScript = manager.GetComponent<PlayerDataBase>();
for(int i = 0; i < dataBaseScript.PlayerList.Count;i++)
{
if(dataBaseScript.PlayerList[i].networkPlayer == int.Parse(nPlayer.ToString()))
{
dataBaseScript.PlayerList[i].deckCards = new List<GameObject>(playerDeck);
}
}
}
}
Comment
Your answer
Follow this Question
Related Questions
PublicIPPortBlocked - Network.Connect() across multiple projects 0 Answers
how to properly clean up the NetworkView to prevent errors ? 0 Answers
A node in a childnode? 1 Answer
Adding to list in RPC 1 Answer
Multiplayer Moving Bullet 1 Answer