public void EndGameStatement(int heartCount, int earnedCoinCount, int earnedCrystalCount) { //GameManager scriptindeki trigger vasıtasıyla oyun bittiğinde bu metot çağırılır. Referanslar alınır. roomRef.Child("GameScenePlaces").GetValueAsync().ContinueWithOnMainThread(task => { DataSnapshot snapshot = task.Result; if (snapshot.GetRawJsonValue() != null) { GameScenePlaces playerPlaces = JsonUtility.FromJson <GameScenePlaces>(snapshot.GetRawJsonValue()); playerPlaces.finishedPlayerCount++; int place = playerPlaces.finishedPlayerCount; roomRef.Child("GameScenePlaces").SetRawJsonValueAsync(JsonUtility.ToJson(playerPlaces)); //Oyuncunun oyunu kaçıncı bitirdiğine ve kaç can harcadığına göre bir puan elde edilir. //O puana göre oyuncunun elde ettiği coin ve energy miktarları çarpılır. int placeResultPoint = (int)(connectedPlayerCount + 1) - place; int remainingHeartPoint = heartCount * placeResultPoint; int earnedCoin = remainingHeartPoint * earnedCoinCount; int earnedCrystal = remainingHeartPoint * earnedCrystalCount; UpdateUserData(earnedCoin, earnedCrystal); //Bitiş menüsündeki ilgili textlere gerekli bilgiler yazılır. finishPlaceText.text = "-" + place + "-"; placeResultText.text = "+" + placeResultPoint + " point"; remainingHeartText.text = "+" + remainingHeartPoint + " point"; coinText.text = "+" + earnedCoin + " coin"; crystalText.text = "+" + earnedCrystal + " crystal"; } }); }
private void Update() { if (waiting) { //Diğer oyuncular beklenirken, tüm oyuncular bağlandıysa ya da maksimum bekleme süresine ulaşıldıysa oyuna başlanır. waitTimer += Time.deltaTime; roomRef.Child("GameScene").GetValueAsync().ContinueWithOnMainThread(task => { DataSnapshot snapshot = task.Result; if (snapshot.GetRawJsonValue() != null) { connectedPlayerCount = snapshot.ChildrenCount; if (connectedPlayerCount >= playingPlayerCount || waitTimer >= maxWaitTimeForPlayer) { waiting = false; starting = true; otherPlayers = new GameObject[connectedPlayerCount - 1]; } } }); } if (starting) { //Oyunun başlaması tetiklendiğinde başlatma için editörden alınan sayıdan geriye sayılır. startingText.text = "The game will start after " + (int)(maxWaitTimeForStart - startTimer) + " seconds"; startTimer += Time.deltaTime; if (startTimer >= maxWaitTimeForStart) { starting = false; roomRef.Child("GameScene").GetValueAsync().ContinueWithOnMainThread(task => { DataSnapshot snapshot = task.Result; if (snapshot.GetRawJsonValue() != null) { int i = 0; foreach (DataSnapshot ds in snapshot.Children) { //Tüm oyuncular listeye eklenir. Player otherPlayer = JsonUtility.FromJson <Player>(ds.GetRawJsonValue()); placeList.Add((i + 1) + ". " + otherPlayer.nick); //Eğer ki ilgili oyuncu Aktif oyuncu ile aynı ID'ye sahipse bu oyuncu sahnede tekrar oluşturulmaz. if (otherPlayer.userId == auth.CurrentUser.UserId) { continue; } //İlgili oyuncu sahnede oluşturulur ve skin değişkeni uygulanır. otherPlayers[i] = Instantiate(otherPlayerPrefab); otherPlayers[i].GetComponent <Renderer>().material.color = otherPlayer.skin; i++; } UpdatePlaceText(); } }); waitingMenu.SetActive(false); gamingMenu.SetActive(true); playerObject.GetComponent <Rigidbody>().useGravity = true; //Oyun başlatıldıktan sonra listeye eklenen oyuncular Database'e yazdırılır. GameScenePlaces playerPlaces = new GameScenePlaces(); playerPlaces.finishedPlayerCount = 0; roomRef.Child("GameScenePlaces").SetRawJsonValueAsync(JsonUtility.ToJson(playerPlaces)); } } }