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