Untitled
unknown
csharp
2 years ago
2.8 kB
2
Indexable
Never
public void EndGame() { StartService(true); if (int.Parse(tvTimer.Text) > spData.GetIntValue(General.KEY_BEST_TIME, 0)) spData.PutIntValue(General.KEY_BEST_TIME, int.Parse(tvTimer.Text)); tskGetScores = fbData.GetDocument("LeaderBoard", "Records"); tskGetScores.AddOnCompleteListener(this); Intent intent = new Intent(this, typeof(GameEndActivity)); StartActivity(intent); Finish(); game.TRunGame.Suspend(); game.TManageObstacle.Suspend(); } /// <summary> /// הפעולה בודקת אם הניקוד שהשחקן עשה אמור להיכנס לטבלת השיאים /// </summary> /// <param name="currentScore">הציון שהמשתמש עשה במשחק האחרון</param> /// <param name="scores">רשימת הציונים </param> /// <returns>הפעולה מחזירה את המקום של השחקן בטבלת השיאים אם הוא נכנס אליה </returns> private int CheckIfHighScore(int currentScore, JavaList scores) { for (int i = 0; i < scores.Count; i++) { JavaDictionary score = (JavaDictionary)scores[i]; int scoreVal = int.Parse(score["score"].ToString()); if (currentScore > scoreVal) return i; } if (scores.Count < 10) return scores.Count; return -1; } /// <summary> /// הפעולה מעדכנת בטבלת השיאים את הרשימה שהתקבלה /// </summary> /// <param name="scores">רשימת הציונים שמתעדכנת בטבלת השיאים</param> private void UpdateLeaderboard(JavaList scores) { string[] segments = { "Records" }; FieldPath fp = FieldPath.Of(segments); fbData.UpdateDocumentData(General.FB_COLLECTION_NAME, General.FB_DOCUMENT_NAME, fp, scores); } /// <summary> /// מעדכן את הטבלת שיאים /// </summary> public void OnComplete(Task task) { if (task.IsSuccessful) { if (task == tskGetScores) { DocumentSnapshot ds = (DocumentSnapshot)task.Result; JavaList scores = (JavaList)ds.Get(General.FB_DOCUMENT_NAME); int lastScore = int.Parse(tvTimer.Text); int scoreIndex = CheckIfHighScore(lastScore, scores); if (scoreIndex != -1) { JavaDictionary ourScore = new JavaDictionary(); string username = spData.GetStringValue(General.KEY_NAME, "guest"); ourScore.Add("username", username); ourScore.Add("score", lastScore); scores.Insert(scoreIndex, ourScore); if (scores.Count > 10) scores.RemoveAt(scores.Count - 1); UpdateLeaderboard(scores); } } } }