151 lines
4.9 KiB
C#
151 lines
4.9 KiB
C#
using Cysharp.Threading.Tasks;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class DataController : MonoSingleton<DataController>
|
|
{
|
|
public string distCode;
|
|
private AreaStationData areaStationData = new AreaStationData();
|
|
private CityInfo[] cityInfos;
|
|
|
|
[HideInInspector]
|
|
public List<UniTask<AreaData>> loadingAreaDataTasks = new List<UniTask<AreaData>>();
|
|
[HideInInspector]
|
|
public List<UniTask<ScreenTopStatistics>> loadingScreenTopStatisticsTasks = new List<UniTask<ScreenTopStatistics>>();
|
|
|
|
|
|
private AreaData[] areaDatas;
|
|
private ScreenTopStatistics[] screenTopStatistics;
|
|
|
|
private async void Start()
|
|
{
|
|
Bootstrap.Instance.webAdapter.onStation.AddListener(SwitchStation);
|
|
await UniTask.Delay(1);
|
|
areaStationData = await GetProvincialLevelStationData("37");
|
|
cityInfos = transform.GetComponentsInChildren<CityInfo>();
|
|
for (int i = 0; i < cityInfos.Length; i++)
|
|
{
|
|
cityInfos[i].Init();
|
|
}
|
|
areaDatas = await UniTask.WhenAll(loadingAreaDataTasks);
|
|
for (int i = 0; i < cityInfos.Length; i++)
|
|
{
|
|
string distCodeTemp = cityInfos[i].distCode;
|
|
cityInfos[i].SetAreaData(GetAreaDateByDistCode(distCodeTemp));
|
|
}
|
|
screenTopStatistics = await UniTask.WhenAll(loadingScreenTopStatisticsTasks);
|
|
for (int i = 0; i < cityInfos.Length; i++)
|
|
{
|
|
string distCodeTemp = cityInfos[i].distCode;
|
|
cityInfos[i].SetStationData(GetAreLevelStationDataByDistCode(distCodeTemp));
|
|
}
|
|
}
|
|
|
|
|
|
public void TEstStation(int index)
|
|
{
|
|
SwitchStation(index);
|
|
}
|
|
|
|
public void SwitchStation(int stationIndex)
|
|
{
|
|
for (int i = 0; i < cityInfos.Length; i++)
|
|
{
|
|
cityInfos[i].SetScreenTopStatistices(stationIndex);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Õë¶ÔÊм¶
|
|
/// </summary>
|
|
/// <param name="_distCode"></param>
|
|
/// <param name="_disName"></param>
|
|
/// <returns></returns>
|
|
public async UniTask<ScreenTopStatistics> GetProvincialLevelStationInfo(string _distCode, string _disName)
|
|
{
|
|
if (_distCode.Length == 6)
|
|
distCode = _distCode.Substring(0, 4);
|
|
string url = Bootstrap.Instance.urlDic["µØÍ¼ÐÅÏ¢»ã×Ü"];
|
|
AreaStationData areaStationData = await AsyncWebReq.Get<AreaStationData>(url + distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token);
|
|
DataItem sts = areaStationData.data.Find(s => s.disName == _disName);
|
|
if (sts == null)
|
|
return null;
|
|
return sts.screenTopStatistics;
|
|
}
|
|
/// <summary>
|
|
/// ͨ¹ýÊм¶ÊÓ½ÇÈ¥»ñÈ¡Êý¾Ý Õë¶ÔÇøÏØ
|
|
/// </summary>
|
|
/// <param name="_distCode"></param>
|
|
/// <returns></returns>
|
|
public ScreenTopStatistics GetAreLevelStationDataByDistCode(string _distCode)
|
|
{
|
|
for (int i = 0; i < screenTopStatistics.Length; i++)
|
|
{
|
|
if (screenTopStatistics[i] != null && screenTopStatistics[i].distCode == _distCode)
|
|
{
|
|
return screenTopStatistics[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Õë¶ÔÊм¶ÇøÓò
|
|
/// </summary>
|
|
/// <param name="_distCode"></param>
|
|
/// <returns></returns>
|
|
public ScreenTopStatistics GetProvincialLevelStationDataByDistCode(string _distCode)
|
|
{
|
|
for (int i = 0; i < areaStationData.data.Count; i++)
|
|
{
|
|
if (areaStationData.data[i].distCode == _distCode)
|
|
{
|
|
return areaStationData.data[i].screenTopStatistics;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// »ñȡÿ¸öÇøÓòµÄ¾ÛºÏÐÅÏ¢
|
|
/// </summary>
|
|
/// <param name="_distCode"></param>
|
|
/// <returns></returns>
|
|
public async UniTask<AreaData> GetAreaDataByDistCode(string _distCode)
|
|
{
|
|
await UniTask.Delay(2);
|
|
string url = Bootstrap.Instance.urlDic["µØÍ¼µ¯³ö¿ò"];
|
|
AreaData areaData = await AsyncWebReq.Get<AreaData>($"{url}{_distCode}", Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token);
|
|
if (!bool.Parse(areaData.success)) return null;
|
|
return areaData;
|
|
}
|
|
|
|
public AreaData GetAreaDateByDistCode(string _distCode)
|
|
{
|
|
for (int i = 0; i < areaDatas.Length; i++)
|
|
{
|
|
if (areaDatas[i].data.distCode == _distCode)
|
|
{
|
|
return areaDatas[i];
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// »ñÈ¡µØÍ¼»ã×Ü
|
|
/// </summary>
|
|
/// <param name="_distCode"></param>
|
|
/// <returns></returns>
|
|
private async UniTask<AreaStationData> GetProvincialLevelStationData(string _distCode)
|
|
{
|
|
string url = Bootstrap.Instance.urlDic["µØÍ¼ÐÅÏ¢»ã×Ü"];
|
|
AreaStationData areaStationData = await AsyncWebReq.Get<AreaStationData>(url + _distCode, Bootstrap.Instance.webAdapter.head, Bootstrap.Instance.webAdapter.token);
|
|
return areaStationData;
|
|
}
|
|
|
|
|
|
}
|