fix:AR相关修改

This commit is contained in:
lishuo 2023-06-28 15:59:34 +08:00
parent 74ba5790f9
commit c95f6b7c70
12 changed files with 382 additions and 368 deletions

View File

@ -5,6 +5,7 @@ using System.Threading.Tasks;
using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts;
using Assets.Scripts.Apis.Models; using Assets.Scripts.Apis.Models;
using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Networking; using UnityEngine.Networking;
namespace Assets.AR namespace Assets.AR
@ -20,10 +21,46 @@ namespace Assets.AR
private readonly string _serverARRoutePath; private readonly string _serverARRoutePath;
private readonly string _serverVideoPath; private readonly string _serverVideoPath;
public bool IsVideoDownloaded { get; private set; } private bool IsVideoNeedDownload { get; set; }
public bool IsARDataDownloaded { get; private set; } private bool IsARDataNeedDownload { get; set; }
public bool IsARRouteDownloaded { get; private set; } private bool IsARRouteNeedDownload { get; set; }
public float Total { get; private set; } = 0; public bool IsDone => !IsVideoNeedDownload && !IsARDataNeedDownload && !IsARRouteNeedDownload;
private float _total { get; set; }
private float _videoProgress;
public float VideoProgress
{
get => _videoProgress;
set
{
_videoProgress = value;
ComputeProgress();
}
}
private float _dataProgress;
public float DataProgress
{
get => _dataProgress;
set
{
_dataProgress = value;
ComputeProgress();
}
}
private float _routeProgress;
public float RouteProgress
{
get => _routeProgress;
set
{
_routeProgress = value;
ComputeProgress();
}
}
private Action<float> ReportProgress { get; set; }
public ARDownloader(MapRoute route) public ARDownloader(MapRoute route)
{ {
@ -42,51 +79,72 @@ namespace Assets.AR
_serverVideoPath = _route.Url; _serverVideoPath = _route.Url;
} }
public async UniTask<UnityWebRequest> DownLoadVideoAsync(IProgress<float> progress = null, private void ComputeProgress()
CancellationTokenSource cancellation = default(CancellationTokenSource))
{ {
return await DownloadToFileAsync(_serverVideoPath, _localVideoPath, progress, cancellation); var progress = (_videoProgress + _routeProgress + _dataProgress) / _total;
ReportProgress?.Invoke(progress);
} }
public async UniTask<UnityWebRequest> DownLoadARRouteAsync(IProgress<float> progress = null, public async Task DownLoadDefault(Action<float> progress = null,CancellationTokenSource cancellation = default(CancellationTokenSource))
CancellationTokenSource cancellation = default(CancellationTokenSource))
{ {
return await DownloadToFileAsync(_serverARRoutePath, _localARRoutePath, progress, cancellation); ReportProgress = progress;
if(IsVideoNeedDownload)
await DownLoadVideoAsync(Progress.Create<float>(x => VideoProgress = x),cancellation);
if(IsARRouteNeedDownload)
await DownLoadARRouteAsync(Progress.Create<float>(x=> RouteProgress = x),cancellation);
if(IsARDataNeedDownload)
await DownLoadARDataAsync(Progress.Create<float>(x=> DataProgress = x),cancellation);
} }
public async UniTask<UnityWebRequest> DownLoadARDataAsync(IProgress<float> progress = null, private async UniTask<UnityWebRequest> DownLoadVideoAsync(IProgress<float> progress = null,CancellationTokenSource cancellation = default(CancellationTokenSource))
{
var result = await DownloadToFileAsync(_serverVideoPath, _localVideoPath, progress, cancellation);
IsVideoNeedDownload = !result.isDone;
return result;
}
private async UniTask<UnityWebRequest> DownLoadARRouteAsync(IProgress<float> progress = null,CancellationTokenSource cancellation = default(CancellationTokenSource))
{
var result = await DownloadToFileAsync(_serverARRoutePath, _localARRoutePath, progress, cancellation);
IsARRouteNeedDownload = !result.isDone;
return result;
}
private async UniTask<UnityWebRequest> DownLoadARDataAsync(IProgress<float> progress = null,
CancellationTokenSource cancellation = default(CancellationTokenSource)) CancellationTokenSource cancellation = default(CancellationTokenSource))
{ {
return await DownloadToFileAsync(_serverARDataPath, _localARDataPath, progress, cancellation); var result = await DownloadToFileAsync(_serverARDataPath, _localARDataPath, progress, cancellation);
IsARDataNeedDownload = !result.isDone;
return result;
} }
public async Task<bool> CheckAllAsync() public async Task<bool> CheckAllAsync()
{ {
IsARRouteDownloaded = await CheckARRouteAsync(); IsARRouteNeedDownload = await CheckARRouteAsync();
IsARDataDownloaded = await CheckARDataAsync(); IsARDataNeedDownload = await CheckARDataAsync();
IsVideoDownloaded = await CheckVideoAsync(); IsVideoNeedDownload = await CheckVideoAsync();
if (IsVideoDownloaded) if (IsVideoNeedDownload)
Total += 1f; _total += 1f;
if (IsARRouteDownloaded) if (IsARRouteNeedDownload)
Total += 1f; _total += 1f;
if (IsARDataDownloaded) if (IsARDataNeedDownload)
Total += 1f; _total += 1f;
return IsVideoDownloaded || IsARRouteDownloaded || IsARDataDownloaded; return IsVideoNeedDownload || IsARRouteNeedDownload || IsARDataNeedDownload;
} }
/// <summary> /// <summary>
/// return true if the video is needed to download /// return true if the video is needed to download
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<bool> CheckVideoAsync() private async Task<bool> CheckVideoAsync()
{ {
try try
{ {
if (!File.Exists(_localVideoPath)) return true; if (!File.Exists(_localVideoPath)) return true;
var result = await HeadFileAsync(_serverVideoPath, _localVideoPath); return await HeadFileAsync(_serverVideoPath, _localVideoPath);
return result.responseCode != 304;
} }
catch (Exception e) catch (Exception e)
{ {
@ -95,35 +153,33 @@ namespace Assets.AR
} }
/// <summary> /// <summary>
/// return true if the video is needed to download /// return true if the video need to update or download
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<bool> CheckARRouteAsync() private async Task<bool> CheckARRouteAsync()
{ {
if (!File.Exists(_localARRoutePath)) return true; if (!File.Exists(_localARRoutePath)) return true;
var result = await HeadFileAsync(_serverARRoutePath, _localARRoutePath); return await HeadFileAsync(_serverARRoutePath, _localARRoutePath);
return result.responseCode != 304;
} }
/// <summary> /// <summary>
/// return true if the video is needed to download /// return true if the video is needed to download
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
public async Task<bool> CheckARDataAsync() private async Task<bool> CheckARDataAsync()
{ {
if (!File.Exists(_localARDataPath)) return true; if (!File.Exists(_localARDataPath)) return true;
var result = await HeadFileAsync(_serverARDataPath, _localARDataPath); return await HeadFileAsync(_serverARDataPath, _localARDataPath);
return result.responseCode != 304;
} }
/// <summary> /// <summary>
/// 下载文件到本地(持续存入磁盘减少内存占用) /// 下载文件到本地(持续存入磁盘减少内存占用)
/// </summary> /// </summary>
/// <param name="downloadUrl">文件连接</param> /// <param name="downloadUrl">文件连接</param>
/// <param name="fullPath">本地文件全路径</param> /// <param name="fullPath">本地文件全路径</param>
/// <param name="progress">下载进度</param> /// <param name="progress">下载进度</param>
public static async UniTask<UnityWebRequest> DownloadToFileAsync(string downloadUrl, string fullPath, /// <param name="cancellation"></param>
private static async UniTask<UnityWebRequest> DownloadToFileAsync(string downloadUrl, string fullPath,
IProgress<float> progress = null, CancellationTokenSource cancellation = default(CancellationTokenSource)) IProgress<float> progress = null, CancellationTokenSource cancellation = default(CancellationTokenSource))
{ {
var dh = new DownloadHandlerFile(fullPath) var dh = new DownloadHandlerFile(fullPath)
@ -138,12 +194,8 @@ namespace Assets.AR
var result = await request.SendWebRequest().ToUniTask(progress, PlayerLoopTiming.Update, var result = await request.SendWebRequest().ToUniTask(progress, PlayerLoopTiming.Update,
(cancellation?.Token ?? default(CancellationToken))); (cancellation?.Token ?? default(CancellationToken)));
var etag = result.GetResponseHeader("ETag"); var etag = result.GetResponseHeader("x-oss-hash-crc64ecma");
var path = fullPath + ".etag"; var path = fullPath + ".etag";
if (!File.Exists(path))
{
File.Create(path);
}
File.WriteAllText(path, etag); File.WriteAllText(path, etag);
return result; return result;
@ -155,7 +207,7 @@ namespace Assets.AR
/// <param name="downloadUrl">download url</param> /// <param name="downloadUrl">download url</param>
/// <param name="fullPath">local path for storage</param> /// <param name="fullPath">local path for storage</param>
/// <returns></returns> /// <returns></returns>
public static async UniTask<UnityWebRequest> HeadFileAsync(string downloadUrl, string fullPath, private static async Task<bool> HeadFileAsync(string downloadUrl, string fullPath,
IProgress<float> progress = null, CancellationTokenSource cancellation = default(CancellationTokenSource)) IProgress<float> progress = null, CancellationTokenSource cancellation = default(CancellationTokenSource))
{ {
try try
@ -168,26 +220,13 @@ namespace Assets.AR
} }
var request = UnityWebRequest.Head(downloadUrl); var request = UnityWebRequest.Head(downloadUrl);
if (!string.IsNullOrEmpty(etag)) var result = await request.SendWebRequest().ToUniTask(progress, PlayerLoopTiming.Update, (cancellation?.Token ?? default(CancellationToken)));
request.SetRequestHeader("If-None-Match", etag); var responseTag = result.GetResponseHeader("x-oss-hash-crc64ecma");
return !responseTag.Equals(etag);
var result =
await request
.SendWebRequest().ToUniTask(progress, PlayerLoopTiming.Update,
(cancellation?.Token ?? default(CancellationToken)));
if (result.responseCode != 304)
{
etag = result.GetResponseHeader("ETag");
File.WriteAllText(fullPath + ".etag", etag);
}
return result;
} }
catch (Exception e) catch (Exception e)
{ {
return null; return false;
} }
} }
} }

View File

@ -4,7 +4,6 @@ using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using Assets.Core; using Assets.Core;
using Assets.Scripts.Apis.Models; using Assets.Scripts.Apis.Models;
using DG.Tweening;
using Mapbox.Utils; using Mapbox.Utils;
using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts;
using UnityEngine.Assertions; using UnityEngine.Assertions;
@ -116,18 +115,17 @@ namespace Assets.Scripts.Scenes.VideoRide
ticks++; ticks++;
} }
public virtual void ComputeAnimator() protected virtual void ComputeAnimator()
{ {
if (animator != null) if (animator == null) return;
{
animator.SetFloat(PreSpeed, (float)preSpeed); animator.SetFloat(PreSpeed, (float)preSpeed);
animator.SetFloat(AnimatorSpeed, (float)OnlineSpeed); animator.SetFloat(AnimatorSpeed, (float)OnlineSpeed);
animator.SetFloat(Grade, (float)currentSlope); animator.SetFloat(Grade, (float)currentSlope);
animator.SetFloat(Power, (float)power); animator.SetFloat(Power, (float)power);
}
} }
//计算人物当前属性 //计算人物当前属性
public virtual void ComputePlayer() protected virtual void ComputePlayer()
{ {
if (power > 0) if (power > 0)
{ {
@ -141,7 +139,7 @@ namespace Assets.Scripts.Scenes.VideoRide
} }
} }
//计算当前人物的经纬度 //计算当前人物的经纬度
public virtual void Forward() protected virtual void Forward()
{ {
try try
{ {
@ -183,9 +181,11 @@ namespace Assets.Scripts.Scenes.VideoRide
public void ComputeNextSlope() public void ComputeNextSlope()
{ {
double sumDistance = 0; double sumDistance = 0;
mapData = manager.GetMapData(); mapData = manager.GetMapData();
if (mapData == null) if (mapData == null)
return; return;
var pointList = mapData.List; var pointList = mapData.List;
int preIndex = 0; int preIndex = 0;
for (int i = 0; i < pointList.Count; i++) for (int i = 0; i < pointList.Count; i++)
@ -206,7 +206,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{ {
currentIndex = pointList.Count - 1; currentIndex = pointList.Count - 1;
} }
Debug.Log(currentIndex);
preIndex = currentIndex > 0 ? currentIndex - 1 : 0;//前一个索引 preIndex = currentIndex > 0 ? currentIndex - 1 : 0;//前一个索引
int nextIndex = currentIndex == pointList.Count - 1 ? currentIndex : currentIndex + 1; //计算下一个点的坡度和距离 int nextIndex = currentIndex == pointList.Count - 1 ? currentIndex : currentIndex + 1; //计算下一个点的坡度和距离
@ -218,6 +218,7 @@ namespace Assets.Scripts.Scenes.VideoRide
nextSlopeDistance = sumDistance - totalDistance * 1000; nextSlopeDistance = sumDistance - totalDistance * 1000;
//NextSlopeTotalDistance = pointList[nextIndex].Distance; //NextSlopeTotalDistance = pointList[nextIndex].Distance;
currentSlopeDistance = (totalDistance * 1000 - (sumDistance - pointList[currentIndex].Distance)); currentSlopeDistance = (totalDistance * 1000 - (sumDistance - pointList[currentIndex].Distance));
//计算累计爬升 //计算累计爬升
totalClimb = 0; totalClimb = 0;
for (int i = 1; i <= currentIndex; i++) for (int i = 1; i <= currentIndex; i++)
@ -229,16 +230,19 @@ namespace Assets.Scripts.Scenes.VideoRide
} }
} }
} }
private void OnDisable() private void OnDisable()
{ {
head?.SetActive(false); head?.SetActive(false);
} }
private void OnEnable() private void OnEnable()
{ {
head?.SetActive(true); head?.SetActive(true);
} }
//显示人物头顶的名字 //显示人物头顶的名字
public virtual void CreateHeadImage() protected virtual void CreateHeadImage()
{ {
if (head == null) if (head == null)
{ {
@ -270,17 +274,17 @@ namespace Assets.Scripts.Scenes.VideoRide
private void OnBecameInvisible() private void OnBecameInvisible()
{ {
head.SetActive(false); head?.SetActive(false);
} }
private void OnBecameVisible() private void OnBecameVisible()
{ {
head.SetActive(true); head?.SetActive(true);
} }
public void SetStartDistance(double distance) public void SetStartDistance(double _distance)
{ {
this.StartDistance = distance *1000; this.StartDistance = _distance *1000;
} }
public void Destroy() public void Destroy()
{ {
@ -288,7 +292,9 @@ namespace Assets.Scripts.Scenes.VideoRide
{ {
manager.Pause(); manager.Pause();
} }
head?.Destroy(); head?.Destroy();
gameObject.Destroy(); gameObject.Destroy();
} }
//设置当前玩家属性 //设置当前玩家属性

View File

@ -4,7 +4,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{ {
public class OnlineVideoPlayer : AbstractVideoPlayer public class OnlineVideoPlayer : AbstractVideoPlayer
{ {
public override void CreateHeadImage() protected override void CreateHeadImage()
{ {
base.CreateHeadImage(); base.CreateHeadImage();
if (Diff < 0) if (Diff < 0)
@ -39,7 +39,7 @@ namespace Assets.Scripts.Scenes.VideoRide
this.EndDistance = endDistance * 1000; this.EndDistance = endDistance * 1000;
} }
public override void ComputePlayer() protected override void ComputePlayer()
{ {
distance = this.speed; distance = this.speed;
} }

View File

@ -291,31 +291,17 @@ namespace Assets.Scripts.Scenes.VideoRide
private async Task StartDownloading() private async Task StartDownloading()
{ {
slider.maxValue = downloader.Total * 100; cancelToken = new CancellationTokenSource();
if(downloader.IsVideoDownloaded) await downloader.DownLoadDefault(ReportProgress, cancelToken);
await downloader.DownLoadVideoAsync(Progress.Create<float>(HandleProgress));
if(downloader.IsARRouteDownloaded)
await downloader.DownLoadARRouteAsync(Progress.Create<float>(HandleProgress));
if(downloader.IsARDataDownloaded)
await downloader.DownLoadARDataAsync(Progress.Create<float>(HandleProgress));
//cancelToken = new CancellationTokenSource();
//CompleteDownLoad();
} }
private void HandleProgress(float value) private void ReportProgress(float progress)
{ {
if (cancelToken != null && cancelToken.IsCancellationRequested) if (cancelToken != null && cancelToken.IsCancellationRequested)
return; return;
slider.value = progress * 100;
slider.value += (float)Math.Round(value * 100, 0); downloadText.text = (progress * 100).ToString("f2") + "%";
Debug.Log(value); if (progress == 1f)
var progress = slider.value / slider.maxValue * 100;
downloadText.text = progress.ToString(CultureInfo.InvariantCulture) + "%";
var isComplete = slider.value == slider.maxValue;
if (isComplete)
CompleteDownLoad(); CompleteDownLoad();
} }
@ -323,11 +309,16 @@ namespace Assets.Scripts.Scenes.VideoRide
{ {
var filepath = $"{PFConstants.VideoFolder}/{route.FileName}"; var filepath = $"{PFConstants.VideoFolder}/{route.FileName}";
manager.SetMedia(filepath); manager.SetMedia(filepath);
downloading = false;
cancelToken = null;
watch.SetActive(App.routeResult == null);
watch.GetComponent<Button>().enabled = true; watch.GetComponent<Button>().enabled = true;
rideNow.enabled = true; rideNow.enabled = true;
rideNow.interactable = true; rideNow.interactable = true;
downloadText.text = App.GetLocalString("Ride Now"); downloadText.text = App.GetLocalString("Ride Now");
downloading = false;
} }
//进入观察模式 //进入观察模式
@ -370,18 +361,20 @@ namespace Assets.Scripts.Scenes.VideoRide
private void CancelDownload() private void CancelDownload()
{ {
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>()); UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
var videoUiManager = FindObjectOfType<VideoUIManager>();
UIManager.ShowConfirm("Tips", "CancelDownloadConfirm", UIManager.ShowConfirm("Tips", "CancelDownloadConfirm",
() => () =>
{ {
cancelToken?.Cancel(); cancelToken?.Cancel();
SceneManager.LoadSceneAsync("MainScene"); SceneManager.LoadSceneAsync("MainScene");
UIManager.CloseConfirm(); UIManager.CloseConfirm();
videoUiManager.SetModalPanel();
}, },
2, 2,
() => () =>
{ {
UIManager.CloseConfirm(); UIManager.CloseConfirm();
videoUiManager.SetModalPanel();
}); });
} }

View File

@ -1,5 +1,6 @@
using Assets.Scenes.Ride.Scripts; using Assets.Scenes.Ride.Scripts;
using System; using System;
using System.Globalization;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems; using UnityEngine.EventSystems;
using UnityEngine.UI; using UnityEngine.UI;
@ -61,32 +62,33 @@ namespace Assets.Scripts.Scenes.VideoRide
private void Start() private void Start()
{ {
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
manager = FindObjectOfType<VideoGameManager>(); manager = FindObjectOfType<VideoGameManager>();
Init(); Init();
} }
public void SetModalPanel()
{
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
}
private void Update() private void Update()
{ {
if (manager != null && manager.GetMapRoute() != null) if (manager == null || manager.GetMapRoute() == null) return;
{ mapName.text = manager.GetMapRoute().Name;
mapName.text = manager.GetMapRoute().Name; if (manager.CurrentPlayer == null) return;
if (manager.CurrentPlayer != null) power.text = Math.Round(manager.CurrentPlayer.power).ToString();
{ speed.text = manager.CurrentPlayer.speed.ToString("f1");
power.text = Math.Round(manager.CurrentPlayer.power).ToString(); heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
speed.text = manager.CurrentPlayer.speed.ToString("f1"); cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString(); playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks);
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString(); distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance),2)}KM";
playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks); left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance),2)}KM"; right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE); SetSlopePanel();
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE); ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG);
SetSlopePanel(); wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG); SetHeartRateAlert();
wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
SetHeartRateAlert();
}
}
} }
//心率过高的时候显示 //心率过高的时候显示
@ -106,19 +108,18 @@ namespace Assets.Scripts.Scenes.VideoRide
public void ShowUpRemainTime(double remain) public void ShowUpRemainTime(double remain)
{ {
if (remain > 110) return; if (remain > 110) return;
remain -= 15;
remain -= 20;
var canvas = remainTime.GetComponent<CanvasGroup>(); var canvas = remainTime.GetComponent<CanvasGroup>();
if (remain <= 0) if (remain <= 0)
{ {
if (canvas.alpha == 1) if (canvas.alpha == 1)
canvas.DOFade(0, 1).onComplete = () => { remainTime.SetActive(false); }; canvas.DOFade(0, 1).onComplete = () => remainTime.SetActive(false);
} }
else else
{ {
remainTime.SetActive(true); remainTime.SetActive(true);
remainTime.transform.Find("Bg/Distance").GetComponent<Text>().text = remain.ToString().PadLeft(2,'0'); remainTime.transform.Find("Bg/Distance").GetComponent<Text>().text = remain.ToString(CultureInfo.InvariantCulture).PadLeft(2,'0');
if (canvas.alpha == 0) if (canvas.alpha == 0)
canvas.DOFade(1, 1f); canvas.DOFade(1, 1f);
@ -169,7 +170,7 @@ namespace Assets.Scripts.Scenes.VideoRide
quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject; quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject;
changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject; changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject;
deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject; deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject;
//minmap
playerTimer = transform.Find("Panel/MiniMap/Panel/Timer").GetComponent<Text>(); playerTimer = transform.Find("Panel/MiniMap/Panel/Timer").GetComponent<Text>();
distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent<Text>(); distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent<Text>();
mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent<Text>(); mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent<Text>();
@ -184,7 +185,6 @@ namespace Assets.Scripts.Scenes.VideoRide
settingPanel = transform.Find("Panel/SettingPanel").gameObject; settingPanel = transform.Find("Panel/SettingPanel").gameObject;
resultPanel = transform.Find("Panel/ResultPanel").gameObject; resultPanel = transform.Find("Panel/ResultPanel").gameObject;
gameRoomResultPanel = transform.Find("Panel/GameRoomResult").gameObject; gameRoomResultPanel = transform.Find("Panel/GameRoomResult").gameObject;
//
explosive = transform.Find("Panel/Explosive").gameObject; explosive = transform.Find("Panel/Explosive").gameObject;
//toolbar 事件注册 //toolbar 事件注册
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSetting); UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSetting);
@ -197,7 +197,8 @@ namespace Assets.Scripts.Scenes.VideoRide
private void SetSlopePanel() private void SetSlopePanel()
{ {
var normalizedSlope = (float)Math.Round(manager.CurrentPlayer.currentSlope, 1); var normalizedSlope = (float)Math.Round(manager.CurrentPlayer.currentSlope, 1);
slope.text = normalizedSlope > 0 ? "+"+normalizedSlope.ToString():normalizedSlope.ToString(); slope.text = normalizedSlope > 0 ? "+"+normalizedSlope.ToString(CultureInfo.InvariantCulture):normalizedSlope.ToString(CultureInfo.InvariantCulture);
var strength = 3;//增强旋转角度系数 var strength = 3;//增强旋转角度系数
if (normalizedSlope > 10) { if (normalizedSlope > 10) {
normalizedSlope = 10f; normalizedSlope = 10f;
@ -233,6 +234,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{ {
UIManager.ShowRideSettingPanel(); UIManager.ShowRideSettingPanel();
} }
private void DeviceClick(BaseEventData e) private void DeviceClick(BaseEventData e)
{ {
UIManager.Show(UIManager.Instance.DevicePanel, null, true); UIManager.Show(UIManager.Instance.DevicePanel, null, true);
@ -272,12 +274,19 @@ namespace Assets.Scripts.Scenes.VideoRide
videoResultScript.InjectController(manager); videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData); videoResultScript.SetDataSource(manager.cyclingController.recorderData);
} }
public void SaveAndShowResult() public void SaveAndShowResult()
{ {
if (manager._aRMode == VideoGameManager.ARMode.INSPECT) if (manager._aRMode == ARMode.INSPECT)
{
SceneManager.LoadScene("MainScene"); SceneManager.LoadScene("MainScene");
videoPlayer = FindObjectOfType<VideoPlayer>(); return;
videoPlayer?.Upload(); }
videoPlayer = manager.CurrentPlayer as VideoPlayer;
if(videoPlayer == null) return;
videoPlayer.Upload();
//show result //show result
if (manager.cyclingController is GameModel) if (manager.cyclingController is GameModel)
{ {
@ -293,6 +302,7 @@ namespace Assets.Scripts.Scenes.VideoRide
videoResultScript.SetDataSource(manager.cyclingController.recorderData); videoResultScript.SetDataSource(manager.cyclingController.recorderData);
} }
} }
private void QuitClick(BaseEventData e) private void QuitClick(BaseEventData e)
{ {
var idMainRider = manager.CurrentPlayer != null && manager.CurrentPlayer.UserId == App.CurrentUser.Id; var idMainRider = manager.CurrentPlayer != null && manager.CurrentPlayer.UserId == App.CurrentUser.Id;

View File

@ -160,7 +160,7 @@ namespace Assets.Scripts.Scenes.VideoRide
cyclingController.Run(null);//发送数据到tcp cyclingController.Run(null);//发送数据到tcp
var onlineRiders = cyclingController.riders; var onlineRiders = cyclingController.riders;
CreateOnlineUser(onlineRiders); //解析tcp返回数据 CreateOnlineUser(onlineRiders); //解析tcp返回数据
tcpTimer += 0.2f; tcpTimer += 0.5f;
} }
//计算骑手的数据 //计算骑手的数据
@ -469,22 +469,36 @@ namespace Assets.Scripts.Scenes.VideoRide
Quit(); Quit();
cyclingController.recorderData.EndTime = UIManager.Now.GetDateTime();
var path = PFConstants.MapWorkoutRecordFolder + "/" + recordId; var path = PFConstants.MapWorkoutRecordFolder + "/" + recordId;
try
{
cyclingController.recorderData.EndTime = UIManager.Now.GetDateTime();
cyclingController.recorderData.StartTime = startTime;
cyclingController.recorderData.IsCompleted = totalDistance >= mapData.TotalDistance;
cyclingController.recorderData.EndDistance = cyclingController.recorderData.IsCompleted ? mapData.TotalDistance: totalDistance;
cyclingController.recorderData.AntModelId = AntModelId;
cyclingController.recorderData.ManufacturerId = ManufacturerId;
cyclingController.recorderData.ManufacturerName = ManufacturerName;
cyclingController.recorderData.DeviceNumber = DeviceNumber;
cyclingController.recorderData.LastFrame = GetCurrentFrame();
var imagePath = CreateRecordCover(path);
RankingId = cyclingController.recorderData.SaveWithLocalRecordAysnc(cyclingModel, selectParamModel,
imagePath, recordId, path);
}
catch (Exception e)
{
Helper.DelectDir(path);
Debug.Log(e.Message);
}
}
private string CreateRecordCover(string path)
{
Helper.CreateDirectoryIfNotExsit(path); Helper.CreateDirectoryIfNotExsit(path);
var imageFileName = path + "/" + Guid.NewGuid().ToString() + ".png"; var imagePath = path + "/" + Guid.NewGuid().ToString() + ".png";
Helper.CaptureCamera(Camera.main, new Rect(Screen.width * 0f, Screen.height * 0f, Screen.width * 0.5f, Screen.height * 0.5f), imageFileName); Helper.CaptureCamera(Camera.main, new Rect(Screen.width * 0f, Screen.height * 0f, Screen.width * 0.5f, Screen.height * 0.5f), imagePath);
return imagePath;
cyclingController.recorderData.StartTime = startTime;
cyclingController.recorderData.IsCompleted = totalDistance >= mapData.TotalDistance;
cyclingController.recorderData.EndDistance = cyclingController.recorderData.IsCompleted ? mapData.TotalDistance : totalDistance;
cyclingController.recorderData.AntModelId = AntModelId;
cyclingController.recorderData.ManufacturerId = ManufacturerId;
cyclingController.recorderData.ManufacturerName = ManufacturerName;
cyclingController.recorderData.DeviceNumber = DeviceNumber;
cyclingController.recorderData.LastFrame = GetCurrentFrame();
RankingId = cyclingController.recorderData.SaveWithLocalRecordAysnc(cyclingModel, selectParamModel, imageFileName, recordId, path);
} }
public void AddEvent(GameObject sender, EventTriggerType eventType, UnityAction<BaseEventData> unityAction) public void AddEvent(GameObject sender, EventTriggerType eventType, UnityAction<BaseEventData> unityAction)

View File

@ -41,7 +41,7 @@ namespace Assets.Scripts.Scenes.VideoRide
_uimanager?.SaveAndShowResult(); _uimanager?.SaveAndShowResult();
} }
public override void ComputePlayer() protected override void ComputePlayer()
{ {
heartRate = manager.UpDateHeart(); heartRate = manager.UpDateHeart();
power = manager.UpdatePower(); power = manager.UpdatePower();
@ -77,8 +77,13 @@ namespace Assets.Scripts.Scenes.VideoRide
UIManager.ShowGameRoomCountDownPanel((int)seconds, () => UIManager.ShowGameRoomCountDownPanel((int)seconds, () =>
{ {
Upload(); Upload();
var uiManager = FindObjectOfType<VideoUIManager>();
uiManager.ShowResultPanel(); if (_uimanager == null)
{
_uimanager = FindObjectOfType<VideoUIManager>();
}
_uimanager.ShowResultPanel();
},true); },true);
} }
} }
@ -120,7 +125,7 @@ namespace Assets.Scripts.Scenes.VideoRide
private double RemainingDistance => Math.Round((mapData.TotalDistance - totalDistance) * 1000); private double RemainingDistance => Math.Round((mapData.TotalDistance - totalDistance) * 1000);
public override void Forward() protected override void Forward()
{ {
base.Forward(); base.Forward();
distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero); distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);

View File

@ -18,7 +18,7 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
private MapCompetitionApi mapCompetitionApi; private MapCompetitionApi mapCompetitionApi;
public MapCompetition mapCompetition; public MapCompetition mapCompetition { get; set; }
private List<CompetitionRankingResultModel> mapWorkoutRecordRankings = new List<CompetitionRankingResultModel>(); private List<CompetitionRankingResultModel> mapWorkoutRecordRankings = new List<CompetitionRankingResultModel>();
/// <summary> /// <summary>

View File

@ -29,39 +29,6 @@ class GameRoomDownLoad : MonoBehaviour
public string RouteName { get; set; } public string RouteName { get; set; }
private string FileUrl { get; set; } private string FileUrl { get; set; }
private float _videoProgress;
public float VideoProgress
{
get => _videoProgress;
set
{
_videoProgress = value;
ComputeProgress();
}
}
private float _dataProgress = 0f;
public float DataProgress
{
get => _dataProgress;
set
{
_dataProgress = value;
ComputeProgress();
}
}
private float _routeProgress = 0f;
public float RouteProgress
{
get => _routeProgress;
set
{
_routeProgress = value;
ComputeProgress();
}
}
private void Start() private void Start()
{ {
UIManager.AddEvent(downloadBtn, EventTriggerType.PointerClick, Download_Click); UIManager.AddEvent(downloadBtn, EventTriggerType.PointerClick, Download_Click);
@ -125,33 +92,23 @@ class GameRoomDownLoad : MonoBehaviour
step2.SetActive(true); step2.SetActive(true);
step2.transform.Find("RouteName").GetComponent<Text>().text = RouteName; step2.transform.Find("RouteName").GetComponent<Text>().text = RouteName;
downloadSlider.maxValue = _downloader.Total * 100; await _downloader.DownLoadDefault(ReportProgress);
if(_downloader.IsVideoDownloaded)
await _downloader.DownLoadVideoAsync(Progress.Create<float>(x => VideoProgress = x));
if(_downloader.IsARRouteDownloaded)
await _downloader.DownLoadARRouteAsync(Progress.Create<float>(x=> RouteProgress = x));
if(_downloader.IsARDataDownloaded)
await _downloader.DownLoadARDataAsync(Progress.Create<float>(x=> DataProgress = x));
} }
private void ComputeProgress() private void ReportProgress(float progress)
{ {
//update progress downloadSlider.value = progress;
var progress = (_videoProgress + _routeProgress + _dataProgress) / _downloader.Total;
downloadSlider.value = progress * 100;
//update download info
if (!Loom.DownloadStack.ContainsKey(FileName) ) if (!Loom.DownloadStack.ContainsKey(FileName) )
{ {
Loom.DownloadStack.Add(FileName, new DownloadInfo(FileName, RouteName,progress)); Loom.DownloadStack.Add(FileName, new DownloadInfo(FileName, RouteName,progress));
} }
Loom.DownloadStack[FileName].Process = progress; Loom.DownloadStack[FileName].Process = progress;
if (progress >= 1) LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)this.downloadSlider.transform);
if (progress == 1f)
{ {
Loom.DownloadStack.Remove(FileName); Loom.DownloadStack.Remove(FileName);
downloadSlider.value = 100;
step3.SetActive(true); step3.SetActive(true);
step3.transform.Find("RouteName").GetComponent<Text>().text = RouteName; step3.transform.Find("RouteName").GetComponent<Text>().text = RouteName;
} }

View File

@ -2,11 +2,9 @@
using Assets.Scripts; using Assets.Scripts;
using Assets.Scripts.Apis; using Assets.Scripts.Apis;
using Assets.Scripts.Apis.Models; using Assets.Scripts.Apis.Models;
using Cysharp.Threading.Tasks;
using DG.Tweening; using DG.Tweening;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.Threading;
using System.Threading.Tasks;
using Assets.AR; using Assets.AR;
using Assets.Core; using Assets.Core;
using UnityEngine; using UnityEngine;
@ -43,40 +41,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
private ARDownloader downloader { get; set; } private ARDownloader downloader { get; set; }
private CancellationTokenSource _cancellation;
private float _videoProgress;
public float VideoProgress
{
get => _videoProgress;
set
{
_videoProgress = value;
ComputeProgress();
}
}
private float _dataProgress = 0f;
public float DataProgress
{
get => _dataProgress;
set
{
_dataProgress = value;
ComputeProgress();
}
}
private float _routeProgress = 0f;
public float RouteProgress
{
get => _routeProgress;
set
{
_routeProgress = value;
ComputeProgress();
}
}
private void Awake() private void Awake()
{ {
@ -87,6 +52,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
private void Start() private void Start()
{ {
listController = FindObjectOfType<GameRoomListController>(); listController = FindObjectOfType<GameRoomListController>();
ShowDownloadModal();
} }
public void Initial(MapRoute myMap, Dictionary<string, Texture> caches, MapRouteAreaItem area = null) public void Initial(MapRoute myMap, Dictionary<string, Texture> caches, MapRouteAreaItem area = null)
@ -107,8 +73,6 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
downloadTxt = transform.Find("DownLoadModal/Text").gameObject; downloadTxt = transform.Find("DownLoadModal/Text").gameObject;
slider = transform.Find("DownLoadModal/Slider").GetComponent<Slider>(); slider = transform.Find("DownLoadModal/Slider").GetComponent<Slider>();
ShowDownloadModal();
UIManager.AddEvent(downloadBtn, EventTriggerType.PointerClick,Download_Click); UIManager.AddEvent(downloadBtn, EventTriggerType.PointerClick,Download_Click);
transform.Find("Name").GetComponent<Text>().text = myMap.Name; transform.Find("Name").GetComponent<Text>().text = myMap.Name;
@ -148,28 +112,24 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
downloading.SetActive(true); downloading.SetActive(true);
downloadTxt.SetActive(false); downloadTxt.SetActive(false);
slider.gameObject.SetActive(true); slider.gameObject.SetActive(true);
_cancellation = new CancellationTokenSource();
slider.maxValue = downloader.Total * 100; await downloader.DownLoadDefault(ReportProgress,_cancellation);
if(downloader.IsVideoDownloaded)
await downloader.DownLoadVideoAsync(Progress.Create<float>(x => VideoProgress = x));
if(downloader.IsARRouteDownloaded)
await downloader.DownLoadARRouteAsync(Progress.Create<float>(x=> RouteProgress = x));
if(downloader.IsARDataDownloaded)
await downloader.DownLoadARDataAsync(Progress.Create<float>(x=> DataProgress = x));
} }
private void ComputeProgress() private void ReportProgress(float progress)
{ {
//update progress Debug.Log($"{progress},{downloader.IsDone}");
var progress = (_videoProgress + _routeProgress + _dataProgress) / downloader.Total; slider.value = progress;
slider.value = progress * 100;
//update download info
if(!Loom.DownloadStack.ContainsKey(map.FileName)) if(!Loom.DownloadStack.ContainsKey(map.FileName))
Loom.DownloadStack.Add(map.FileName, new DownloadInfo(map.FileName,map.Name,0, map.Url)); Loom.DownloadStack.Add(map.FileName, new DownloadInfo(map.FileName,map.Name,0, map.Url));
Loom.DownloadStack[map.FileName].Process = progress; Loom.DownloadStack[map.FileName].Process = progress;
//refresh slider
LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)this.slider.transform); LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)this.slider.transform);
transform.Find("DownLoadModal").gameObject.SetActive(progress != 1); transform.Find("DownLoadModal").gameObject.SetActive(progress < 1f);
if(progress == 1)
_cancellation = null;
} }
//显示下载面板 //显示下载面板
@ -183,10 +143,9 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
private void Ride() private void Ride()
{ {
var fileName = map.FileName; var canARRide = map.EnableAR && downloader != null && downloader.IsDone;
var path = PFConstants.VideoFolder; var canRide = !map.EnableAR;
var filepath = path + "/" + fileName; if (canARRide || canRide)
if ((map.EnableAR && File.Exists(filepath) )|| !map.EnableAR)
{ {
var list = FindObjectsOfType<GameRoomMapItem>(); var list = FindObjectsOfType<GameRoomMapItem>();
foreach (var item in list) foreach (var item in list)
@ -238,6 +197,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
transform.Find("Shadow").GetComponent<Image>().DOFade(0, 0.3f); transform.Find("Shadow").GetComponent<Image>().DOFade(0, 0.3f);
#endif #endif
} }
public void OnPointerEnter(PointerEventData eventData) public void OnPointerEnter(PointerEventData eventData)
{ {
if (isModal) if (isModal)
@ -258,6 +218,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
transform.Find("Shadow").GetComponent<Image>().DOFade(1, 0.3f); transform.Find("Shadow").GetComponent<Image>().DOFade(1, 0.3f);
#endif #endif
} }
private void SetActive4Button(bool b) private void SetActive4Button(bool b)
{ {
transform.Find("MapHBImg").gameObject.SetActive(!b); transform.Find("MapHBImg").gameObject.SetActive(!b);
@ -280,6 +241,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
transform.Find("MapHBImg").GetComponent<RawImage>().color = Utils.HexToColorHtml( transform.Find("MapHBImg").GetComponent<RawImage>().color = Utils.HexToColorHtml(
PropNames.colorDict[isFav]); PropNames.colorDict[isFav]);
} }
private async void Collect() private async void Collect()
{ {
JsonResult<object> r; JsonResult<object> r;
@ -362,4 +324,11 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
{ {
Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto); Cursor.SetCursor(null, Vector2.zero, CursorMode.Auto);
} }
private void OnDestroy()
{
// _cancellation?.Cancel();
// Loom.DownloadStack.Remove(map?.FileName);
}
} }

View File

@ -70,6 +70,8 @@ public class GameRoomListController : PFUIPanel
private Transform resultRoomModal; private Transform resultRoomModal;
private GameObject RoomRankItem; private GameObject RoomRankItem;
InputField hourInputField, minInputField;
private string RoomName; private string RoomName;
private string Roompwd; private string Roompwd;
private int hours; private int hours;
@ -103,6 +105,12 @@ public class GameRoomListController : PFUIPanel
private bool ListChanged = false; private bool ListChanged = false;
private bool CreateRoomSuccessed = false; private bool CreateRoomSuccessed = false;
PFUIPageHelper pageHelper; PFUIPageHelper pageHelper;
private ARDownloader downloader;
private GameRoomModel modelGameRoom { get; set; }
private Text CyclingTimer { get; set; }
List<GameRoomModel> list;
private int Total { get; set; }
private bool CreateClicked { get; set; }
protected override void Awake() protected override void Awake()
{ {
@ -126,73 +134,7 @@ public class GameRoomListController : PFUIPanel
UIManager.AddEvent(_avatar, UnityEngine.EventSystems.EventTriggerType.PointerClick, AvatarBtn_Click); UIManager.AddEvent(_avatar, UnityEngine.EventSystems.EventTriggerType.PointerClick, AvatarBtn_Click);
} }
private void SearchBtn_Click(BaseEventData data)
{
pageHelper.PageIndex = 0;
Query();
}
private void AvatarBtn_Click(BaseEventData data)
{
UIManager.ShowUserInfoPanel();
}
private void Query()
{
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
private void Refreash()
{
Utils.DestroyChildren(_rectTransform);
pageHelper.Total = Total;
pageHelper.Build();
if (list == null)
{
_noDataFound.SetActive(true);
return;
}
_noDataFound.SetActive(false);
int index = 0;
foreach (var item in list)
{
index++;
var g = Instantiate(RoomCell, _rectTransform);
g.GetComponent<GameRoomCell>().ConfigureCell(item, index);
}
}
List<GameRoomModel> list;
private int Total { get; set; }
private bool CreateClicked { get; set; }
private void ListenerHandler(List<ReceiveMsgModel> message)
{
try
{
if (message.Count > 1)
return;
//查询列表
var roomList = message.Where(c => c.RoomList != null).FirstOrDefault();
if (roomList != null)
{
list = roomList.RoomList;
Total = roomList.GameRoomTotal;
ListChanged = true;
}
//查询自己当前创建的房间信息并进入
var info = message.Where(c => c.RoomList != null && c.RoomList.Where(o => o.UserId == App.CurrentUser.Id && o.Status == 0).Any()).FirstOrDefault();
if (info != null)
{
GameRoom = info.RoomList[0];
App.gameRoomDetail = GameRoom;
CreateRoomSuccessed = true;
//进入房间清空列表
list = null;
Total = 0;
ListChanged = true;
}
}
catch (Exception e)
{
Debug.LogError(e);
}
}
protected override void Start() protected override void Start()
{ {
base.Start(); base.Start();
@ -208,14 +150,6 @@ public class GameRoomListController : PFUIPanel
} }
public override void Show()
{
base.Show();
App.Model = "GameRoom";
MapUDPService.MessageListener = ListenerHandler;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
private void Update() private void Update()
{ {
//房间已经进行骑行时间 //房间已经进行骑行时间
@ -266,7 +200,83 @@ public class GameRoomListController : PFUIPanel
RenderDownloadTask(); RenderDownloadTask();
} }
//LOOM中取数据渲染下载当前下载进度 public override void Show()
{
base.Show();
App.Model = "GameRoom";
MapUDPService.MessageListener = ListenerHandler;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
private void SearchBtn_Click(BaseEventData data)
{
pageHelper.PageIndex = 0;
Query();
}
private void AvatarBtn_Click(BaseEventData data)
{
UIManager.ShowUserInfoPanel();
}
private void Query()
{
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
}
private void Refreash()
{
Utils.DestroyChildren(_rectTransform);
pageHelper.Total = Total;
pageHelper.Build();
if (list == null)
{
_noDataFound.SetActive(true);
return;
}
_noDataFound.SetActive(false);
int index = 0;
foreach (var item in list)
{
index++;
var g = Instantiate(RoomCell, _rectTransform);
g.GetComponent<GameRoomCell>().ConfigureCell(item, index);
}
}
private void ListenerHandler(List<ReceiveMsgModel> message)
{
try
{
if (message.Count > 1)
return;
//查询列表
var roomList = message.Where(c => c.RoomList != null).FirstOrDefault();
if (roomList != null)
{
list = roomList.RoomList;
Total = roomList.GameRoomTotal;
ListChanged = true;
}
//查询自己当前创建的房间信息并进入
var info = message.Where(c => c.RoomList != null && c.RoomList.Where(o => o.UserId == App.CurrentUser.Id && o.Status == 0).Any()).FirstOrDefault();
if (info != null)
{
GameRoom = info.RoomList[0];
App.gameRoomDetail = GameRoom;
CreateRoomSuccessed = true;
//进入房间清空列表
list = null;
Total = 0;
ListChanged = true;
}
}
catch (Exception e)
{
Debug.LogError(e);
}
}
private void RenderDownloadTask() private void RenderDownloadTask()
{ {
var downLoadList = transform.Find("DownLoadList").gameObject; var downLoadList = transform.Find("DownLoadList").gameObject;
@ -510,7 +520,7 @@ public class GameRoomListController : PFUIPanel
Query(); Query();
}); });
} }
InputField hourInputField, minInputField;
private void InitStep2() private void InitStep2()
{ {
//关门时间 //关门时间
@ -647,6 +657,7 @@ public class GameRoomListController : PFUIPanel
} }
return result; return result;
} }
private void HandleStepBtn(string btnName) private void HandleStepBtn(string btnName)
{ {
next.SetActive(btnName == previous.name); next.SetActive(btnName == previous.name);
@ -661,6 +672,7 @@ public class GameRoomListController : PFUIPanel
step1Btn.transform.Find("Bg").gameObject.SetActive(btnName == previous.name); step1Btn.transform.Find("Bg").gameObject.SetActive(btnName == previous.name);
step2Btn.transform.Find("Bg").gameObject.SetActive(btnName != previous.name); step2Btn.transform.Find("Bg").gameObject.SetActive(btnName != previous.name);
} }
private void HandleFormInput() private void HandleFormInput()
{ {
if (Members >= 2 && !string.IsNullOrEmpty(RoomName) && CloseTime > 0 && CloseTime < 120) if (Members >= 2 && !string.IsNullOrEmpty(RoomName) && CloseTime > 0 && CloseTime < 120)
@ -680,6 +692,7 @@ public class GameRoomListController : PFUIPanel
create.GetComponent<Button>().enabled = false; create.GetComponent<Button>().enabled = false;
} }
} }
private void HandleCloseTimeBtnClick(int closeTime, string btnName) private void HandleCloseTimeBtnClick(int closeTime, string btnName)
{ {
if (btnName != "MinInputField" && btnName != "HourInputField") if (btnName != "MinInputField" && btnName != "HourInputField")
@ -699,6 +712,7 @@ public class GameRoomListController : PFUIPanel
btn60.GetComponent<Image>().color = btn60.name == btnName ? pink : grey; btn60.GetComponent<Image>().color = btn60.name == btnName ? pink : grey;
HandleFormInput(); HandleFormInput();
} }
private void HandleMembersBtnClick(int members, string btnName) private void HandleMembersBtnClick(int members, string btnName)
{ {
ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey); ColorUtility.TryParseHtmlString("#3D3E4D", out Color grey);
@ -711,6 +725,7 @@ public class GameRoomListController : PFUIPanel
btn6.GetComponent<Image>().color = btn6.name == btnName ? pink : grey; btn6.GetComponent<Image>().color = btn6.name == btnName ? pink : grey;
HandleFormInput(); HandleFormInput();
} }
private void ChangeDistance(int index) private void ChangeDistance(int index)
{ {
var text = distanceOptions.GetComponent<Dropdown>().options[index].text; var text = distanceOptions.GetComponent<Dropdown>().options[index].text;
@ -718,6 +733,7 @@ public class GameRoomListController : PFUIPanel
scroll.GetComponent<ScrollRect>().verticalNormalizedPosition = 1; scroll.GetComponent<ScrollRect>().verticalNormalizedPosition = 1;
Refresh(); Refresh();
} }
private void OnEndDrag(BaseEventData arg0) private void OnEndDrag(BaseEventData arg0)
{ {
var scrollrect = scroll.GetComponent<ScrollRect>(); var scrollrect = scroll.GetComponent<ScrollRect>();
@ -731,6 +747,7 @@ public class GameRoomListController : PFUIPanel
Refresh(); Refresh();
} }
} }
public void ShowPwdConfirm() public void ShowPwdConfirm()
{ {
enterRoomModal.gameObject.SetActive(true); enterRoomModal.gameObject.SetActive(true);
@ -758,17 +775,13 @@ public class GameRoomListController : PFUIPanel
} }
} }
private ARDownloader downloader;
private GameRoomModel modelGameRoom { get; set; }
//private GameRoomModel modelGameRoom { get; set; }
private Text CyclingTimer { get; set; }
public void ShowCycingPanel(GameRoomModel gameRoomModel) public void ShowCycingPanel(GameRoomModel gameRoomModel)
{ {
ShowStatusModal(cycingRoomModal, gameRoomModel); ShowStatusModal(cycingRoomModal, gameRoomModel);
modelGameRoom = gameRoomModel; //倒计时 modelGameRoom = gameRoomModel; //倒计时
CyclingTimer = cycingRoomModal.Find("Modal/Timer").GetComponent<Text>(); CyclingTimer = cycingRoomModal.Find("Modal/Timer").GetComponent<Text>();
} }
public void ShowDonePanel(int roomId) public void ShowDonePanel(int roomId)
{ {
var result = ConfigHelper.GameRoomApi.GetDetail(roomId); var result = ConfigHelper.GameRoomApi.GetDetail(roomId);
@ -794,6 +807,7 @@ public class GameRoomListController : PFUIPanel
} }
} }
} }
private void ShowStatusModal(Transform tr,GameRoomModel data) private void ShowStatusModal(Transform tr,GameRoomModel data)
{ {
tr.Find("Modal/Id").GetComponent<Text>().text = data.RoomId.ToString().PadLeft(7, '0'); tr.Find("Modal/Id").GetComponent<Text>().text = data.RoomId.ToString().PadLeft(7, '0');
@ -823,6 +837,7 @@ public class GameRoomListController : PFUIPanel
UIManager.AddEvent(quit, EventTriggerType.PointerClick, (e) => { tr.gameObject.SetActive(false); }); UIManager.AddEvent(quit, EventTriggerType.PointerClick, (e) => { tr.gameObject.SetActive(false); });
tr.gameObject.SetActive(true); tr.gameObject.SetActive(true);
} }
public void GetInRoom() public void GetInRoom()
{ {
//1.房间人数已经满了 //1.房间人数已经满了
@ -844,19 +859,23 @@ public class GameRoomListController : PFUIPanel
MapUDPService.SendJoinGameRoom(App.gameRoomDetail.RoomId,App.CurrentUser.Id,UIManager.Now.GetDateTime().ToUniversalTime()); MapUDPService.SendJoinGameRoom(App.gameRoomDetail.RoomId,App.CurrentUser.Id,UIManager.Now.GetDateTime().ToUniversalTime());
UIManager.ShowGameRoomDetailPanel(); UIManager.ShowGameRoomDetailPanel();
} }
public void SelectRoom(GameRoomModel room) public void SelectRoom(GameRoomModel room)
{ {
GameRoom = room; GameRoom = room;
RoomId = GameRoom.RoomId; RoomId = GameRoom.RoomId;
} }
public int GetRoomId() public int GetRoomId()
{ {
return RoomId; return RoomId;
} }
public GameRoomModel GetCurrentRoom() public GameRoomModel GetCurrentRoom()
{ {
return GameRoom; return GameRoom;
} }
public void Select(MapRoute map) public void Select(MapRoute map)
{ {
Map = map; Map = map;
@ -887,6 +906,7 @@ public class GameRoomListController : PFUIPanel
tabContainer.Find("Country").GetComponent<RawImage>().texture = UIManager.Instance.loginRegOptions.GetCountryImage(map.CountryCode); tabContainer.Find("Country").GetComponent<RawImage>().texture = UIManager.Instance.loginRegOptions.GetCountryImage(map.CountryCode);
} }
public void Refresh() public void Refresh()
{ {
content.transform.DestroyChildren(); content.transform.DestroyChildren();
@ -894,54 +914,53 @@ public class GameRoomListController : PFUIPanel
isEnd = false; isEnd = false;
GetList(); GetList();
} }
private void onEndEdit() private void onEndEdit()
{ {
var t = searchInput.GetComponent<InputField>().text; var t = searchInput.GetComponent<InputField>().text;
ftname = t; ftname = t;
Refresh(); Refresh();
} }
private void DisplayMaps(List<MapRoute> list) private void DisplayMaps(List<MapRoute> list)
{ {
if (map != null) if (map == null) return;
foreach (var item in list)
{ {
foreach (var item in list) var obj = Instantiate(map, content.transform, true);
{ obj.GetComponent<GameRoomMapItem>().Initial(item, caches);
var obj = Instantiate(map); obj.transform.localScale = new Vector3(1, 1, 1);
obj.GetComponent<GameRoomMapItem>().Initial(item, caches);
//obj.SendMessage("Initial", );
obj.transform.SetParent(content.transform);
obj.transform.localScale = new Vector3(1, 1, 1);
}
} }
} }
private async void GetList() private async void GetList()
{ {
if (isEnd) return; if (isEnd) return;
var res = await ConfigHelper.mapApi.GetList(pageIndex, pageSize, ftname, distance, string.Join(",", hands), is3d, sort, sortDire, isEnableAR: isEnableAR, isEnableBattle: true); var res = await ConfigHelper.mapApi.GetList(pageIndex, pageSize, ftname, distance, string.Join(",", hands),
if (res.result) is3d, sort, sortDire, isEnableAR: isEnableAR, isEnableBattle: true);
if (!res.result) return;
if (res.data.Count == 0)
{ {
if (res.data.Count == 0) if (pageIndex != 0)
{ {
if (pageIndex != 0) isEnd = true;
{ scroll.transform.Find("Error").gameObject.SetActive(false);
isEnd = true;
scroll.transform.Find("Error").gameObject.SetActive(false);
}
else
{
Debug.Log("当前没查到内容");
scroll.transform.Find("Error").gameObject.SetActive(true);
}
} }
else else
{ {
isEnd = false; Debug.Log("当前没查到内容");
DisplayMaps(res.data); scroll.transform.Find("Error").gameObject.SetActive(true);
scroll.transform.Find("Error").gameObject.SetActive(false);
} }
} }
else
{
isEnd = false;
DisplayMaps(res.data);
scroll.transform.Find("Error").gameObject.SetActive(false);
}
} }
//创建房间 //创建房间
private void CreateGameRoom(BaseEventData data) private void CreateGameRoom(BaseEventData data)
{ {
@ -957,6 +976,7 @@ public class GameRoomListController : PFUIPanel
MapList.SetActive(true); MapList.SetActive(true);
} }
protected override void OnDisable() protected override void OnDisable()
{ {
base.OnDisable(); base.OnDisable();

View File

@ -1297,6 +1297,7 @@ public class UIManager : MonoBehaviour
if (UIManager.Instance.confirm != null) if (UIManager.Instance.confirm != null)
{ {
UIManager.Instance.confirm.Close(); UIManager.Instance.confirm.Close();
UIManager.Instance.confirm = null;
} }
} }
public static void ShowConfirm3(string title, string content, UnityAction action1, UnityAction action2,UnityAction action3) public static void ShowConfirm3(string title, string content, UnityAction action1, UnityAction action2,UnityAction action3)