98 lines
3.2 KiB
C#
98 lines
3.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using TMPro;
|
|
public class RegionManager : MonoBehaviour
|
|
{
|
|
public static RegionManager instance;
|
|
[SerializeField]
|
|
public static RegionServerData selectedServer;
|
|
[SerializeField]
|
|
public List<RegionServerData> servers = new List<RegionServerData>();
|
|
public Button btn_auto;
|
|
public TMP_Text[] selectedServerTxts;
|
|
void Start()
|
|
{
|
|
UpdateServerData();
|
|
|
|
UpdateSelectedRegion();
|
|
|
|
foreach(RegionServerData server in servers){
|
|
if(PlayerPrefs.HasKey("regionOverride")){
|
|
if(PlayerPrefs.GetString("regionOverride") == server.name){
|
|
selectedServer = server;
|
|
}
|
|
}
|
|
server.btn_select.onClick.AddListener(()=>{SetRegionOverride(server.name);});
|
|
}
|
|
btn_auto.onClick.AddListener(()=>{ SetRegionOverride(""); });
|
|
}
|
|
|
|
public void UpdateServerData(){
|
|
StartCoroutine(updatePing());
|
|
}
|
|
|
|
IEnumerator updatePing(){
|
|
for(int i=0;i < servers.Count;i++){
|
|
WaitForSeconds f = new WaitForSeconds(0.05f);
|
|
Ping p = new Ping(servers[i].ip);
|
|
while (p.isDone == false)
|
|
{
|
|
yield return f;
|
|
}
|
|
|
|
servers[i].ping = p.time;
|
|
foreach(TMPro.TMP_Text pingTxt in servers[i].pingTxts){
|
|
pingTxt.text = p.time + " ms";
|
|
pingTxt.color = (p.time < 90) ? Color.green : (p.time < 140) ? Color.yellow : Color.red;
|
|
}
|
|
if(selectedServer == null || (!PlayerPrefs.HasKey("regionOverride") && selectedServer.ping > p.time)){ // <-- Auto select best server
|
|
selectedServer = servers[i];
|
|
}
|
|
}
|
|
yield return new WaitForSeconds(2);
|
|
StartCoroutine(updatePing());
|
|
UpdateSelectedRegion();
|
|
}
|
|
|
|
public void SetRegionOverride(string region){
|
|
Debug.Log("Setting region override to " + region);
|
|
foreach(RegionServerData server in servers){
|
|
if(server.name == region){
|
|
PlayerPrefs.SetString("regionOverride", region);
|
|
PlayerPrefs.Save();
|
|
selectedServer = server;
|
|
UpdateSelectedRegion();
|
|
return;
|
|
}
|
|
}
|
|
|
|
//No server found for the said region
|
|
PlayerPrefs.DeleteKey("regionOverride");
|
|
PlayerPrefs.Save();
|
|
|
|
UpdateSelectedRegion();
|
|
}
|
|
|
|
void UpdateSelectedRegion(){
|
|
btn_auto.interactable = PlayerPrefs.HasKey("regionOverride");
|
|
|
|
foreach(RegionServerData server in servers){
|
|
server.btn_select.interactable = PlayerPrefs.HasKey("regionOverride") ? (server.name != PlayerPrefs.GetString("regionOverride")): true;
|
|
}
|
|
|
|
foreach(TMP_Text selectedServerTxt in selectedServerTxts){
|
|
selectedServerTxt.text = PlayerPrefs.HasKey("regionOverride") ? PlayerPrefs.GetString("regionOverride") : "Auto - " + (selectedServer == null ? "/" : selectedServer.name);
|
|
}
|
|
}
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class RegionServerData{
|
|
public string name;
|
|
public string ip;
|
|
public int ping;
|
|
public TMPro.TMP_Text[] pingTxts;
|
|
public Button btn_select;
|
|
} |