// Start is called before the first frame update
    void Start()
    {
        colyseusManager = GameObject.FindObjectOfType<ColyseusManager>();
        gameManager = GameObject.FindObjectOfType<GameManager>();
        audioManager = GameObject.FindObjectOfType<AudioManager>();
        
        if (roomName != null)
        {
            roomName.text = "Room ID: ";
        }
        
        if (playerCount != null)
        {
            playerCount.text = "Players: ?";
        }

        if (totalHeat != null)
        {
            totalHeat.value = gameManager.GetOverallHeatLevel();
        }
        
        colyseusManager.LeftRoom += code =>
        {
            playerCount.text = "Players: 0";
            
            roomName.text = "Room ID: [empty]";

            if (reconnectButton != null)
            {
                reconnectButton.gameObject.SetActive(true);
            }
        };
    }
        public void Start()
        {
            colyseusManager = GameObject.FindObjectOfType <ColyseusManager>();
            gameManager     = GameObject.FindObjectOfType <GameManager>();
            audioManager    = GameObject.FindObjectOfType <AudioManager>();

            animator = this.GetComponentInChildren <Animator>();

            rb = GetComponentInChildren <Rigidbody>();

            if (animator == null)
            {
                Debug.Log("Animator not found");
            }
            else
            {
                animator.SetFloat("speed", 0.0f);
            }

            colyseusManager.PlayerUpdated   += OnPlayerUpdated;
            colyseusManager.MessageReceived += (sender, o) =>
            {
                if (o is IndexedDictionary <string, object> )
                {
                    var data = (IndexedDictionary <string, object>)o;

                    var playerId = "";

                    if (data.ContainsKey("playerId"))
                    {
                        playerId = data["playerId"].ToString();
                    }

                    if (player.id == playerId)
                    {
                        if (data.ContainsKey("eventType") && data["eventType"].ToString() == "deposit")
                        {
                            gameManager.Deposit(data["color"].ToString(), 1);

                            audioManager.PlaySoundEffect(SoundEffectType.Deposit);
                        }
                    }
                }

                Debug.Log("Received message");
            };
        }
    // Start is called before the first frame update
    async Task Start()
    {
        colyseusManager = GameObject.FindObjectOfType <ColyseusManager>();
        audioManager    = GameObject.FindObjectOfType <AudioManager>();

        colyseusManager.ConnectToServer();
        await colyseusManager.CreateRoom("game");

        timeLeft = 60 * 4;

        colyseusManager.PlayerAdded += (sender, player) =>
        {
            var playerPrefab = GetPlayerPrefab(player);

            if (playerPrefab != null)
            {
                if (playerObjects.ContainsKey(player.name))
                {
                    Destroy(playerObjects[player.name]);
                    playerObjects.Remove(player.name);
                }

                var spawnPoint = GetNextSpawnPoint();

                if (spawnPoint == null)
                {
                    Debug.LogError("No spawn point found");
                    return;
                }

                var playerObject = Instantiate(playerPrefab, spawnPoint.transform.position, Quaternion.identity);

                playerObjects.Add(player.name, playerObject);

                var playerScript = playerObject.GetComponent <PlayerController>();

                playerScript.player = player;

                audioManager.PlaySoundEffect(SoundEffectType.PlayerSpawn);

                if (playerObjects.Count == 1)
                {
                    StartGame(60 * 3); // Play for 3 minutes...
                }
                else
                {
                    Debug.Log($"Player joined '{player.name}'");
                }
            }
        };

        colyseusManager.PlayerRemoved += (sender, player) =>
        {
            if (playerObjects.ContainsKey(player.name))
            {
                Destroy(playerObjects[player.name]);
                playerObjects.Remove(player.name);

                Debug.Log($"Removed player '{player.name}'");
            }
        };

        colyseusManager.LeftRoom += code =>
        {
            foreach (var player in playerObjects)
            {
                Destroy(player.Value);
            }

            playerObjects.Clear();
        };
    }