// Server
    private IEnumerator SetUpGame()
    {
        Debug.Log("Set up Game");
        yield return(new WaitForSeconds(1.0f));        // just in case

        // Shuffle Spawn positions
        for (int i = 0; i < this.spawnTransforms.Count; i++)
        {
            int       ran  = (int)Random.Range(0, spawnTransforms.Count);
            Transform temp = spawnTransforms[i];
            spawnTransforms[i]   = spawnTransforms[ran];
            spawnTransforms[ran] = temp;
        }


        // Send msg to all clients for each player
        Debug.Log("Send initialize update to " + this.numPlayers.ToString() + " players");

        for (int i = 0; i < this.numPlayers; i++)
        {
            InitializePlayerMessage msg = new InitializePlayerMessage();
            msg.name          = this.playerInfoList[i].name;
            msg.colour        = this.playerInfoList[i].colour;
            msg.objectId      = (int)this.playerInfoList[i].playerObjectId;
            msg.spawnPosition = this.spawnTransforms[i].position;
            NetworkServer.SendToAll(CustomMsgType.InitPlayer, msg);

            // Update server replication
            PlayerManager tempPlayer = NetworkHelper.GetObjectByNetIdValue <PlayerManager>((uint)msg.objectId, true);
            tempPlayer.Initialize(msg.name, msg.colour, msg.spawnPosition, this, this.gameCanvas);
        }

        // Update player game UI
        GameUISetupMessage sendMsg = new GameUISetupMessage();

        List <string> tempNames = new List <string>();
        List <Color>  tempCol   = new List <Color>();

        for (int i = 0; i < this.maxConnections; i++)
        {
            tempNames.Add(this.playerInfoList[i].name);
            tempCol.Add(this.playerInfoList[i].colour);
        }

        sendMsg.isPlaying     = this.isPlayerReadyList.ToArray();
        sendMsg.playerHealth  = this.playerHealthList.ToArray();
        sendMsg.playerNames   = tempNames.ToArray();
        sendMsg.playerColours = tempCol.ToArray();

        NetworkServer.SendToAll(CustomMsgType.GameUISetup, sendMsg);

        // Start game routines
        this.StartCoroutine(this.CheckDeathRoutine());
        this.StartCoroutine(this.GameTimerRoutine());
        this.StartCoroutine(this.ScoreRoutine());
        this.StartCoroutine(this.GameCountdown());
        this.StartCoroutine(this.PickupSpawnRoutine());

        yield return(null);
    }
    // Client
    private void OnGameUISetupMessage(NetworkMessage _networkMessage)
    {
        GameUISetupMessage msg = _networkMessage.ReadMessage <GameUISetupMessage>();

        this.canvasManager.OnGameUISetup(msg.isPlaying, msg.playerHealth, msg.playerNames, msg.playerColours);
    }