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