AR骑行beta

This commit is contained in:
lishuo committed 2022-08-05 15:10:09 +08:00
1 parent 4d5bc8f080
commit 9b1bb3d9ba
45 files changed
+35055 -2401

No files matched your search

+2 -2
View File
@@ -25,9 +25,9 @@ namespace Assets.Scripts.Apis
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public MapDataModel GetData(int id)
public MapDataModel GetData(int id,int m=20)
{
return Newtonsoft.Json.JsonConvert.DeserializeObject<MapDataModel>(Get("Map/GetData?routeId="+id));
return Newtonsoft.Json.JsonConvert.DeserializeObject<MapDataModel>(Get($"Map/GetData?routeId={id}&m={m}"));
}
/// <summary>
+14 -6
View File
@@ -147,12 +147,15 @@ namespace Assets.Scripts.Apis.Models
foreach (var item in list)
{
var user = userList.Where(c => c.Id == item.UserId).FirstOrDefault();
item.WxHeadImage = user?.HeadImage;
item.FTP = user.FTP;
item.Weight = user.Weight;
item.Name = user.Name;
item.Sex = user.Sex;
item.Country = user.Country;
if (user != null)
{
item.WxHeadImage = user.HeadImage;
item.FTP = user.FTP;
item.Weight = user.Weight;
item.Name = user.Name;
item.Sex = user.Sex;
item.Country = user.Country;
}
}
}
return list;
@@ -167,6 +170,11 @@ namespace Assets.Scripts.Apis.Models
public int Rank { get; set; }
public string Country { get; set; }
public string TotalTime { get; set; }
public string Power { get; set; }
public string WeightKG{ get; set; }
public string Gap { get; set; }
public string Source { get; set; }
public bool IsDNF { get; set; }
public double? HeartRate { get; set; }
}
}
+1
View File
@@ -124,5 +124,6 @@ namespace Assets.Scripts.Apis.Models
public string Url { get; set; }
public string FileName { get; set; }
public int FileSize { get; set; }
public string ARConfig { get; set; }
}
}
+2 -2
View File
@@ -181,9 +181,7 @@ public class MainController : BaseScene
var m = msgs[selectIndex];
if (msgIndex >= 5) //
{
//msgIndex = 0;
Sequence se = DOTween.Sequence();
//m.transform.DOLocalMoveY(m.transform.localPosition.y - 38, 0.5f);
foreach (var item in msgs)
{
se.Join(item.transform.DOLocalMoveY(item.transform.localPosition.y - moveOffset, 0.5f));
@@ -544,6 +542,8 @@ public class MainController : BaseScene
var userName = arr[1];
var roomName = arr[2];
var roomId = Convert.ToInt32(arr[3]);
if (userName.Equals(App.CurrentUser.Nickname))
return;
var content = $"{userName} {App.GetLocalString("invite you to join in")} {roomName} , {App.GetLocalString("are you accept the invitation?")}";
UIManager.ShowConfirm(App.GetLocalString("Invitition"), content, () => {
UIManager.CloseConfirm();
@@ -167,16 +167,21 @@ namespace Assets.Scenes.Ride.Scripts
public void setUserId(int userId,string WxHeadImg)
{
_userId = userId;
var isself = userId == cyclingController.currentPlayer.UserId && !cyclingController.isWatch;
bool isself;
if (cyclingController != null)
{
isself = userId == cyclingController.currentPlayer.UserId && !cyclingController.isWatch;
}
else
{
isself = userId == App.CurrentUser.Id;
}
//头像根据是否是自己显示
if (isself)
{
Utils.DisplayImage(Head, WxHeadImg, true);
}
Head.gameObject.SetActive(isself);
//边框样式
var color = isself ? WHITE : TRANSPARENT;
//outline.effectColor = color;
}
}
}
@@ -1,10 +1,9 @@
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
using Assets.Scripts;
using Assets.Scripts.Apis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
{
@@ -14,7 +13,9 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
/// 第一个到终点的时间
/// </summary>
public DateTime? FirstEndTime { get; private set; }
public int? FirstUserId { get; private set; }
public GameRoomModel GameRoom { get; private set; }
public List<RoomRankItem> mapWorkoutRecordRankings = new List<RoomRankItem>();
public GameModel(Route route,RouteResultParam param)
: base(route, CyclingModel.Single)
@@ -87,15 +88,69 @@ namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
protected override void BeforeRunAfterPakcData()
{
base.BeforeRunAfterPakcData();
var userList = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id,recorderData.RoomId).Where(c=>c.IsSelf == false).OrderByDescending(u => u.Saved).ThenBy(d => d.CreateTime).ThenByDescending(d => d.EndDistance);
int index = 0;
List<CompetitionRankingSortModel> sort = new List<CompetitionRankingSortModel>();
var userList = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id,recorderData.RoomId).OrderByDescending(u => u.Saved).ThenBy(d => d.CreateTime).ThenByDescending(d => d.EndDistance);
if (userList.Any())
{
//计算关门时间
foreach (var item in userList)
{
if(!FirstEndTime.HasValue && item.IsCompleted)
if (!FirstEndTime.HasValue && item.IsCompleted)
{
FirstEndTime = Now.AddMinutes(GameRoom.CloseTime);
FirstUserId = item.Id;
}
index++;
double near = Math.Round(item.EndDistance - currentDistance, 2); //Math.Round(TurfHelper.GetDistances(point, item.Point), 2);
if (item.IsCompleted)
{
sort.Add(new CompetitionRankingSortModel
{
Index = index,
Name = item.Name,
Near = near,
KGWeight = Math.Round(item.WeightKg, 2).ToString(),
Speed = Math.Round(item.Speed, 1),
CountryImg = item.Country,//ConfigHelper.Host + $"User/GetCountryImg?userid={ item.Id }",
UserId = item.Id,
IsSelf = item.IsSelf,
Headimage = item.HeadImage,
CreateTime = DateTime.MaxValue,
EndDistance = item.EndDistance,
IsCompleted = item.IsCompleted,
});
}
}
#region 骑行结束,比赛结果展示数据
var results = new List<CompetitionResultModel>();
if (recorderData.IsCompleted || recorderData.Saved)
{
var users1 = userList.Where(d => d.IsCompleted || d.Saved);
if ((users1.Any() && users1.Any(d => mapWorkoutRecordRankings.All(u => u.UserId != d.Id)))
|| mapWorkoutRecordRankings.All(u => u.UserId != recorderData.BelongUserId))
{
var result = ConfigHelper.GameRoomApi.GetDetail(GameRoom.RoomId);
if (result.result)
{
mapWorkoutRecordRankings = result.data.RoomRankingList;
}
}
foreach (var ranking in mapWorkoutRecordRankings)
{
var needUpdate = sort.Where(c => c.UserId == ranking.UserId).FirstOrDefault();
if (needUpdate != null)
{
ranking.WeightKG = needUpdate.KGWeight;
needUpdate.Index = ranking.Rank;
needUpdate.IsCompleted = true;
}
}
}
#endregion
}
}
}
@@ -1,5 +1,6 @@
using Assets.Scenes.Ride.Scripts;
using Assets.Scripts.Apis.Models;
using Assets.Scenes.Ride.Scripts.Model;
using DG.Tweening;
using Mapbox.Utils;
using System;
@@ -85,45 +86,21 @@ namespace Assets.Scripts.Scenes.VideoRide
//人物移动速度
public int moveSpeed = 2;
void setHeroState(int newState)
{
//根据当前人物方向与上一次备份的方向计算出模型旋转的角度
Vector3 transformValue = new Vector3();
//模型移动的位置数值
switch (newState)
{
case HERO_UP:
transformValue = Vector3.forward * Time.deltaTime;
break;
case HERO_DOWN:
transformValue = (-Vector3.forward) * Time.deltaTime;
break;
case HERO_LEFT:
transformValue = Vector3.left * Time.deltaTime;
break;
case HERO_RIGHT:
transformValue = (-Vector3.left) * Time.deltaTime;
break;
}
//移动人物
transform.Translate(transformValue * moveSpeed, Space.World);
state = newState;
}
protected virtual void Update()
{
timer -= Time.deltaTime;
CreateHeadImage();
Turn();
while (timer <= 0)
{
try
{
ComputeNextSlope();//计算下一个坡度
ComputePlayer();//计算人物属性
if (GetStart())
{
ticks++;
ComputePlayer();//计算人物属性
Forward();
ComputeRecord();
ComputeVideo();
@@ -223,14 +200,14 @@ namespace Assets.Scripts.Scenes.VideoRide
speed = 0;
distance = 0;
}
//一旦有功率就开始骑行、否则暂停
if (!manager.IsQuit() && manager.CurrentPlayer.UserId == UserId && !manager.IsQuit() && manager.cyclingModel == Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single)
{
if (power > 0)
{
manager.StartGame();
}
}
////一旦有功率就开始骑行、否则暂停
//if (!manager.IsQuit() && manager.CurrentPlayer.UserId == UserId && !manager.IsQuit() && manager.cyclingModel == CyclingModel.Single)
//{
// if (power > 0)
// {
// manager.StartGame();
// }
//}
}
Vector3 current { get; set; }
Vector3 forward { get; set; }
@@ -264,8 +241,8 @@ namespace Assets.Scripts.Scenes.VideoRide
}
if (manager.CurrentPlayer != null && manager.CurrentPlayer.UserId != UserId)
return;
manager.Play(ratio);
//ratio = (float)Math.Round(ratio, 1);
manager.Play(totalDistance);
if (ratio > 1)
{
@@ -303,6 +280,7 @@ namespace Assets.Scripts.Scenes.VideoRide
decimal right = (decimal)sumDistance;
if (left <= right)
{
Debug.Log($"当前索引{i}");
currentIndex = i;
break;
}
@@ -119,9 +119,9 @@ namespace Assets.Scripts.Scenes.VideoRide
var screenWidth = UnityEngine.Screen.width;
var screenHeight = UnityEngine.Screen.height;
var sw_world = _minicamera.ViewportToWorldPoint(new Vector3(0.25f, 0.1f, 160));
var sw_world = _minicamera.ViewportToWorldPoint(new Vector3(0f, 0f, 160));
var sw = _map.WorldToGeoPosition(sw_world);
var ne_world = _minicamera.ViewportToWorldPoint(new Vector3(0.75f, 0.9f, 90));
var ne_world = _minicamera.ViewportToWorldPoint(new Vector3(1f, 1f, 90));
var ne = _map.WorldToGeoPosition(ne_world);
return new Vector2dBounds(new Vector2d(sw.x, sw.y), new Vector2d(ne.x, ne.y));
@@ -24,7 +24,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//var left = totalDistance % mapData.TotalDistance;
//var right = current.totalDistance % mapData.TotalDistance;
//diff = (left - right) * 1000;
if (Math.Abs(diff) > 150)
if (Math.Abs(diff) > 100)
{
Destroy();
}
@@ -99,7 +99,6 @@ namespace Assets.Scripts.Scenes.VideoRide
DeviceCache.Init(PFConstants.DeviceCacheFolder);
var check = CheckAnt();//初始化蓝牙设备
recordId = Guid.NewGuid().ToString();
MockDirection();
infoPanel = Resources.Load<GameObject>("UI/Prefab/AR/VideoPlayerHead");
OnlinePlayer = Resources.Load<GameObject>("UI/Prefab/AR/OnlineVideoPlayer");
OnlinePlayer_NV = Resources.Load<GameObject>("UI/Prefab/AR/OnlineVideoPlayer_NV");
@@ -115,6 +114,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//获取路书
GetMapRoute();
GetMapData();
MockDirection();
route = new Route(mapData, mapRoute);
if (selectParamModel == null)
@@ -365,8 +365,7 @@ namespace Assets.Scripts.Scenes.VideoRide
private void MockDirection()
{
var text = Resources.Load<TextAsset>("UI/direction");
var arr = text.text.Replace("\r\n", " ").Split(' ');
var arr = mapRoute.ARConfig.Replace("\r\n", " ").Split(' ');
foreach (var item in arr)
{
if (string.IsNullOrEmpty(item))
@@ -390,12 +389,6 @@ namespace Assets.Scripts.Scenes.VideoRide
break;
}
}
//模拟登录
private async Task Login()
{
var result = await new UserApi().Login("anyway2019@163.com", "123456", "");
App.CurrentUser = result.data;
}
//开始游戏
public void StartGame()
{
@@ -428,33 +421,40 @@ namespace Assets.Scripts.Scenes.VideoRide
{
return isStop;
}
double preframe = 0;
//设置当前视频播放速度
public void Play(float playbackRate = 1f)
public void Play(double totalDistance)
{
if (!isStart)
return;
if (mediaPlayer != null)
{
mediaPlayer.PlaybackRate = playbackRate;
mediaPlayer.Play();
//mediaPlayer.PlaybackRate = totalDistance;
//if (!mediaPlayer.Control.IsPlaying())
// mediaPlayer.Play();
//var frame = DistanceToFrames(totalDistance);
var frame = DistanceToTimers(totalDistance);
StartCoroutine(DOSeekToFrame(preframe, frame - preframe));
preframe = frame;
}
if (startTime == null)
{
startTime = UIManager.Now.GetDateTime();
}
isStart = true;
}
//暂停
public void Pause()
{
isStart = !isStart;
isStop = !isStop;
if (isStop)
{
mediaPlayer?.Pause();
}
else
{
mediaPlayer?.Play();
}
//if (isStop)
//{
// mediaPlayer?.Pause();
//}
//else
//{
// mediaPlayer?.Play();
//}
}
//退出骑行
public void Quit()
@@ -477,6 +477,13 @@ namespace Assets.Scripts.Scenes.VideoRide
distance %= TotalDistance;
return TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
}
public double DistanceToTimers(double distance)
{
var timers = mediaPlayer.Info.GetDuration();
var TotalDistance = route?.TotalDistance ?? 0;
distance %= TotalDistance;
return TotalDistance > 0 ? timers / TotalDistance * distance : 0;
}
public int GetFrameOffSet(double distance)
{
var currentFrame = GetCurrentFrame();
@@ -492,6 +499,21 @@ namespace Assets.Scripts.Scenes.VideoRide
{
mediaPlayer?.Control.SeekToFrame(seq);
}
double currentFrame = 0d;
private IEnumerator DOSeekToFrame(double preFrame, double offset)
{
float t = 0;
while (t < 1)
{
t += Time.deltaTime;
var result = preFrame + offset * t;
currentFrame = result;
mediaPlayer?.Control.SeekFast(result);
yield return new WaitForEndOfFrame();
}
}
//获取AR骑行配置信息
//获取路书gps信息
public MapDataModel GetMapData()
{
@@ -499,7 +521,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
var mapApi = ConfigHelper.mapApi;
int routeId = App.RouteIdParam;
mapData = mapApi.GetData(routeId);//获取路书地理数据
mapData = mapApi.GetData(routeId,20);//获取路书地理数据
}
return mapData;
}
@@ -106,7 +106,7 @@ namespace Assets.Scripts.Scenes.VideoRide
download = transform.Find("Panel/Download").gameObject;
watch = transform.Find("Panel/Watch").gameObject;
UIManager.AddEvent(watch, UnityEngine.EventSystems.EventTriggerType.PointerClick, WatchHandler);
canvasGroup = transform.GetComponent<CanvasGroup>();
@@ -117,12 +117,14 @@ namespace Assets.Scripts.Scenes.VideoRide
if (File.Exists(filepath))
{
watch.SetActive(true);
slider.value = 100;
download.gameObject.SetActive(false);
manager.SetMedia(filepath);
}
else
{
watch.SetActive(false);
//检查本地文件是否存在 如果存在直接设置mediaPlayer 否则显示下载按钮
UIManager.AddEvent(download.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Download);
}
@@ -200,7 +202,7 @@ namespace Assets.Scripts.Scenes.VideoRide
#endregion
//显示线路背景图
DrawMapRouteAsync(route.Id);
//查询排行榜
//查询排行榜 TODO优化
var list = ConfigHelper.mapApi.GetRouteRanking(route.Id, "1", 0, 10000, "");
if (list.result)
{
@@ -212,9 +214,10 @@ namespace Assets.Scripts.Scenes.VideoRide
var ui = manager.GetCanvasTransform();
canvasGroup.DOFade(0, 1).onComplete += () => {
gameObject.SetActive(false);
manager.StartGame();
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
ui.Find("Panel").gameObject.SetActive(true);
//ui.Find("Panel").gameObject.SetActive(true);
};
}
@@ -236,10 +239,14 @@ namespace Assets.Scripts.Scenes.VideoRide
{
var path = PFConstants.VideoFolder;
var filepath = path + $"/{route.FileName}";
var text = rideNow.GetComponentInChildren<Text>();
StartCoroutine(Utils.DownloadVideo(route.FileName, route.Url
, (p, req) =>
{
rideNow.enabled = false;
rideNow.interactable = false;
slider.value = (float)Math.Round(p * 100, 2);
text.text = slider.value.ToString()+"%";
request = req;
download.SetActive(false);
}
@@ -250,6 +257,10 @@ namespace Assets.Scripts.Scenes.VideoRide
}
else
{
rideNow.enabled = true;
rideNow.interactable = true;
text.text = App.GetLocalString("Ride Now");
watch.SetActive(true);
slider.value = 100;
manager.SetMedia(filepath);
}
+25 -13
View File
@@ -12,6 +12,7 @@ namespace Assets.Scripts.Scenes.VideoRide
{
public double EndDistance => totalDistance;
protected Transform LightTrans { get; set; }
private bool isSingle = true;
protected override void Start()
{
base.Start();
@@ -42,7 +43,11 @@ namespace Assets.Scripts.Scenes.VideoRide
public void Complete()
{
start = false;
manager.Save(totalDistance);
var uimanager= FindObjectOfType<VideoUIManager>();
if (uimanager!= null)
{
uimanager.SaveAndShowResult();
}
}
protected override void ComputeAnimator()
{
@@ -67,11 +72,11 @@ namespace Assets.Scripts.Scenes.VideoRide
heartRate = manager.UpDateHeart();
power = manager.UpdatePower();
cadance = manager.UpdateCadence();
//#if UNITY_EDITOR
power = 100;
#if UNITY_EDITOR
power = 280;
cadance = 70;
heartRate = 160;
//#endif
#endif
weight = App.CurrentUser.Weight;
bicycleWeight = App.CurrentUser.BicycleWeight;
wkg = Math.Round(power / weight, 2);
@@ -81,13 +86,15 @@ namespace Assets.Scripts.Scenes.VideoRide
//发送阻力
manager.TrackResistance(currentSlope);
base.ComputePlayer();
//比人先完成触发关门时间
HandleForGameRoom();
}
private bool gameRoomHandled { get; set; }
//房间倒计时保存
private void HandleForGameRoom()
{
var model = manager.cyclingController as GameModel;
if (model != null && model.FirstEndTime.HasValue && !gameRoomHandled)
if (model != null && model.FirstEndTime.HasValue && !gameRoomHandled && App.CurrentUser.Id != model.FirstUserId)
{
gameRoomHandled = true;
var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime();
@@ -96,13 +103,14 @@ namespace Assets.Scripts.Scenes.VideoRide
Upload();
var uiManager = FindObjectOfType<VideoUIManager>();
uiManager.ShowResultPanel();
});
},true);
}
}
//控制视频播放速度
protected override void ComputeVideo()
{
base.ComputeVideo();
//单人骑行到终点自动暂停
}
protected override void ComputeRecord()
@@ -116,7 +124,7 @@ namespace Assets.Scripts.Scenes.VideoRide
Ticks = ticks,
_Power = power,
_Speed = speed,
_Distance = totalDistance,//totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
_Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
_Cadence = cadance,
_HeartRate = heartRate,
_Lat = currentlatLon.x,
@@ -124,16 +132,20 @@ namespace Assets.Scripts.Scenes.VideoRide
_TotalClimb = totalClimb,
_FrameRate = manager.GetCurrentFrame()
};
var preDistance = targetData._Distance - distance;//totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
var preDistance = totalDistance >= mapData.TotalDistance ? targetData._Distance : targetData._Distance - distance;
if (!isSingle)
{
preDistance = targetData._Distance - distance;
}
recorderData.PreDistance = Math.Round(preDistance, 6, MidpointRounding.AwayFromZero);
recorderData.EndDistance = Math.Round(targetData._Distance, 6, MidpointRounding.AwayFromZero);
recorderData.RiderDatas.Add(targetData);
//默认启用多圈
//if (totalDistance >= mapData.TotalDistance)
//{
// start = false;
// manager.Save(totalDistance);
//}
if (isSingle && totalDistance >= mapData.TotalDistance)
{
Complete();
}
}
protected override void Forward()
@@ -5,6 +5,7 @@ using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using UnityEngine.SceneManagement;
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
namespace Assets.Scripts.Scenes.VideoRide
{
@@ -43,6 +44,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//modal
GameObject settingPanel { get; set; }
GameObject resultPanel { get; set; }
GameObject gameRoomResultPanel { get; set; }
//ftp
GameObject ftpPanel { get; set; }
@@ -136,6 +138,7 @@ namespace Assets.Scripts.Scenes.VideoRide
//modal
settingPanel = transform.Find("Panel/SettingPanel").gameObject;
resultPanel = transform.Find("Panel/ResultPanel").gameObject;
gameRoomResultPanel = transform.Find("Panel/GameRoomResult").gameObject;
//
explosive = transform.Find("Panel/Explosive").gameObject;
//toolbar 事件注册
@@ -225,6 +228,25 @@ namespace Assets.Scripts.Scenes.VideoRide
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
}
public void SaveAndShowResult()
{
videoPlayer = FindObjectOfType<VideoPlayer>();
videoPlayer?.Upload();
//show result
if (manager.cyclingController is GameModel)
{
gameRoomResultPanel.SetActive(true);
gameRoomResultPanel.transform.SetAsLastSibling();
}
else
{
resultPanel.SetActive(true);
resultPanel.transform.SetAsLastSibling();
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
}
}
private void QuitClick(BaseEventData e)
{
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
@@ -233,15 +255,8 @@ namespace Assets.Scripts.Scenes.VideoRide
UIManager.ShowConfirm("Quit", "Do you want to keep the record?",
() =>
{
videoPlayer = FindObjectOfType<VideoPlayer>();
videoPlayer?.Upload();
SaveAndShowResult();
UIManager.CloseConfirm();
//show result
resultPanel.SetActive(true);
resultPanel.transform.SetAsLastSibling();
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
videoResultScript.InjectController(manager);
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
},
2,
() =>
@@ -67,6 +67,14 @@ class GameRoomDownLoad : MonoBehaviour
});
}
private void Update()
{
if (!string.IsNullOrEmpty(FileName) && Loom.DownLoadTaskList.ContainsKey(FileName))
{
processing(Loom.DownLoadTaskList[FileName]);
}
}
public void Init(int Id,string fileName,string url, GameRoomListController gameRoomListController)
{
RoomId = Id;
@@ -74,6 +82,12 @@ class GameRoomDownLoad : MonoBehaviour
FileUrl = url;
manager = gameRoomListController;
}
public void ComeIntoStep2(string fileName)
{
FileName = fileName;
step2.SetActive(true);
step3.SetActive(false);
}
private void Reset()
{
@@ -86,6 +100,18 @@ class GameRoomDownLoad : MonoBehaviour
Reset();
gameObject.SetActive(false);
}
private void processing(float p)
{
downloadSlider.value = p;
if (Loom.DownLoadTaskList.ContainsKey(FileName))
{
Loom.DownLoadTaskList[FileName] = p;
}
else
{
Loom.DownLoadTaskList.Add(FileName, p);
}
}
private void DownloadClick(BaseEventData baseEventData)
{
@@ -105,16 +131,8 @@ class GameRoomDownLoad : MonoBehaviour
Loom.Current.StartCoroutine(Utils.DownloadVideo(fileName, url
, (p, req) =>
{
downloadSlider.value = p;
currentTask.UpdateProcess(p);
if (Loom.DownLoadTaskList.ContainsKey(FileName))
{
Loom.DownLoadTaskList[FileName] = p;
}
else
{
Loom.DownLoadTaskList.Add(FileName, p);
}
processing(p);
}
, (p) =>
{
@@ -25,6 +25,7 @@ class GameRoomDownloadTask : MonoBehaviour
UIManager.AddEvent(btn, EventTriggerType.PointerClick, (e) =>
{
modal.SetActive(true);
modal.GetComponent<GameRoomDownLoad>().ComeIntoStep2(FileName);
transform.parent.parent.parent.gameObject.SetActive(false);
});
}
@@ -105,7 +105,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
if (gameObject != null)
{
slider.value = process;
ShowOutLine();
Ride();
transform.Find("DownLoadModal").gameObject.SetActive(false);
}
}
@@ -163,7 +163,7 @@ public class GameRoomMapItem : MonoBehaviour, IPointerExitHandler, IPointerEnter
var fileName = map.FileName;
var path = PFConstants.VideoFolder;
var filepath = path + "/" + fileName;
//if ((map.EnableAR && !File.Exists(filepath) )|| !map.EnableAR)
if ((map.EnableAR && File.Exists(filepath) )|| !map.EnableAR)
{
var list = FindObjectsOfType<GameRoomMapItem>();
foreach (var item in list)
@@ -43,20 +43,19 @@ class GameRoomPlayerPanel : MonoBehaviour
UIManager.AddEvent(gameObject, EventTriggerType.PointerClick, (e) =>
{
if (App.gameRoomDetail.UserId != App.CurrentUser.Id)
if (App.gameRoomDetail.UserId == UserId)
return;
kickModal.SetActive(true);
});
UIManager.AddEvent(cancelBtn, EventTriggerType.PointerClick, (e) =>
{
if (App.gameRoomDetail.UserId != App.CurrentUser.Id)
return;
kickModal.SetActive(false);
});
UIManager.AddEvent(kickBtn, EventTriggerType.PointerClick, (e) =>
{
if (App.gameRoomDetail.UserId != App.CurrentUser.Id)
return;
kickModal.SetActive(false);
MapUDPService.SendGameRoomKick(App.gameRoomDetail.RoomId, UserId, App.CurrentUser.Id);
});
}
@@ -0,0 +1,194 @@
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
using Assets.Scripts;
using Assets.Scripts.UI.UIEffect;
using System.Linq;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using Assets.Scenes.Ride.Scripts;
using Assets.Scripts.Scenes.VideoRide;
using System;
public class GameRoomResult : MonoBehaviour
{
VideoGameManager manager;
RawImage Head;
Text Ranking;
Text Timer;
GameObject Mine { get; set; }
GameObject TitleImage { get; set; }
GameObject WatchTitle { get; set; }
GameObject RankingPanel { get; set; }
GameObject ShareButton { get; set; }
GameObject ToolBarPanel { get; set; }
GameObject WeChatButton { get; set; }
GameObject WeChatGpButton { get; set; }
RawImage TopHead { get; set; }
RawImage SecondHead { get; set; }
RawImage ThirdHead { get; set; }
Image Top { get; set; }
Sprite SpriteTop { get; set; }
Sprite SpriteSecond { get; set; }
Sprite SpriteThrid { get; set; }
Text RankingTitle { get; set; }
Text TimerTitle { get; set; }
Text CloseTime { get; set; }
Text CloseTitle { get; set; }
private void Awake()
{
manager = FindObjectOfType<VideoGameManager>();
var closeBtn = transform.Find("Close").gameObject;
Head = transform.Find("Mine/Head").GetComponent<RawImage>();
Ranking = transform.Find("Mine/Ranking").GetComponent<Text>();
RankingTitle = transform.Find("Mine/RankingTitle").GetComponent<Text>();
TimerTitle = transform.Find("Mine/TimerTitle").GetComponent<Text>();
Timer = transform.Find("Mine/Timer").GetComponent<Text>();
Top = transform.Find("Mine/TOP").GetComponent<Image>();
Mine = transform.Find("Mine").gameObject;
RankingPanel = transform.Find("Ranking").gameObject;
TopHead = transform.Find("Ranking/TopHead").GetComponent<RawImage>();
SecondHead = transform.Find("Ranking/SecondHead").GetComponent<RawImage>();
ThirdHead = transform.Find("Ranking/ThirdHead").GetComponent<RawImage>();
TitleImage = transform.Find("TitleImage").gameObject;
WatchTitle = transform.Find("WatchTitle").gameObject;
CloseTitle = transform.Find("CloseTitle").GetComponent<Text>();
CloseTime = transform.Find("CloseTime").GetComponent<Text>();
#if UNITY_IOS || UNITY_ANDROID
ShareButton = transform.Find("ShareButton").gameObject;
ToolBarPanel = transform.Find("ToolBarPanel").gameObject;
WeChatButton = transform.Find("ToolBarPanel/WeChatButton").gameObject;
WeChatGpButton = transform.Find("ToolBarPanel/GoogleButton").gameObject;
UIManager.AddEvent(WeChatButton, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShareWechat);
UIManager.AddEvent(WeChatGpButton, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShareWechatGp);
var fbButton = transform.Find("ToolBarPanel/FaceBookButton").gameObject;
UIManager.AddEvent(fbButton, EventTriggerType.PointerClick, shareFb);
#endif
SpriteTop = Resources.Load<Sprite>("Images/Ride/Match/top-1");
SpriteSecond = Resources.Load<Sprite>("Images/Ride/Match/top-2");
SpriteThrid = Resources.Load<Sprite>("Images/Ride/Match/top-3");
UIManager.AddEvent(closeBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Close);
}
float time = 1;
private void Update()
{
time -= Time.deltaTime;
while (time < 0)
{
Refresh();
time += 1;
}
}
private Color RED = new Color(0.9764706f, 0.1882353f, 0.5254902f);
private Color SHALLOW_RED = new Color(1f, 0.454902f, 0.5215687f);
private Color PURPLE = new Color(0.1568628f, 0.4431373f, 0.8745098f);
private Color SHALLOW_PURPLE = new Color(0.3843137f, 0.7764706f, 1f);
private Color BLUE = new Color(0.4352941f, 0.3333333f, 0.9372549f);
private Color SHALLOW_BLUE = new Color(0.772549f, 0.5529412f, 1f);
private Color WHITE = new Color(1f, 1f, 1f);
public void Refresh()
{
if (manager.cyclingController is GameModel model)
{
if (model == null)
return;
var list = model.mapWorkoutRecordRankings;
if (list == null) return;
var parent = transform.Find("ScrollView/Viewport/Content");
Mine.SetActive(true);
RankingPanel.SetActive(false);
TitleImage.SetActive(true);
WatchTitle.SetActive(false);
if (model.FirstEndTime.HasValue)
{
var gap = model.FirstEndTime.Value - UIManager.Now.GetDateTime();
var seconds = (int)Math.Floor(gap.TotalSeconds);
CloseTime.text = Helper.FormatTicks(seconds);
CloseTitle.gameObject.SetActive(true);
CloseTime.gameObject.SetActive(true);
}
//当前用户排名
var currentRanking = list.Where(c => c.UserId == manager.CurrentPlayer.UserId).FirstOrDefault();
if (currentRanking != null)
{
Utils.DisplayImage(Head, currentRanking.WxHeadImg, true);
Ranking.text = currentRanking.Rank.ToString().PadLeft(3, '0');
Timer.text = currentRanking.TotalTime;
var uigradient = Mine.transform.GetComponent<UIGradient>();
if (currentRanking.Rank <= 3)
{
TimerTitle.color = WHITE;
RankingTitle.color = WHITE;
}
if (currentRanking.Rank == 1)
{
uigradient.color1 = RED;
uigradient.color2 = SHALLOW_RED;
Top.sprite = SpriteTop;
Top.gameObject.SetActive(true);
}
if (currentRanking.Rank == 2)
{
uigradient.color1 = PURPLE;
uigradient.color2 = SHALLOW_PURPLE;
Top.sprite = SpriteSecond;
Top.gameObject.SetActive(true);
}
if (currentRanking.Rank == 3)
{
uigradient.color1 = BLUE;
uigradient.color2 = SHALLOW_BLUE;
Top.sprite = SpriteThrid;
Top.gameObject.SetActive(true);
}
}
//排名列表
var rankingList = FindObjectsOfType<FinalRankingItemScript>();
foreach (var item in list)
{
var finalRankingItemScript = rankingList.Where(c => c.UserId == item.UserId).FirstOrDefault();
//没有就创建
if (finalRankingItemScript == null)
{
#if UNITY_IOS || UNITY_ANDROID
var finalRankingItem = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/Mobile/FinalRankingItem"), parent);
#else
var finalRankingItem = Instantiate(Resources.Load<GameObject>("UI/Prefab/Match/FinalRankingItem"), parent);
#endif
finalRankingItemScript = finalRankingItem.GetComponent<FinalRankingItemScript>();
}
//有就更新
finalRankingItemScript.setGap(item.Gap);
finalRankingItemScript.setSource(item.Source);
finalRankingItemScript.setUserId(item.UserId, item.WxHeadImg);
finalRankingItemScript.setRanking(item.Rank);
finalRankingItemScript.setHeartRate(item.HeartRate);
finalRankingItemScript.setName(item.NickName);
finalRankingItemScript.setPower(item.Power);
finalRankingItemScript.setRatio(item.WeightKG);
finalRankingItemScript.setTimer(item.TotalTime);
finalRankingItemScript.transform.SetSiblingIndex(item.Rank);
}
}
}
private void Close(BaseEventData baseEventData)
{
this.gameObject.SetActive(false);
this.Destroy();
SceneManager.LoadScene("MainScene");
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 873bd5947356d6f4d84526e63f9643fc
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,4 +1,5 @@
using Assets.Scripts.Apis.Models;
using Assets.Scenes.Ride.Scripts;
using Assets.Scripts.Apis.Models;
using System;
using UnityEngine;
using UnityEngine.UI;
@@ -6,6 +7,7 @@ using UnityEngine.UI;
public class GameRoomCountDownController : PFUIPanel
{
public Text count;
public Text endCount;
private int Seconds { get; set; }
public GameRoomModel GameRoom { get; set; }
@@ -22,10 +24,11 @@ public class GameRoomCountDownController : PFUIPanel
base.Show();
}
public void Init(int seconds,Action action)
public void Init(int seconds,Action action,bool isEnd = false)
{
Seconds = seconds;
Callback = action;
endCount.gameObject.SetActive(isEnd);
}
float timer = 0f;
@@ -44,7 +47,8 @@ public class GameRoomCountDownController : PFUIPanel
}
else
{
count.text = Seconds.ToString();
count.text = Helper.FormatTicks(Seconds);
endCount.text = Helper.FormatTicks(Seconds);
}
Seconds--;
timer += 1f;
@@ -12,6 +12,7 @@ using Assets.Scenes.Ride.Scripts.Model;
public class GameRoomDetailController : PFUIPanel
{
public Text versionText;
public RawImage Avatar;
public Text idText;
public Text roomName;
@@ -128,6 +129,7 @@ public class GameRoomDetailController : PFUIPanel
private void Init()
{
App.Model = "GameRoom";
versionText.text = "V"+App.AppVersion.ToString();
MapUDPService.MessageListener = ListenerHandler;
GameRoom = App.gameRoomDetail;
@@ -250,9 +252,6 @@ public class GameRoomDetailController : PFUIPanel
protected override void OnDisable()
{
}
protected override void OnDestroy()
{
App.Model = "";
}
}
@@ -59,6 +59,7 @@ public class GameRoomListController : PFUIPanel
private GameObject btn40;
private GameObject btn50;
private GameObject btn60;
private GameObject btnMore;
private GameObject btn2;
private GameObject btn3;
@@ -172,12 +173,12 @@ public class GameRoomListController : PFUIPanel
Total = roomList.GameRoomTotal;
ListChanged = true;
}
else
{
list = null;
Total = 0;
ListChanged = true;
}
//else
//{
// list = null;
// Total = 0;
// 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)
@@ -210,20 +211,6 @@ public class GameRoomListController : PFUIPanel
public override void Show()
{
base.Show();
//LOOM中取数据渲染下载当前下载进度
var downLoadList = transform.Find("DownLoadList").gameObject;
var downloadPanel = transform.Find("DownloadPanel").gameObject;
if (!downLoadList.activeSelf && !downloadPanel.activeSelf)
{
var content = downLoadList.transform.Find("Viewport/Content");
foreach (var item in Loom.DownLoadTaskList)
{
var newtask = Instantiate(_downLoadTask, content);
newtask.GetComponent<GameRoomDownloadTask>().Init(0, item.Key, downloadPanel);
downLoadList.SetActive(true);
}
}
App.Model = "GameRoom";
MapUDPService.MessageListener = ListenerHandler;
MapUDPService.SendQueryGameRoomList(App.CurrentUser.Id, pageHelper.PageIndex, pageHelper.PageSize, seachName);
@@ -275,6 +262,20 @@ public class GameRoomListController : PFUIPanel
CreateClicked = false;
UIManager.ShowGameRoomDetailPanel();
}
//LOOM中取数据渲染下载当前下载进度
var downLoadList = transform.Find("DownLoadList").gameObject;
var downloadPanel = transform.Find("DownloadPanel").gameObject;
if (!downLoadList.activeSelf && !downloadPanel.activeSelf)
{
var content = downLoadList.transform.Find("Viewport/Content");
foreach (var item in Loom.DownLoadTaskList)
{
var newtask = Instantiate(_downLoadTask, content);
newtask.GetComponent<GameRoomDownloadTask>().Init(0, item.Key, downloadPanel);
downLoadList.SetActive(true);
}
}
}
private void InitStep1()
@@ -290,7 +291,14 @@ public class GameRoomListController : PFUIPanel
UIManager.RemoveEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag);
UIManager.AddEvent(scroll, UnityEngine.EventSystems.EventTriggerType.EndDrag, OnEndDrag);
}
var close = transform.Find("MapList/Modal/Close").gameObject;
if (close != null)
{
UIManager.RemoveEvent(close, UnityEngine.EventSystems.EventTriggerType.PointerClick);
UIManager.AddEvent(close, UnityEngine.EventSystems.EventTriggerType.PointerClick, (e)=> {
mapList.gameObject.SetActive(false);
});
}
distanceOptions = topContainer.Find("distanceOptions");
if (distanceOptions != null)
{
@@ -320,12 +328,12 @@ public class GameRoomListController : PFUIPanel
Refresh();
});
}
//是否收藏
//是否AR
if (favContainer != null)
{
isEnableAR = true;//默认勾选ar
var g = favContainer.Find("Gou").gameObject;
g.SetActive(false);
isEnableAR = false;
g.SetActive(isEnableAR);
UIManager.RemoveEvent(favContainer.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick);
UIManager.AddEvent(favContainer.gameObject, EventTriggerType.PointerClick, (e)=> {
var gou = e.selectedObject.transform.Find("Gou").gameObject;
@@ -483,6 +491,7 @@ public class GameRoomListController : PFUIPanel
MapUDPService.SendCreateGameRoom(RoomName, selectedRouteId, Roompwd, UIManager.Now.GetDateTime(), CloseTime, Members, Map.AverageGrade, (Map.TotalClimb ?? 0), Map.Distance, Map.Enable3D, Map.EnableAR, Map.Name, Map.FileName, Map.Url, Map.AltitudeGraph);
MapList.SetActive(false);
CreateClicked = true;
Query();
});
}
@@ -493,6 +502,7 @@ public class GameRoomListController : PFUIPanel
btn40 = right2.transform.Find("btn40").gameObject;
btn50 = right2.transform.Find("btn50").gameObject;
btn60 = right2.transform.Find("btn60").gameObject;
btnMore = right2.transform.Find("btnMore").gameObject;
//房间人数
btn2 = right2.transform.Find("btn2").gameObject;
btn3 = right2.transform.Find("btn3").gameObject;
@@ -504,16 +514,19 @@ public class GameRoomListController : PFUIPanel
var minInputField = right2.transform.Find("MinInputField").GetComponent<InputField>();
var roomNameInputField = right2.transform.Find("RoomNameInputField").GetComponent<InputField>();
var passwordInputField = right2.transform.Find("PasswordInputField").GetComponent<InputField>();
btnMore.SetActive(true);
hourInputField.gameObject.SetActive(false);
minInputField.gameObject.SetActive(false);
hourInputField.text = "0";
minInputField.text = "0";
roomNameInputField.text = "";
passwordInputField.text = "";
RoomName = "";
RoomName = App.CurrentUser.Nickname + App.GetLocalString("'s Room");
Roompwd = "";
roomNameInputField.text = RoomName;
passwordInputField.text = "";
hourInputField.GetComponent<Outline>().enabled = false;
HandleFormInput();
HandleCloseTimeBtnClick(0, "");
HandleMembersBtnClick(0, "");
HandleMembersBtnClick(6, btn6.name);//默认6人
HandleCloseTimeBtnClick(30, btn30.name);//默认关门时间30min
roomNameInputField.onValueChanged.RemoveAllListeners();
//房间名
roomNameInputField.onValueChanged.AddListener((e) => {
@@ -526,6 +539,7 @@ public class GameRoomListController : PFUIPanel
Roompwd = e;
HandleFormInput();
});
UIManager.AddEvent(minInputField.gameObject, EventTriggerType.Select, (e) => {
hourInputField.GetComponent<Outline>().enabled = true;
HandleFormInput();
@@ -546,6 +560,12 @@ public class GameRoomListController : PFUIPanel
{
HandleCloseTimeBtnClick(60, btn60.name);
});
UIManager.AddEvent(btnMore, EventTriggerType.PointerClick, (e) =>
{
btnMore.SetActive(false);
hourInputField.gameObject.SetActive(true);
minInputField.gameObject.SetActive(true);
});
//小时
hourInputField.onValueChanged.RemoveAllListeners();
hourInputField.onValueChanged.AddListener((e) => {
@@ -560,7 +580,9 @@ public class GameRoomListController : PFUIPanel
CloseTime = hours * 60 + mins;
HandleCloseTimeBtnClick(CloseTime, minInputField.name);
});
//房间人数
UIManager.AddEvent(btn2, EventTriggerType.PointerClick, (e) =>
{
HandleMembersBtnClick(2, btn2.name);
@@ -877,7 +899,7 @@ public class GameRoomListController : PFUIPanel
next.GetComponent<Button>().interactable = false;
next.GetComponent<Button>().enabled = false;
HandleStepBtn(previous.name);
HandleCloseTimeBtnClick(0, "");
HandleCloseTimeBtnClick(30, btn30.name);//默认关门时间30min
MapList.SetActive(true);
}
@@ -885,6 +907,7 @@ public class GameRoomListController : PFUIPanel
{
base.OnDisable();
MapUDPService.MessageListener = null;
App.Model = "";
}
}
@@ -96,6 +96,8 @@ public class LocalRouteItem : MonoBehaviour, IPointerExitHandler, IPointerEnterH
//自动上传
try
{
if (record == null)
return;
MapInterruptRecordApi service = ConfigHelper.mapInterruptRecordApi;
var result = service.Add(record, listFileName);
//删除文件
+4 -3
View File
@@ -132,6 +132,7 @@ public class UIManager : MonoBehaviour
return this.GetPanelInstance("GameRoomCountDown", ref this.mGameRoomCountDownController);
}
}
private SettingContoller mSettingContoller;
public SettingContoller SettingModal
{
@@ -702,7 +703,7 @@ public class UIManager : MonoBehaviour
}
if (UIManager.Instance.MainPanel != null && parent == UIManager.Instance.MainPanel)
{
App.currentPageIsHome = panelToShow.GetType().Name.Equals("HomeController");
App.currentPageIsHome = panelToShow.GetType().Name.Equals("NewHomeController");
}
if (modal)
@@ -869,11 +870,11 @@ public class UIManager : MonoBehaviour
{
UIManager.Show(UIManager.Instance.GameRoomLoadingPanel, null, true);
}
public static void ShowGameRoomCountDownPanel(int seconds,Action action)
public static void ShowGameRoomCountDownPanel(int seconds,Action action,bool isEnd = false)
{
if (UIManager.Instance.GameRoomCountDownPanel!= null)
{
UIManager.Instance.GameRoomCountDownPanel.Init(seconds, action);
UIManager.Instance.GameRoomCountDownPanel.Init(seconds, action, isEnd);
}
UIManager.Show(UIManager.Instance.GameRoomCountDownPanel, null, true);
}