private void NewRoomUser(RoomData joiningRoom)
    {
        //Katılınan odaya ait Database güncellemeleri yapılır.
        roomName = joiningRoom.roomName;
        joiningRoom.currentPlayerCount++;
        roomsRef.Child(joiningRoom.roomName).Child("currentPlayerCount").SetValueAsync(joiningRoom.currentPlayerCount);

        //Aktif kullanıcıya ait default değişkenler atanır.
        RoomData.RoomUsers roomUser = new RoomData.RoomUsers();
        roomUser.userId  = auth.CurrentUser.UserId;
        roomUser.nick    = DatabaseManager.nick;
        roomUser.ready   = false;
        roomUser.playing = false;

        //Eğer bu oyuncu odayı kuran oyuncu ise hazır durumuna getirilir.
        if (joiningRoom.roomLeadId == auth.CurrentUser.UserId)
        {
            roomUser.ready = true;
        }

        string emptyJson = JsonUtility.ToJson(roomUser);

        roomsRef.Child(joiningRoom.roomName).Child("RoomUsers").Child(roomUser.userId).SetRawJsonValueAsync(emptyJson);

        //"canLeave" değişkeni kullanıcının odadan ayrılabileceğini, inRoom değişkeni de odada bulunduğunu ifade etmektedir.
        canLeave = true;
        inRoom   = true;
        roomMenu.SetActive(true);
        GetRoomPlayers(joiningRoom);
    }
    public void Ready()
    {
        //Bu metot odada bulunan "Ready" butonuna tanımlanmıştır.
        roomsRef.Child(roomName).GetValueAsync().ContinueWithOnMainThread(task =>
        {
            DataSnapshot snapshot = task.Result;
            if (snapshot.GetRawJsonValue() != null)
            {
                RoomData joinedRoom = JsonUtility.FromJson <RoomData>(snapshot.GetRawJsonValue());
                roomsRef.Child(roomName).Child("RoomUsers").GetValueAsync().ContinueWithOnMainThread(childTask =>
                {
                    DataSnapshot childSnapshot = childTask.Result;
                    if (childSnapshot.GetRawJsonValue() != null)
                    {
                        int index = 0;
                        foreach (DataSnapshot ds in childSnapshot.Children)
                        {
                            //Odada bulunan oyuncular arasından aktif oyuncunun ID'sine göre Database'de oyuncunun "ready" değişkeni güncellenir.
                            RoomData.RoomUsers roomUser = JsonUtility.FromJson <RoomData.RoomUsers>(ds.GetRawJsonValue());
                            if (roomUser.userId == auth.CurrentUser.UserId)
                            {
                                playerRows.transform.GetChild(index).transform.GetChild(1).transform.gameObject.SetActive(!roomUser.ready);
                                roomUser.ready = !roomUser.ready;
                                canLeave       = !roomUser.ready;

                                roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").Child(roomUser.userId).Child("ready").SetValueAsync(roomUser.ready);

                                //Eğer ki oyuncu hazır durumuna geldiyse odaya ait hazır oyuncu sayısı ve buton rengi güncellenir.
                                if (roomUser.ready)
                                {
                                    joinedRoom.readyPlayerCount++;
                                    readyButton.GetComponent <Image>().color = Color.green;
                                }
                                //Eğer ki oyuncu hazır durumundan çıktıysa odaya ait hazır oyuncu sayısı ve buton rengi güncellenir.
                                else
                                {
                                    joinedRoom.readyPlayerCount--;
                                    readyButton.GetComponent <Image>().color = Color.white;
                                }
                                roomsRef.Child(joinedRoom.roomName).Child("readyPlayerCount").SetValueAsync(joinedRoom.readyPlayerCount);
                                break;
                            }
                            index++;
                        }
                    }
                });
            }
        });
    }
    public void StartGame()
    {
        //Aktif oyuncu oda lideriyken start butonu görünmektedir. Ve bu metot start butonuna tanımlanmıştır.
        roomsRef.Child(roomName).GetValueAsync().ContinueWithOnMainThread(task =>
        {
            DataSnapshot snapshot = task.Result;
            if (snapshot.GetRawJsonValue() != null)
            {
                RoomData joinedRoom = JsonUtility.FromJson <RoomData>(snapshot.GetRawJsonValue());
                if (joinedRoom.readyPlayerCount >= 1)
                {
                    //Odaya ait "status" değişkeni güncellenmektedir
                    roomsRef.Child(joinedRoom.roomName).Child("status").SetValueAsync("Playing");

                    roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").GetValueAsync().ContinueWithOnMainThread(childTask =>
                    {
                        DataSnapshot childSnapshot = childTask.Result;
                        if (childSnapshot.GetRawJsonValue() != null)
                        {
                            foreach (DataSnapshot ds in childSnapshot.Children)
                            {
                                //Tek tek tüm oyuncular kontrol edilerek ilgili değişkenleri Database'de güncellenmektedir.
                                RoomData.RoomUsers roomUser = JsonUtility.FromJson <RoomData.RoomUsers>(ds.GetRawJsonValue());
                                if (roomUser.ready)
                                {
                                    roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").Child(roomUser.userId).Child("ready").SetValueAsync(false);
                                    roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").Child(roomUser.userId).Child("playing").SetValueAsync(true);
                                    roomsRef.Child(joinedRoom.roomName).Child("playingPlayerCount").SetValueAsync(++joinedRoom.playingPlayerCount);
                                }
                            }
                        }
                    });
                }
                //Eğer ki hazır diyen oyuncu yok ise bu uyarı gösterilir.
                else
                {
                    exceptionText.text = "At least 1 people must be ready for the game to start.";
                }
            }
        });
    }
    private void GetRoomPlayers(RoomData joinedRoom)
    {
        //Referans alınan odaya göre tüm oyuncular odaya getirilir.
        roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").GetValueAsync().ContinueWithOnMainThread(task =>
        {
            DataSnapshot snapshot = task.Result;
            if (snapshot.GetRawJsonValue() != null)
            {
                for (int i = 0; i < joinedRoom.maxPlayer; i++)
                {
                    //Tüm oyuncu textleri ve spriteları silinir.
                    playerRows.transform.GetChild(i).GetChild(1).transform.gameObject.SetActive(false);
                    playerRows.transform.GetChild(i).GetChild(1).GetComponent <Image>().sprite = memberSprite;
                }

                int index = 0;
                foreach (DataSnapshot ds in snapshot.Children)
                {
                    //Tek tek tüm oyuncular ele alınır.
                    RoomData.RoomUsers roomUser = JsonUtility.FromJson <RoomData.RoomUsers>(ds.GetRawJsonValue());

                    //Eğer ki oda lideri yok ise 0. indiste bulunan oyuncu yeni oda lideri olarak atanır.
                    if (index == 0 && joinedRoom.currentPlayerCount > 0 && (joinedRoom.roomLeadId == null || joinedRoom.roomLeadId == ""))
                    {
                        //Cihazdaki aktif oyuncu hazır durumunda ise "canLeave" değişkeni "false" 'dan "true" 'ya çekilir.
                        if (roomUser.ready && roomUser.userId == auth.CurrentUser.UserId)
                        {
                            canLeave = true;
                        }

                        roomsRef.Child(joinedRoom.roomName).Child("RoomUsers").Child(roomUser.userId).Child("ready").SetValueAsync(true);
                        roomsRef.Child(joinedRoom.roomName).Child("roomLeadId").SetValueAsync(roomUser.userId);
                        roomsRef.Child(joinedRoom.roomName).Child("roomLeadNick").SetValueAsync(roomUser.nick);
                    }
                    //Eğer ki oyuncu oda lideriyse Sprite'ı güncellenir.
                    if (joinedRoom.roomLeadId == roomUser.userId)
                    {
                        playerRows.transform.GetChild(index).GetChild(1).GetComponent <Image>().sprite = crownSprite;
                    }

                    //Eğer ki oyuncu oyunda değilse hazır durumuna göre Sprite'ı aktif edilir.
                    if (!roomUser.playing)
                    {
                        playerRows.transform.GetChild(index).GetChild(1).transform.gameObject.SetActive(roomUser.ready);
                    }

                    //Eğer ki oyuncu odada ise Sprite'ı güncellenir ve aktif hale getirilir.
                    else
                    {
                        playerRows.transform.GetChild(index).GetChild(1).GetComponent <Image>().sprite = playingSprite;
                        playerRows.transform.GetChild(index).GetChild(1).transform.gameObject.SetActive(true);
                    }

                    playerRows.transform.GetChild(index).transform.GetChild(0).GetComponent <Text>().text = roomUser.nick;

                    //Tek tek tüm oyuncular kontrol edilirken ilgili oyuncu, cihazdaki aktif oyuncuyla aynı olduğunda oyuncuya ait-
                    //playing değişkeni true ise (oyuna başlıyorsa) odadan ayrılamaz ve bir süre sonra oyun sahnesine yönlendirilir.
                    if (roomUser.userId == auth.CurrentUser.UserId && roomUser.playing)
                    {
                        canLeave = false;
                        played   = true;
                    }

                    index++;
                }
                //Aktif oyuncu oda lideriyse ilgili buton düzenlemeleri yapılır.
                if (joinedRoom.roomLeadId == auth.CurrentUser.UserId)
                {
                    readyButton.image.color = Color.white;
                    readyButtonObject.SetActive(false);
                    startButtonObject.SetActive(true);
                }
            }
        });
        //Odaya ait text güncellemelerinin yapıldığı metot çağrılır..
        RefreshRoom(joinedRoom);
    }