109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System.Collections;
 | |
| using System.Collections.Generic;
 | |
| using UnityEngine;
 | |
| using UnityEngine.UI;
 | |
| using MySql.Data.MySqlClient;
 | |
| using System.Net;
 | |
| public class LeaderboardHandle : MonoBehaviour
 | |
| {
 | |
|     public InputField submitUsername;
 | |
|     public GameObject GameOverPanel;
 | |
|     public float time { get; set; }
 | |
|     public int finalScore { get; set; }
 | |
| 
 | |
|     private MySqlConnectionStringBuilder mySQLConectionBuilder = new MySqlConnectionStringBuilder();
 | |
| 
 | |
|     // Start is called before the first frame update
 | |
|     void Start()
 | |
|     {
 | |
|         mySQLConectionBuilder.Server = "sql4.freesqldatabase.com";
 | |
|         mySQLConectionBuilder.Port = 3306;
 | |
|         mySQLConectionBuilder.UserID = "sql4449219";
 | |
|         mySQLConectionBuilder.Password = "hsFqWLxIIF";
 | |
|         mySQLConectionBuilder.Database = "sql4449219";
 | |
| 
 | |
|         GameObject.Find("FinalScoreLabel").GetComponent<Text>().text = GameObject.Find("FinalScoreLabel").GetComponent<Text>().text.Replace("000", finalScore.ToString());
 | |
|     }
 | |
| 
 | |
|     public void SubmitScores()
 | |
|     {
 | |
|         SetScoreRecords(mySQLConectionBuilder.ConnectionString, submitUsername.text);
 | |
|         GameOverPanel.GetComponent<Animator>().enabled = true;
 | |
| 
 | |
|         List<Score> Scores = new List<Score>(GetScoreRecords(mySQLConectionBuilder.ConnectionString));
 | |
|         for (int i = 0; i < Scores.Count; i++)
 | |
|         {
 | |
|             Text scoreLabel = GameObject.Find($"ScoreText ({i + 1})").GetComponent<Text>();
 | |
|             string editedText = System.String.Format("{0,3} {1,22} {2,22} {3,22}", scoreLabel.text, Scores[i].username, Scores[i].score, Scores[i].timeLasted);
 | |
|             scoreLabel.text = editedText;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private void SetScoreRecords(string connectionString, string username)
 | |
|     {
 | |
|         try
 | |
|         {
 | |
|             using (MySqlConnection connection = new MySqlConnection(connectionString))
 | |
|             {
 | |
|                 connection.Open();
 | |
|                 string sql = $"INSERT INTO Scores VALUES ('{username.ToUpper()}', '{finalScore}', '{Mathf.FloorToInt(time)}', '{GetIPAddress()}')";
 | |
|                 using (MySqlCommand command = new MySqlCommand(sql, connection))
 | |
|                 {
 | |
|                     command.ExecuteNonQuery();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         catch (MySqlException e)
 | |
|         {
 | |
|             Debug.Log(e.ToString());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     private List<Score> GetScoreRecords(string connectionString)
 | |
|     {
 | |
|         List<Score> records = new List<Score>();
 | |
|         try
 | |
|         {
 | |
|             using (MySqlConnection connection = new MySqlConnection(connectionString))
 | |
|             {
 | |
|                 connection.Open();
 | |
|                 string sql = "SELECT Username, Score, TimeLasted FROM Scores ORDER BY Score DESC LIMIT 5";
 | |
|                 using (MySqlCommand command = new MySqlCommand(sql, connection))
 | |
|                 {
 | |
|                     using (MySqlDataReader reader = command.ExecuteReader())
 | |
|                     {
 | |
|                         while (reader.Read())
 | |
|                         {
 | |
|                             records.Add(new Score(reader.GetString(0), reader.GetInt32(1), reader.GetInt32(2)));
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         catch (MySqlException e)
 | |
|         {
 | |
|             Debug.Log(e.ToString());
 | |
|         }
 | |
|         return records;
 | |
|     }
 | |
| 
 | |
|     public class Score
 | |
|     {
 | |
|         public string username { get; }
 | |
|         public int score { get; }
 | |
|         public int timeLasted { get; }
 | |
| 
 | |
|         public Score(string username, int score, int timeLasted)
 | |
|         {
 | |
|             this.username = username;
 | |
|             this.score = score;
 | |
|             this.timeLasted = timeLasted;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     static string GetIPAddress()
 | |
|     {
 | |
|         return new WebClient().DownloadString("https://api.ipify.org").TrimEnd();
 | |
|     }
 | |
| }
 |