部分代码重构
This commit is contained in:
1 parent
431d128ad8
commit
191efae2dd
46 files changed
+214
-209
No files matched your search
@@ -0,0 +1,136 @@
|
||||
using ChartAndGraph;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class ElevationBarDataFeed : MonoBehaviour
|
||||
{
|
||||
VideoGameManager manager { get; set; }
|
||||
[SerializeField]
|
||||
Material _lightColor;
|
||||
[SerializeField]
|
||||
Material _mediumColor;
|
||||
[SerializeField]
|
||||
Material _hardColor;
|
||||
[SerializeField]
|
||||
Material _heavyColor;
|
||||
|
||||
GameObject headPanel { get; set; }
|
||||
|
||||
void Start()
|
||||
{
|
||||
manager= FindObjectOfType<VideoGameManager>();
|
||||
|
||||
BarChart barChart = GetComponent<BarChart>();
|
||||
barChart.DataSource.ClearCategories();
|
||||
barChart.DataSource.ClearValues();
|
||||
if (barChart != null)
|
||||
{
|
||||
var list = manager.GetMapData().List;
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
barChart.DataSource.AddCategory($"Player {i}", getChartMaterial(list[i].Grade));
|
||||
barChart.DataSource.SetValue($"Player {i}", "Group 1", list[i].Elevation);
|
||||
}
|
||||
}
|
||||
headPanel = Resources.Load<GameObject>("UI/Prefab/AR/HeadPanel");
|
||||
}
|
||||
|
||||
float timer = 1f;
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0)
|
||||
{
|
||||
|
||||
timer += 0.5f;
|
||||
}
|
||||
MoveOnlinePlayerHead();
|
||||
}
|
||||
|
||||
//移动海拔线上人物位置
|
||||
private void MoveOnlinePlayerHead()
|
||||
{
|
||||
if (manager.cyclingController == null)
|
||||
return;
|
||||
var players = manager.cyclingController.riders;
|
||||
players = players.Where(c => ((OnlineRiderModel)c).IsWatcher == false).ToList();
|
||||
var headList = FindObjectsOfType<HeadScript>();
|
||||
var videoPlayer = manager.CurrentPlayer;
|
||||
foreach (var item in players)
|
||||
{
|
||||
BarChart barChart = GetComponent<BarChart>();
|
||||
Vector3 vector3 = Vector3.back;
|
||||
var distance = item.EndDistance; //% manager.mapRoute.Distance;
|
||||
|
||||
var currentIndex = Mathf.Clamp((float)(distance / manager.mapRoute.Distance * manager.GetMapData().List.Count),0, manager.GetMapData().List.Count-1);
|
||||
barChart.GetBarTrackPosition($"Player {Math.Round(currentIndex,0)}", "Group 1", out vector3);
|
||||
|
||||
var currentHead = headList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
||||
if (currentHead == null)
|
||||
{
|
||||
var onlineHead = Instantiate(headPanel, transform);
|
||||
onlineHead.GetComponent<HeadScript>().UserId = item.UserId;
|
||||
onlineHead.transform.position = vector3;
|
||||
currentHead = onlineHead.GetComponent<HeadScript>();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentHead.transform.position = vector3;
|
||||
}
|
||||
//控制海拔图头像
|
||||
if (manager.CurrentUserId == item.UserId)
|
||||
{
|
||||
currentHead.transform.Find("Main").gameObject.SetActive(true);
|
||||
currentHead.transform.SetAsLastSibling();
|
||||
}
|
||||
else
|
||||
{
|
||||
currentHead.transform.Find("Main").gameObject.SetActive(false);
|
||||
currentHead.transform.SetAsFirstSibling();
|
||||
}
|
||||
}
|
||||
//删除离线的人
|
||||
foreach (var item in headList)
|
||||
{
|
||||
if (item.UserId != 0)
|
||||
{
|
||||
var player = players.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
||||
if (player == null)
|
||||
{
|
||||
item.gameObject.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ChartDynamicMaterial getChartMaterial(double grade = 0d)
|
||||
{
|
||||
//1: ≥7°坡 红色
|
||||
//2: 3°~7°坡 橙色
|
||||
//3: 0°~3°坡 黄色
|
||||
//4: ≤0°坡 绿色
|
||||
ChartDynamicMaterial chartDynamicMaterial;
|
||||
if (grade > 7)
|
||||
{
|
||||
chartDynamicMaterial = new ChartDynamicMaterial(_heavyColor);
|
||||
}
|
||||
else if (grade > 3)
|
||||
{
|
||||
chartDynamicMaterial = new ChartDynamicMaterial(_hardColor);
|
||||
}
|
||||
else if (grade > 0)
|
||||
{
|
||||
chartDynamicMaterial = new ChartDynamicMaterial(_mediumColor);
|
||||
}
|
||||
else
|
||||
{
|
||||
chartDynamicMaterial = new ChartDynamicMaterial(_lightColor);
|
||||
}
|
||||
return chartDynamicMaterial;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c3b2e5abc80332645b6ab677873adeec
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,33 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class ExplosiveScript : MonoBehaviour
|
||||
{
|
||||
Image image;
|
||||
private void Awake()
|
||||
{
|
||||
image = transform.GetComponent<Image>();
|
||||
}
|
||||
float flag = 0f;
|
||||
float alph = 0f;
|
||||
private void Update()
|
||||
{
|
||||
flag += Time.deltaTime;
|
||||
if (flag >= 0.5f)
|
||||
{
|
||||
alph -= Time.deltaTime;
|
||||
if (alph <= 0)
|
||||
{
|
||||
flag = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
alph += Time.deltaTime;
|
||||
}
|
||||
image.color = new Color(image.color.r, image.color.g, image.color.b, alph);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7a04020ffe9892d498bfe3031bac76ce
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class HeadScript : MonoBehaviour
|
||||
{
|
||||
public string UserName { get; set; }
|
||||
public int UserId { get; set; }
|
||||
private void Start()
|
||||
{
|
||||
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1092a970c15e99c47b4fce5495b5a7f2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,82 @@
|
||||
using PolyAndCode.UI;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class ListItem : MonoBehaviour, ICell
|
||||
{
|
||||
//UI
|
||||
public Text nameLabel;
|
||||
public Text genderLabel;
|
||||
public Text idLabel;
|
||||
public Text powerLabel;
|
||||
public GameObject master;
|
||||
|
||||
//Model
|
||||
private ContactInfo _contactInfo;
|
||||
private int _cellIndex;
|
||||
public string Id;
|
||||
public string Rank;
|
||||
public string Name;
|
||||
private float timer = 1f;
|
||||
private VideoGameManager manager { get; set; }
|
||||
|
||||
private void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
GetComponent<Button>().onClick.AddListener(ButtonListener);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0)
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
var riders = manager.cyclingController?.riders;
|
||||
if (riders != null)
|
||||
{
|
||||
var current = riders.FirstOrDefault(c => c.UserId.ToString() == Id);
|
||||
if (current == null)
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
gameObject.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
timer += 1f;
|
||||
}
|
||||
}
|
||||
|
||||
//This is called from the SetCell method in DataSource
|
||||
public void ConfigureCell(ContactInfo contactInfo, int cellIndex)
|
||||
{
|
||||
Id = contactInfo.id;
|
||||
_cellIndex = cellIndex;
|
||||
_contactInfo = contactInfo;
|
||||
|
||||
nameLabel.text = contactInfo.Name;
|
||||
genderLabel.text = contactInfo.Gender;
|
||||
idLabel.text = contactInfo.id;
|
||||
powerLabel.text = contactInfo.Power.ToString("f0") + "W";
|
||||
}
|
||||
|
||||
public void UpdateItem(string name,string gender,string id)
|
||||
{
|
||||
nameLabel.text = name;
|
||||
genderLabel.text = gender;
|
||||
idLabel.text = id;
|
||||
master.SetActive(manager.CurrentPlayer?.UserId.ToString() == id);
|
||||
}
|
||||
|
||||
private void ButtonListener()
|
||||
{
|
||||
if(manager._aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
manager.ChangePlayer(Convert.ToInt32(Id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 057cbb0cadd9caf4c9031a94f9ca6d39
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,83 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using DG.Tweening;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class NearByScript: MonoBehaviour
|
||||
{
|
||||
Text rideNum {get;set;}
|
||||
Text btnRideNum { get; set; }
|
||||
GameObject Hide { get; set; }
|
||||
GameObject Show { get; set; }
|
||||
VideoPlayer videoPlayer { get; set; }
|
||||
|
||||
private bool isAnimating = false;
|
||||
VerticalLayoutGroup group { get; set; }
|
||||
GameObject stickyItem { get; set; }
|
||||
VideoGameManager manager { get; set; }
|
||||
RectTransform viewRec { get; set; }
|
||||
private void Start()
|
||||
{
|
||||
rideNum = transform.Find("Head/RideNum/Number").GetComponent<Text>();
|
||||
btnRideNum = transform.Find("Head/Show/Panel/Number").GetComponent<Text>();
|
||||
Hide = transform.Find("Head/Hide").gameObject;
|
||||
Show = transform.Find("Head/Show").gameObject;
|
||||
var viewPort = transform.Find("List/Viewport");
|
||||
stickyItem = transform.Find("List/VideoPlayerInfo").gameObject;
|
||||
UIManager.AddEvent(Hide, UnityEngine.EventSystems.EventTriggerType.PointerClick, Hidehandler);
|
||||
UIManager.AddEvent(Show, UnityEngine.EventSystems.EventTriggerType.PointerClick, Showhandler);
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
viewRec = ((RectTransform)viewPort);
|
||||
}
|
||||
public void Hidehandler(BaseEventData data)
|
||||
{
|
||||
if (isAnimating)
|
||||
return;
|
||||
isAnimating = true;
|
||||
transform.DOLocalMoveX(913, 1f).onComplete += () => {
|
||||
Show.SetActive(true);
|
||||
Hide.SetActive(false);
|
||||
isAnimating = false;
|
||||
};
|
||||
}
|
||||
public void Showhandler(BaseEventData data)
|
||||
{
|
||||
if (isAnimating)
|
||||
return;
|
||||
isAnimating = true;
|
||||
Show.SetActive(false);
|
||||
Hide.SetActive(true);
|
||||
transform.DOLocalMoveX(667.55f, 1f).onComplete += () => {
|
||||
isAnimating = false;
|
||||
};
|
||||
}
|
||||
float timer = 1f;
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0) {
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
rideNum.text = $"{list.Count}";
|
||||
btnRideNum.text = rideNum.text;
|
||||
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
|
||||
{
|
||||
stickyItem.SetActive(true);
|
||||
viewRec.DOLocalMoveY(256, 0f);
|
||||
viewRec.DOSizeDelta(new Vector2(viewRec.sizeDelta.x, 546), 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
stickyItem.SetActive(false);
|
||||
viewRec.DOLocalMoveY(300, 0f);
|
||||
viewRec.DOSizeDelta(new Vector2(viewRec.sizeDelta.x,590f), 0);
|
||||
}
|
||||
timer += 1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 626b431b9a468f94b89fce5f20a2cc36
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,151 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||
using PolyAndCode.UI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class ContactInfo
|
||||
{
|
||||
public string Name;
|
||||
public string Gender;
|
||||
public string id;
|
||||
public double Power;
|
||||
}
|
||||
class NearVideoPlayerList : MonoBehaviour, IRecyclableScrollRectDataSource
|
||||
{
|
||||
[SerializeField]
|
||||
RecyclableScrollRect _recyclableScrollRect;
|
||||
|
||||
[SerializeField]
|
||||
RectTransform _rectTransform;
|
||||
|
||||
[SerializeField]
|
||||
private int _dataLength;
|
||||
|
||||
|
||||
private bool _isInit;
|
||||
|
||||
//Dummy data List
|
||||
private List<ContactInfo> _contactList = new List<ContactInfo>();
|
||||
|
||||
private VideoGameManager manager { get; set; }
|
||||
|
||||
//Recyclable scroll rect's data source must be assigned in Awake.
|
||||
private void Awake()
|
||||
{
|
||||
InitData();
|
||||
_recyclableScrollRect.DataSource = this;
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
}
|
||||
|
||||
private void InitData()
|
||||
{
|
||||
if (_contactList != null) _contactList.Clear();
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
var currentPlayer = list.Where(c => c.IsSelf).FirstOrDefault();
|
||||
list = list.Where(c => c.Id != App.CurrentUser.Id).ToList();
|
||||
foreach (var item in list)
|
||||
{
|
||||
_isInit = true;
|
||||
ContactInfo obj = new ContactInfo();
|
||||
obj.Name = item.Name;
|
||||
obj.Gender = "";
|
||||
obj.id = item.Id.ToString();
|
||||
obj.Power = item.Power;
|
||||
_contactList.Add(obj);
|
||||
}
|
||||
}
|
||||
float timer = 1f;
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0)
|
||||
{
|
||||
if (manager.CurrentPlayer == null)
|
||||
return;
|
||||
var totalDitance = manager.GetMapData().TotalDistance;
|
||||
var currentDistance = manager.CurrentPlayer.totalDistance;
|
||||
var currenList = GetComponentsInChildren<ListItem>(true);
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam,manager.cyclingController.recorderData.RoomId);//最新列表
|
||||
list = list.Where(c => c.IsWatcher == false).ToList();
|
||||
var currentPlayerInfo = list.Where(c => c.Id.ToString() == manager.CurrentPlayer.UserId.ToString()).FirstOrDefault();
|
||||
list = list.Where(c => c.Id != App.CurrentUser.Id).OrderByDescending(c=>c.EndDistance).ToList();
|
||||
if (currenList.Count() == 0 && list.Count() > 0)
|
||||
{
|
||||
InitData();
|
||||
if (_recyclableScrollRect.SelfInitialize)
|
||||
{
|
||||
_recyclableScrollRect.ReloadData();
|
||||
}
|
||||
}
|
||||
|
||||
var currentPlayer = manager.CurrentPlayer;
|
||||
if (currentPlayer == null)
|
||||
return;
|
||||
foreach (ListItem o in currenList)
|
||||
{
|
||||
if (currentPlayer.UserId.ToString() == o.Id)
|
||||
continue;
|
||||
var needUpdate = list.Where(c => c.Id.ToString() == o.Id).FirstOrDefault();
|
||||
if (needUpdate != null && currentPlayerInfo != null)
|
||||
{
|
||||
var left = Math.Round((needUpdate.EndDistance - currentPlayerInfo.EndDistance) * 1000);
|
||||
o.UpdateItem(needUpdate.Name, left.ToString() + "M", needUpdate.Id.ToString());
|
||||
o.gameObject.SetActive(true);
|
||||
o.transform.SetSiblingIndex((int)left);
|
||||
}
|
||||
else
|
||||
{
|
||||
o.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var item in list)
|
||||
{
|
||||
var newOne = _contactList.Where(c => c.id == item.Id.ToString()).FirstOrDefault();
|
||||
if (newOne == null)
|
||||
{
|
||||
var one = new ContactInfo();
|
||||
one.Name = item.Name;
|
||||
one.Gender = "";
|
||||
one.id = item.Id.ToString();
|
||||
_contactList.Add(one);
|
||||
_recyclableScrollRect.ReloadData();
|
||||
}
|
||||
}
|
||||
timer +=1f;
|
||||
}
|
||||
}
|
||||
|
||||
#region DATA-SOURCE
|
||||
|
||||
/// <summary>
|
||||
/// Data source method. return the list length.
|
||||
/// </summary>
|
||||
public int GetItemCount()
|
||||
{
|
||||
return _contactList.Count;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Data source method. Called for a cell every time it is recycled.
|
||||
/// Implement this method to do the necessary cell configuration.
|
||||
/// </summary>
|
||||
public void SetCell(ICell cell, int index)
|
||||
{
|
||||
//Casting to the implemented Cell
|
||||
var item = cell as ListItem;
|
||||
item.ConfigureCell(_contactList[index], index);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ad9c66572ce69ea4fba3bc35e6db3d86
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,44 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class RankingItemScript:MonoBehaviour
|
||||
{
|
||||
Text rankingText;
|
||||
Text nameText;
|
||||
Text timerText;
|
||||
|
||||
RawImage head;
|
||||
RawImage country;
|
||||
private void Awake()
|
||||
{
|
||||
rankingText = transform.Find("Rank").GetComponent<Text>();
|
||||
nameText = transform.Find("Name").GetComponent<Text>();
|
||||
timerText = transform.Find("Distance").GetComponent<Text>();
|
||||
// head = transform.Find("Head").GetComponent<RawImage>();
|
||||
country = transform.Find("Country").GetComponent<RawImage>();
|
||||
}
|
||||
|
||||
public void SetRanking(string ranking)
|
||||
{
|
||||
rankingText.text = ranking.PadLeft(2,'0');
|
||||
}
|
||||
public void SetName(string name)
|
||||
{
|
||||
nameText.text = name;
|
||||
}
|
||||
public void SetTimer(string timer)
|
||||
{
|
||||
timerText.text = timer;
|
||||
}
|
||||
public void SetHead(string url)
|
||||
{
|
||||
Utils.DisplayImage(head, url);
|
||||
}
|
||||
public void SetCountry(Texture texture)
|
||||
{
|
||||
country.texture = texture;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8032c539f5d80584da36ae53a0f52e1a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,115 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class RankingScript: MonoBehaviour
|
||||
{
|
||||
GameObject Hide { get; set; }
|
||||
GameObject Show { get; set; }
|
||||
GameObject Month { get; set; }
|
||||
GameObject Week { get; set; }
|
||||
GameObject Day { get; set; }
|
||||
VideoGameManager manager { get; set; }
|
||||
Transform Container { get; set; }
|
||||
Text MonthTxt { get; set; }
|
||||
Text WeekTxt { get; set; }
|
||||
Text DayTxt { get; set; }
|
||||
private bool isAnimating = false;
|
||||
private void Start()
|
||||
{
|
||||
Hide = transform.Find("Head/Hide").gameObject;
|
||||
Show = transform.Find("Head/Show").gameObject;
|
||||
Month = transform.Find("Head/Month").gameObject;
|
||||
Week = transform.Find("Head/Week").gameObject;
|
||||
Day = transform.Find("Head/Day").gameObject;
|
||||
|
||||
MonthTxt = transform.Find("Head/Month/Text").GetComponent<Text>();
|
||||
MonthTxt.color = Color.red;
|
||||
WeekTxt = transform.Find("Head/Week/Text").GetComponent<Text>();
|
||||
DayTxt = transform.Find("Head/Day/Text").GetComponent<Text>();
|
||||
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
Container = transform.Find("List/Viewport/Content");
|
||||
Month.GetComponent<Text>();
|
||||
|
||||
UIManager.AddEvent(Hide, UnityEngine.EventSystems.EventTriggerType.PointerClick, Hidehandler);
|
||||
UIManager.AddEvent(Show, UnityEngine.EventSystems.EventTriggerType.PointerClick, Showhandler);
|
||||
UIManager.AddEvent(Month, UnityEngine.EventSystems.EventTriggerType.PointerClick, MonthClick);
|
||||
UIManager.AddEvent(Week, UnityEngine.EventSystems.EventTriggerType.PointerClick, WeekClick);
|
||||
UIManager.AddEvent(Day, UnityEngine.EventSystems.EventTriggerType.PointerClick, DayClick);
|
||||
|
||||
#if UNITY_EDITOR
|
||||
UIManager.InitNow();//重置当前时间
|
||||
#endif
|
||||
Refresh();
|
||||
}
|
||||
|
||||
//TODO: 重构
|
||||
private void Refresh(string type = "month")
|
||||
{
|
||||
return;
|
||||
var list = manager.GetRankingList(type);
|
||||
|
||||
if (list != null)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("UI/Prefab/AR/RankingItem");
|
||||
Container.DestroyChildren();
|
||||
foreach (var item in list.list)
|
||||
{
|
||||
GameObject newObj = (GameObject)Instantiate(prefab, Container);
|
||||
var itemScript = newObj.GetComponent<RankingItemScript>();
|
||||
itemScript.SetName(item.NickName);
|
||||
var texture = manager.GetCountryImageByCode(item.CountryCode);
|
||||
itemScript.SetCountry(texture);
|
||||
itemScript.SetTimer(item.TotalTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void Hidehandler(BaseEventData data)
|
||||
{
|
||||
if (isAnimating)
|
||||
return;
|
||||
isAnimating = true;
|
||||
transform.DOLocalMoveX(-913, 1f).onComplete+=()=> {
|
||||
Show.SetActive(true);
|
||||
Hide.SetActive(false);
|
||||
isAnimating = false;
|
||||
};
|
||||
}
|
||||
public void Showhandler(BaseEventData data)
|
||||
{
|
||||
if (isAnimating)
|
||||
return;
|
||||
isAnimating = true;
|
||||
Show.SetActive(false);
|
||||
Hide.SetActive(true);
|
||||
transform.DOLocalMoveX(-667, 1f).onComplete += () => {
|
||||
isAnimating = false;
|
||||
};
|
||||
}
|
||||
public void MonthClick(BaseEventData data)
|
||||
{
|
||||
MonthTxt.color = Color.red;
|
||||
WeekTxt.color = Color.white;
|
||||
DayTxt.color = Color.white;
|
||||
Refresh("month");
|
||||
}
|
||||
public void WeekClick(BaseEventData data)
|
||||
{
|
||||
MonthTxt.color = Color.white;
|
||||
WeekTxt.color = Color.red;
|
||||
DayTxt.color = Color.white;
|
||||
Refresh("week");
|
||||
}
|
||||
public void DayClick(BaseEventData data)
|
||||
{
|
||||
MonthTxt.color = Color.white;
|
||||
WeekTxt.color = Color.white;
|
||||
DayTxt.color = Color.red;
|
||||
Refresh("day");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5125c2c61c26934d858b75fa9dfd187
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,25 @@
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class RideSettingController : PFUIPanel
|
||||
{
|
||||
public Slider PowerSlider;
|
||||
public Text PowerText;
|
||||
private VideoGameManager manager;
|
||||
|
||||
void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
//设置模拟功率
|
||||
PowerSlider.onValueChanged.AddListener(e =>
|
||||
{
|
||||
PowerText.text = e.ToString("f0") + "W";
|
||||
if (manager.CurrentPlayer != null)
|
||||
{
|
||||
manager.CurrentPlayer.mockpower = e;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8c630a81d1477c842ad1599135a73d2d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,37 @@
|
||||
using PolyAndCode.UI;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class StickyListItem : MonoBehaviour, ICell
|
||||
{
|
||||
//UI
|
||||
public Text nameLabel;
|
||||
public Text distanceLabel;
|
||||
public GameObject master;
|
||||
//Model
|
||||
private ContactInfo _contactInfo;
|
||||
private int _cellIndex;
|
||||
public string Id;
|
||||
public string Rank;
|
||||
public string Name;
|
||||
private VideoPlayer videoPlayer { get; set; }
|
||||
private float timer = 1f;
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0)
|
||||
{
|
||||
videoPlayer = FindObjectOfType<VideoPlayer>();
|
||||
if (videoPlayer != null)
|
||||
{
|
||||
nameLabel.text = videoPlayer.UserName;
|
||||
distanceLabel.text = "0M";///videoPlayer.totalDistance.ToString("f1");
|
||||
Id = videoPlayer.UserId.ToString();
|
||||
}
|
||||
timer += 1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c5b781a8c7954144ea7de573333f09ed
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,466 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.EventSystems;
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using Assets.Scripts.Apis.Models;
|
||||
using System.Linq;
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using Assets.AR;
|
||||
using System.Threading.Tasks;
|
||||
using System.Threading;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class VideoLoading : MonoBehaviour, IProgress<float>
|
||||
{
|
||||
VideoGameManager manager { get; set; }
|
||||
|
||||
private Text mapName;
|
||||
private RawImage mapRouteImage;
|
||||
private CanvasGroup canvasGroup;
|
||||
private Slider slider;
|
||||
private Text processText;
|
||||
private Text rideNowText;
|
||||
private Button rideNow;
|
||||
private Button cancel;
|
||||
private Text mapDescText;
|
||||
private Text distance;
|
||||
private Text elevaction;
|
||||
private Text slope;
|
||||
private GameObject panel;
|
||||
private GameObject download;
|
||||
private GameObject watch;
|
||||
|
||||
protected GameObject loadingPanel { get; set; }
|
||||
|
||||
private Text level;
|
||||
private Text rideNum;
|
||||
private Text uploadByUserName;
|
||||
private RawImage head;
|
||||
private RawImage country;
|
||||
private RawImage mapCountry;
|
||||
private RawImage altitudeGraph { get; set; }
|
||||
private Transform mapRanking;
|
||||
private Text mapId;
|
||||
private Text downloadText { get; set; }
|
||||
private Transform ui;
|
||||
private MapRoute route;
|
||||
|
||||
protected float process = 0;//0-100 %
|
||||
|
||||
private bool startBtnLock = false;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if(App.gameRoomDetail != null)
|
||||
ShowGameRoomLoading();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
ui = manager.GetCanvasTransform();
|
||||
route = manager.GetMapRoute();
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
InitGameObject();
|
||||
InitGameObjectData();
|
||||
}
|
||||
|
||||
private void ShowGameRoomLoading()
|
||||
{
|
||||
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
|
||||
UIManager.ShowGameRoomLoadingPanel();
|
||||
}
|
||||
|
||||
private void InitGameObject()
|
||||
{
|
||||
panel = transform.Find("Panel").gameObject;
|
||||
mapName = panel.transform.Find("MapName").GetComponent<Text>();
|
||||
distance = panel.transform.Find("Distance").GetComponent<Text>();
|
||||
elevaction = panel.transform.Find("Elevaction").GetComponent<Text>();
|
||||
slope = panel.transform.Find("Slope").GetComponent<Text>();
|
||||
mapRouteImage = panel.transform.Find("MapRouteImage").GetComponent<RawImage>();
|
||||
slider = panel.transform.Find("Process").GetComponent<Slider>();
|
||||
slider.gameObject.SetActive(true);
|
||||
processText = panel.transform.Find("ProcessText").GetComponent<Text>();
|
||||
processText.gameObject.SetActive(false);
|
||||
mapDescText = panel.transform.Find("MapDesc").GetComponent<Text>();
|
||||
rideNow = panel.transform.Find("RideNow").GetComponent<Button>();
|
||||
rideNowText = rideNow.transform.Find("Text").GetComponent<Text>();
|
||||
cancel = panel.transform.Find("Cancel").GetComponent<Button>();
|
||||
UIManager.AddEvent(rideNow.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, StartRide);
|
||||
UIManager.AddEvent(cancel.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
|
||||
slider.onValueChanged.AddListener((f) =>
|
||||
{
|
||||
processText.text = $"{(f).ToString("#0")}%";
|
||||
});
|
||||
|
||||
|
||||
download = transform.Find("Panel/Download").gameObject;
|
||||
watch = transform.Find("Panel/Watch").gameObject;
|
||||
|
||||
UIManager.AddEvent(watch, UnityEngine.EventSystems.EventTriggerType.PointerClick, WatchHandler);
|
||||
canvasGroup = transform.GetComponent<CanvasGroup>();
|
||||
|
||||
var fileName = route.FileName;// "12067924_720p.mp4";
|
||||
var url = route.Url; //@"http://192.168.0.97:6031/12067924_720p.mp4";
|
||||
var path = PFConstants.VideoFolder;
|
||||
var filepath = path + "/" + fileName;
|
||||
|
||||
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, DownloadAsync);
|
||||
}
|
||||
#region
|
||||
level = panel.transform.Find("level/Text").GetComponent<Text>();
|
||||
rideNum = panel.transform.Find("RideNum").GetComponent<Text>();
|
||||
uploadByUserName = panel.transform.Find("UploadByUserName").GetComponent<Text>();
|
||||
country = panel.transform.Find("UploadByCountry").GetComponent<RawImage>();
|
||||
mapCountry = panel.transform.Find("Country").GetComponent<RawImage>();
|
||||
head = panel.transform.Find("UploadByHead").GetComponent<RawImage>();
|
||||
altitudeGraph = panel.transform.Find("AltitudeGraph").GetComponent<RawImage>();
|
||||
mapRanking = panel.transform.Find("MapRanking");
|
||||
mapId = panel.transform.Find("MapId").GetComponent<Text>();
|
||||
|
||||
UIManager.RemoveEvent(distance.gameObject);
|
||||
UIManager.RemoveEvent(slope.gameObject);
|
||||
UIManager.RemoveEvent(elevaction.gameObject);
|
||||
UIManager.RemoveEvent(rideNum.gameObject);
|
||||
UIManager.AddEvent(distance.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
|
||||
{
|
||||
panel.transform.Find("DistanceTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(distance.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
|
||||
{
|
||||
panel.transform.Find("DistanceTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
|
||||
});
|
||||
|
||||
UIManager.AddEvent(slope.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
|
||||
{
|
||||
panel.transform.Find("SlopeTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(slope.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
|
||||
{
|
||||
panel.transform.Find("SlopeTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(elevaction.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
|
||||
{
|
||||
panel.transform.Find("ElevactionTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(elevaction.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
|
||||
{
|
||||
panel.transform.Find("ElevactionTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(rideNum.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerEnter, b =>
|
||||
{
|
||||
panel.transform.Find("RideTip").GetComponent<CanvasGroup>().DOFade(1, 0.5f);
|
||||
});
|
||||
UIManager.AddEvent(rideNum.gameObject, UnityEngine.EventSystems.EventTriggerType.PointerExit, b =>
|
||||
{
|
||||
panel.transform.Find("RideTip").GetComponent<CanvasGroup>().DOFade(0, 0.5f);
|
||||
});
|
||||
#endregion
|
||||
|
||||
downloadText = rideNow.GetComponentInChildren<Text>();//视频下载进度text
|
||||
}
|
||||
|
||||
protected void InitGameObjectData()
|
||||
{
|
||||
var route = manager.mapRoute;
|
||||
#region 绑定路书基本信息
|
||||
mapName.text = route.Name.ToEllipsisString(40);
|
||||
level.text = route.Hard;
|
||||
elevaction.text = Math.Round(route.TotalClimb.GetValueOrDefault(0), 2) + "M";
|
||||
slope.text = Math.Round(route.AverageGrade, 2) + "%";
|
||||
rideNum.text = route.TheHeat.ToString();
|
||||
distance.text = route.Distance.ToString("f1") + "KM";
|
||||
mapDescText.text = route.Dec.ToEllipsisString(255);
|
||||
mapId.text = $"#{route.Id.ToString()}";
|
||||
var userList = ConfigHelper.mapApi.GetOnlineUserInfo(new int[] { route.UserId }).data;
|
||||
if (userList.Count > 0)
|
||||
{
|
||||
uploadByUserName.text = userList[0].Name;
|
||||
var countryUrl = App.Host + $"User/GetCountryImg?userid={userList[0].Id}";
|
||||
Utils.DisplayImage(head, userList[0].HeadImage);//头像
|
||||
country.texture = manager.GetCountryImageByName(userList[0].Country);//上传者国家
|
||||
mapCountry.texture = manager.GetCountryImageByCode(route.CountryCode);//路书国家
|
||||
}
|
||||
#endregion
|
||||
Utils.DisplayImage(altitudeGraph, route.AltitudeGraph,true,null,1f);//渲染海拔图
|
||||
//显示线路背景图
|
||||
DrawMapRouteAsync(route.Id);
|
||||
//查询排行榜 TODO优化
|
||||
var list = ConfigHelper.mapApi.GetRouteRanking(route.Id, "1", 0, 10000, "");
|
||||
if (list.result)
|
||||
{
|
||||
CreateRankingList(list.data.list);
|
||||
}
|
||||
}
|
||||
|
||||
private void StartRide(BaseEventData baseEvent)
|
||||
{
|
||||
if (startBtnLock) return;
|
||||
|
||||
startBtnLock = true;
|
||||
|
||||
InitClientState(false);
|
||||
|
||||
InitAR();
|
||||
|
||||
canvasGroup.DOFade(0, 1).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
manager.StartGame();
|
||||
manager.SetCyclingModel(Assets.Scenes.Ride.Scripts.Model.CyclingModel.Single);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
};
|
||||
}
|
||||
|
||||
private async void InitAR()
|
||||
{
|
||||
route = manager.mapRoute;
|
||||
var arDataPath = $"{PFConstants.ARFolder}/{route.Id}/{route.Id}.json";
|
||||
var videoRoute = $"{PFConstants.ARFolder}/{route.Id}/route-{route.Id}.json";
|
||||
|
||||
ARData aRData = null;
|
||||
RouteDetailData routeDetailData = null;
|
||||
|
||||
await Task.Run<ARData>((Func<ARData>)(() => aRData = ARData.LoadFromFile(arDataPath)));
|
||||
await Task.Run<RouteDetailData>((Func<RouteDetailData>)(() => routeDetailData = RouteDetailData.LoadFromFile(videoRoute)));
|
||||
|
||||
var arController = FindObjectOfType<ARTrainingController>();
|
||||
arController.Initialize(aRData, routeDetailData);
|
||||
}
|
||||
|
||||
public void StartRide(int seconds)
|
||||
{
|
||||
InitClientState(false);
|
||||
|
||||
var ui = manager.GetCanvasTransform();
|
||||
canvasGroup.DOFade(0, 0).onComplete += () => {
|
||||
InitAR();
|
||||
gameObject.SetActive(false);
|
||||
manager.SetCyclingModel(CyclingModel.GameRoom);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.RIDE);
|
||||
ui.Find("Panel").gameObject.SetActive(true);
|
||||
};
|
||||
|
||||
UIManager.ShowGameRoomCountDownPanel(seconds,()=> {
|
||||
manager.StartGame();
|
||||
},false,true);
|
||||
}
|
||||
|
||||
private bool downloading = false;
|
||||
private CancellationTokenSource cancelToken;
|
||||
private async void DownloadAsync(BaseEventData baseEvent)
|
||||
{
|
||||
if (downloading)
|
||||
return;
|
||||
|
||||
beforeDownload();
|
||||
await startDownloading();
|
||||
}
|
||||
|
||||
private void beforeDownload()
|
||||
{
|
||||
downloading = true;
|
||||
download.SetActive(false);
|
||||
rideNow.enabled = false;
|
||||
rideNow.interactable = false;
|
||||
downloadText.text = "0%";
|
||||
}
|
||||
|
||||
private async Task startDownloading()
|
||||
{
|
||||
var route = manager.mapRoute;
|
||||
var path = PFConstants.VideoFolder;
|
||||
|
||||
var localPath = PFConstants.ARFolder;
|
||||
var arDataPath = route.ARConfig;
|
||||
var videoRoute = route.VideoRoute;
|
||||
var dataPath = $"{localPath}/{route.Id}";
|
||||
|
||||
Helper.CreateDirectoryIfNotExsit(dataPath);
|
||||
Helper.CreateDirectoryIfNotExsit(dataPath);
|
||||
|
||||
cancelToken = new CancellationTokenSource();
|
||||
|
||||
await Loom.DownloadToFileAsync(arDataPath, $"{dataPath}/{route.Id}.json");
|
||||
await Loom.DownloadToFileAsync(videoRoute, $"{dataPath}/route-{route.Id}.json");
|
||||
var res = await Loom.DownloadToFileAsync(route.Url, $"{path}/{route.FileName}",this,cancelToken);
|
||||
if (res.isDone)
|
||||
{
|
||||
var filepath = $"{PFConstants.VideoFolder}/{route.FileName}";
|
||||
manager.SetMedia(filepath);
|
||||
|
||||
rideNow.enabled = true;
|
||||
rideNow.interactable = true;
|
||||
|
||||
downloadText.text = App.GetLocalString("Ride Now");
|
||||
downloading = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void Report(float value)
|
||||
{
|
||||
if (cancelToken.IsCancellationRequested)
|
||||
return;
|
||||
|
||||
slider.value = value < 1 ? (float)Math.Round(value * 100, 0) : 100;
|
||||
downloadText.text = slider.value.ToString(CultureInfo.InvariantCulture) + "%";
|
||||
}
|
||||
//进入观察模式
|
||||
private void WatchHandler(BaseEventData data)
|
||||
{
|
||||
InitAR();
|
||||
InitClientState(true);
|
||||
|
||||
var canvas = transform.GetComponent<CanvasGroup>();
|
||||
var canvasTransform = manager.GetCanvasTransform();
|
||||
canvas.DOFade(0, 1).onComplete += () => {
|
||||
gameObject.SetActive(false);
|
||||
canvasTransform.gameObject.SetActive(true);
|
||||
manager.SetCurrentMode(VideoGameManager.ARMode.INSPECT);
|
||||
manager.StartGame();
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 告诉服务器是观察模式还是骑行模式
|
||||
/// </summary>
|
||||
/// <param name="isWatch"></param>
|
||||
private static void InitClientState(bool isWatch)
|
||||
{
|
||||
MapUDPService.IsWatch = isWatch;
|
||||
MapUDPService.SendGizpModel();
|
||||
}
|
||||
|
||||
private void Cancel(BaseEventData baseEvent)
|
||||
{
|
||||
if (cancelToken == null)
|
||||
{
|
||||
SceneManager.LoadSceneAsync("MainScene");
|
||||
return;
|
||||
}
|
||||
|
||||
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
|
||||
UIManager.ShowConfirm("Tips", "CancelDownloadConfirm",
|
||||
() =>
|
||||
{
|
||||
cancelToken?.Cancel();
|
||||
SceneManager.LoadSceneAsync("MainScene");
|
||||
UIManager.CloseConfirm();
|
||||
},
|
||||
2,
|
||||
() =>
|
||||
{
|
||||
UIManager.CloseConfirm();
|
||||
});
|
||||
}
|
||||
private async void DrawMapRouteAsync(int routeId, int type = 0)
|
||||
{
|
||||
var result = await ConfigHelper.mapApi.GetMapLoadingCoverageUrl(routeId, type);
|
||||
if (!result.result)
|
||||
return;
|
||||
var url = result.data;
|
||||
if (App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
mapRouteImage.texture = App.TextureCache[url];
|
||||
var canvasGroup = mapRouteImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup.DOFade(1, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.DisplayImageAysnc(StartCoroutine, mapRouteImage, url, DowloadCallBack);
|
||||
}
|
||||
}
|
||||
private void DowloadCallBack(string url, RawImage rawImage)
|
||||
{
|
||||
if (!App.TextureCache.ContainsKey(url))
|
||||
{
|
||||
App.TextureCache.Add(url, rawImage?.texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
App.TextureCache[url] = rawImage?.texture;
|
||||
}
|
||||
var canvasGroup = rawImage.GetComponent<CanvasGroup>();
|
||||
canvasGroup?.DOFade(1, 1);
|
||||
}
|
||||
|
||||
private int RankingPageSize = 10;
|
||||
//创建排行榜
|
||||
public void CreateRankingList(List<MapRouteRanking> list)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("UI/Prefab/Ride/RankingItem");
|
||||
var myprefab = Resources.Load<GameObject>("UI/Prefab/Ride/MySelfRankingItem");
|
||||
var viewAllbtn = Resources.Load<GameObject>("UI/Prefab/Ride/ViewAll");
|
||||
var parent = panel.transform.Find("MapRanking");
|
||||
var title = panel.transform.Find("RankingTitle").gameObject;
|
||||
title.SetActive(list.Count != 0);
|
||||
int index = 0;
|
||||
foreach (var item in list)
|
||||
{
|
||||
index++;
|
||||
if (index > RankingPageSize)
|
||||
break;
|
||||
GameObject newObj = (GameObject)Instantiate(prefab, parent);
|
||||
var selectPlayerItemScript = newObj.GetComponent<Assets.Scenes.Ride.Scripts.RankingItemScript>();
|
||||
selectPlayerItemScript.SetRanking(item.RowNumber.ToString());
|
||||
selectPlayerItemScript.SetName(item.NickName);
|
||||
selectPlayerItemScript.SetTimer(item.IsDNF ? "DNF" : item.TotalTime);
|
||||
selectPlayerItemScript.SetHead(item.WxHeadImg);
|
||||
var texture = manager.GetCountryImageByCode(item.CountryCode);
|
||||
selectPlayerItemScript.SetCountry(texture);
|
||||
}
|
||||
//如果有自己的记录显示自己的排名
|
||||
var myself = list.Where(c => c.MySelf).FirstOrDefault();
|
||||
GameObject myselfObj = (GameObject)Instantiate(myprefab, parent);
|
||||
var myselfItemScript = myselfObj.GetComponent<Assets.Scenes.Ride.Scripts.RankingItemScript>();
|
||||
if (myself == null)
|
||||
{
|
||||
myselfItemScript.SetRanking("--");
|
||||
myselfItemScript.SetName(App.CurrentUser.Nickname);
|
||||
myselfItemScript.SetTimer("--:--:--");
|
||||
myselfItemScript.SetHead(App.CurrentUser.WxHeadImg);
|
||||
var texture = manager.GetCountryImageByName(App.CurrentUser.Country);
|
||||
myselfItemScript.SetCountry(texture);
|
||||
}
|
||||
else
|
||||
{
|
||||
myselfItemScript.SetRanking(myself.RowNumber.ToString());
|
||||
myselfItemScript.SetName(myself.NickName);
|
||||
myselfItemScript.SetTimer(myself.IsDNF ? "DNF" : myself.TotalTime);
|
||||
myselfItemScript.SetHead(myself.WxHeadImg);
|
||||
var texture = manager.GetCountryImageByCode(myself.CountryCode);
|
||||
myselfItemScript.SetCountry(texture);
|
||||
}
|
||||
//显示查询全部按钮
|
||||
if (list.Count > 0)
|
||||
{
|
||||
GameObject ViewAll = (GameObject)Instantiate(viewAllbtn, parent);
|
||||
UIManager.AddEvent(ViewAll, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
|
||||
{
|
||||
Application.OpenURL($"{App.CurrentUser.WebHost}Routes/{manager.mapRoute.Id}?Token={App.CurrentUser.cookie}");
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1f3705d27cb576f498459e5540d88906
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,178 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Assets.Scenes.Ride.Scripts.Model;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.SceneManagement;
|
||||
using Facebook.Unity;
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class VideoResultScript : MonoBehaviour
|
||||
{
|
||||
#region 路书信息
|
||||
Text date;
|
||||
Text time;
|
||||
Text level;
|
||||
Text mapName;
|
||||
Text distance;
|
||||
RawImage country;
|
||||
RawImage altudeGraph;
|
||||
#endregion
|
||||
|
||||
#region 骑行结果
|
||||
Text rideTime;
|
||||
Text rideDistance;
|
||||
Text totalClimbed;
|
||||
Text wkgText;
|
||||
Text avCadence;
|
||||
Text avHeatrate;
|
||||
Text maxPower;
|
||||
Text avPower;
|
||||
Text maxSpeed;
|
||||
Text avSpeed;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 功能按钮
|
||||
GameObject goResultBtn;
|
||||
GameObject cancelBtn;
|
||||
GameObject shareWxBtn;
|
||||
GameObject shareWxGpButton;
|
||||
Transform toolbar;
|
||||
Image DNF;
|
||||
Image newRecord;
|
||||
#endregion
|
||||
|
||||
VideoGameManager cyclingController;
|
||||
private void Awake()
|
||||
{
|
||||
#region 路书信息
|
||||
date = transform.Find("MapPanel/Date").GetComponent<Text>();
|
||||
time = transform.Find("MapPanel/Timer").GetComponent<Text>();
|
||||
level = transform.Find("MapPanel/Level/Text").GetComponent<Text>();
|
||||
mapName = transform.Find("MapPanel/MapName").GetComponent<Text>();
|
||||
distance = transform.Find("MapPanel/Distance").GetComponent<Text>();
|
||||
country = transform.Find("MapPanel/Country").GetComponent<RawImage>();
|
||||
altudeGraph = transform.Find("MapPanel/AltudeGraph").GetComponent<RawImage>();
|
||||
#endregion
|
||||
#region 骑行记录
|
||||
rideTime = transform.Find("TimePanel/Timer").GetComponent<Text>();
|
||||
rideDistance = transform.Find("DistancePanel/Distance").GetComponent<Text>();
|
||||
totalClimbed = transform.Find("FitPanel/TotalClimbedView/Value").GetComponent<Text>();
|
||||
wkgText = transform.Find("FitPanel/FTPView/Value").GetComponent<Text>();
|
||||
avCadence = transform.Find("FitPanel/CadenceView/Value").GetComponent<Text>();
|
||||
avHeatrate = transform.Find("FitPanel/HeartView/Value").GetComponent<Text>();
|
||||
maxPower = transform.Find("FitPanel/MaxPowerView/Value").GetComponent<Text>();
|
||||
avPower = transform.Find("FitPanel/AveragePowerView/Value").GetComponent<Text>();
|
||||
maxSpeed = transform.Find("FitPanel/MaxSpeedView/Value").GetComponent<Text>();
|
||||
avSpeed = transform.Find("FitPanel/AverageSpeed/Value").GetComponent<Text>();
|
||||
#endregion
|
||||
goResultBtn = transform.Find("ConFirmButton").gameObject;
|
||||
cancelBtn = transform.Find("CloseButton").gameObject;
|
||||
toolbar = transform.Find("ToolBarPanel");
|
||||
#if UNITY_ANDROID || UNITY_IOS
|
||||
shareWxBtn = transform.Find("ToolBarPanel/WeChatButton").gameObject;
|
||||
shareWxGpButton = transform.Find("ToolBarPanel/GoogleButton").gameObject;
|
||||
#endif
|
||||
DNF = transform.Find("DNF").GetComponent<Image>();
|
||||
newRecord = transform.Find("TimePanel/NewRecord").GetComponent<Image>();
|
||||
}
|
||||
|
||||
public void InjectController(VideoGameManager controller)
|
||||
{
|
||||
cyclingController = controller;
|
||||
controller.AddEvent(goResultBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, GoResult);
|
||||
controller.AddEvent(cancelBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, Cancel);
|
||||
#if UNITY_ANDROID || UNITY_IOS
|
||||
cyclingController.AddEvent(shareWxBtn, EventTriggerType.PointerClick, shareToWx);
|
||||
cyclingController.AddEvent(shareWxGpButton, EventTriggerType.PointerClick, shareToWxGp);
|
||||
var fbButton = transform.Find("ToolBarPanel/FaceBookButton").gameObject;
|
||||
cyclingController.AddEvent(fbButton, EventTriggerType.PointerClick, shareToFb);
|
||||
#endif
|
||||
}
|
||||
|
||||
private void shareToFb(BaseEventData arg0)
|
||||
{
|
||||
FB.ShareLink(contentURL: new Uri($"{App.CurrentUser.WebHost}RoutesRecords/{cyclingController.RankingId}?Token={App.CurrentUser.cookie}"),
|
||||
contentTitle: cyclingController.mapRoute.Name,
|
||||
contentDescription: "By " + App.CurrentUser.Nickname,
|
||||
photoURL: new Uri(cyclingController.mapRoute.CoverImage));
|
||||
}
|
||||
|
||||
private void shareToWx(BaseEventData b)
|
||||
{
|
||||
if (App.weChatController.IsWeChatAppInstalled())
|
||||
{
|
||||
App.weChatController.ShareWebpageToWX(0, $"{App.CurrentUser.WebHost}RoutesRecords/{cyclingController.RankingId}?Token={App.CurrentUser.cookie}", cyclingController.mapRoute.Name, "By " + App.CurrentUser.Nickname, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.showToast(null, "未安装微信");
|
||||
}
|
||||
}
|
||||
|
||||
private void shareToWxGp(BaseEventData b)
|
||||
{
|
||||
if (App.weChatController.IsWeChatAppInstalled())
|
||||
{
|
||||
App.weChatController.ShareWebpageToWX(1, $"{App.CurrentUser.WebHost}RoutesRecords/{cyclingController.RankingId}?Token={App.CurrentUser.cookie}", cyclingController.mapRoute.Name, "By " + App.CurrentUser.Nickname, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.showToast(null, "未安装微信");
|
||||
}
|
||||
}
|
||||
|
||||
private void GoResult(BaseEventData baseEventData)
|
||||
{
|
||||
if (App.MainSceneParam.ContainsKey("Name"))
|
||||
{
|
||||
App.MainSceneParam["Name"] = "UserInfoPanel";
|
||||
}
|
||||
else
|
||||
{
|
||||
App.MainSceneParam.Add("Name", "UserInfoPanel");
|
||||
}
|
||||
|
||||
Application.OpenURL($"{App.CurrentUser.WebHost}Mine/Detail/{cyclingController.RankingId}?Token={App.CurrentUser.cookie}");
|
||||
SceneManager.LoadScene("MainScene");
|
||||
}
|
||||
|
||||
private void Cancel(BaseEventData baseEventData)
|
||||
{
|
||||
SceneManager.LoadScene("MainScene");
|
||||
}
|
||||
public void SetDataSource(RecorderDataModel record)
|
||||
{
|
||||
var route = record.CurrentRoute.RouteInstance;
|
||||
var dataformt = App.GetLocalLanguage().Equals("zh") ? "yyyy-MM-dd" : "dd-MM-yyyy";
|
||||
date.text = record.StartTime.ToString(dataformt);
|
||||
time.text = record.StartTime.ToShortTimeString();
|
||||
level.text = route.Hard;
|
||||
mapName.text = route.Name;
|
||||
distance.text = route.Distance.ToString("f1") + "KM";
|
||||
country.texture = cyclingController.GetCountryImageByCode(route.CountryCode);
|
||||
Utils.DisplayImage(altudeGraph, route.AltitudeGraph);
|
||||
//绑定骑行记录结果
|
||||
rideTime.text = Helper.FormatTicks(record.RiderDatas.Count);
|
||||
rideDistance.text = record.RiderDatas.Last()._Distance.ToString("f1") + "KM";
|
||||
totalClimbed.text = record.RiderDatas.Last()._TotalClimb.ToString("f1");
|
||||
var power = Math.Round(record.RiderDatas.Average(c => c._Power), 0);
|
||||
avPower.text = power.ToString();
|
||||
maxPower.text = record.RiderDatas.Max(c => c._Power).ToString("f0");
|
||||
avHeatrate.text = record.RiderDatas.Average(c => c._HeartRate.GetValueOrDefault(0)).ToString("f0");
|
||||
avSpeed.text = record.RiderDatas.Average(c => c._Speed).ToString("f1");
|
||||
maxSpeed.text = record.RiderDatas.Max(c => c._Speed).ToString("f1");
|
||||
wkgText.text = Math.Round(power / record.CurrentUser.Weight, 2).ToString();
|
||||
avCadence.text = record.RiderDatas.Average(c => c._Cadence).GetValueOrDefault(0).ToString("f0");
|
||||
|
||||
DNF.gameObject.SetActive(!record.IsCompleted);
|
||||
var recordImagePath = App.GetLocalLanguage().Equals("zh") ? "Images/Ride/img_newrecord_cn" : "img_newrecord";
|
||||
newRecord.sprite = Resources.Load<Sprite>(recordImagePath);
|
||||
newRecord.gameObject.SetActive(record.IsCompleted);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cf670cbf2ee31f54e948d1ae90112d81
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,340 @@
|
||||
using Assets.Scenes.Ride.Scripts;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.UI;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.SceneManagement;
|
||||
using Assets.Scenes.Ride.Scripts.Model.CyclingModels;
|
||||
using static Assets.Scripts.Scenes.VideoRide.VideoGameManager;
|
||||
using Assets.AR;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class VideoUIManager : MonoBehaviour
|
||||
{
|
||||
private const float MAXPOWER = 450f;
|
||||
private const float MAXPOWER_RATE = 600f;
|
||||
private const float MAXHEARRATE = 200f;
|
||||
private const float MAXWKG = 6f;
|
||||
private const float MAX_HEART_RATIO = 0.9f;
|
||||
GameObject ComputerPanel { get; set; }
|
||||
GameObject WatchPanel { get; set; }
|
||||
GameObject explosive { get; set; }
|
||||
GameObject button;
|
||||
GameObject remainTime;
|
||||
VideoGameManager manager;
|
||||
VideoPlayer videoPlayer;
|
||||
|
||||
Text infoText { get; set; }
|
||||
//ComputerPanel
|
||||
Text power { get; set; }
|
||||
Text cadance { get; set; }
|
||||
Text heartRate { get; set; }
|
||||
Text speed { get; set; }
|
||||
Text totalDistance { get; set; }
|
||||
Text totalClimbed { get; set; }
|
||||
Text ridingTime { get; set; }
|
||||
Text mapName { get; set; }
|
||||
Image left { get; set; }
|
||||
Image right { get; set; }
|
||||
//ToolBarPanel
|
||||
GameObject settingBtn { get; set; }
|
||||
GameObject deviceBtn { get; set; }
|
||||
GameObject changeViewBtn { get; set; }
|
||||
GameObject quitBtn { get; set; }
|
||||
//minimap
|
||||
Text playerTimer { get; set; }
|
||||
Text distance { get; set; }
|
||||
Text slope { get; set; }
|
||||
Transform wave { get; set; }
|
||||
Image waveimage { get; set; }
|
||||
//modal
|
||||
GameObject settingPanel { get; set; }
|
||||
GameObject resultPanel { get; set; }
|
||||
GameObject gameRoomResultPanel { get; set; }
|
||||
|
||||
//ftp
|
||||
GameObject ftpPanel { get; set; }
|
||||
Image ftpImage { get; set; }
|
||||
Text wkg { get; set; }
|
||||
|
||||
private void Start()
|
||||
{
|
||||
UIManager.SetModalPanel(transform.Find("ModalPanel").GetComponent<PFUIPanel>());
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
Init();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
mapName.text = manager.GetMapRoute().Name;
|
||||
if (manager.CurrentPlayer != null)
|
||||
{
|
||||
power.text = Math.Round(manager.CurrentPlayer.power).ToString();
|
||||
speed.text = manager.CurrentPlayer.speed.ToString("f1");
|
||||
heartRate.text = Math.Round((manager.CurrentPlayer.heartRate ?? 0d)).ToString();
|
||||
cadance.text = Math.Round(manager.CurrentPlayer.cadance).ToString();
|
||||
playerTimer.text = Helper.FormatTicks(manager.CurrentPlayer.ticks);
|
||||
distance.text = $"{Math.Round((manager.CurrentPlayer.totalDistance),2)}KM";
|
||||
left.fillAmount = (float)(Math.Round(manager.CurrentPlayer.power) / MAXPOWER_RATE);
|
||||
right.fillAmount = (float)(Math.Round((manager.CurrentPlayer.heartRate ?? 0f)) / MAXHEARRATE);
|
||||
SetSlopePanel();
|
||||
ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG);
|
||||
wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
|
||||
SetHeartRateAlert();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//心率过高的时候显示
|
||||
private void SetHeartRateAlert()
|
||||
{
|
||||
if (manager.CurrentPlayer.UserId == App.CurrentUser.Id)
|
||||
{
|
||||
explosive.SetActive(ComputeHearRateRatio(manager.CurrentPlayer.heartRate ?? 0) > MAX_HEART_RATIO);
|
||||
}
|
||||
else
|
||||
{
|
||||
explosive.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
//距离终点
|
||||
public void ShowUpRemainTime(double remain)
|
||||
{
|
||||
if (remain > 110) return;
|
||||
|
||||
remain -= 20;
|
||||
|
||||
var canvas = remainTime.GetComponent<CanvasGroup>();
|
||||
if (remain <= 0)
|
||||
{
|
||||
if (canvas.alpha == 1)
|
||||
canvas.DOFade(0, 1).onComplete = () => { remainTime.SetActive(false); };
|
||||
}
|
||||
else
|
||||
{
|
||||
remainTime.SetActive(true);
|
||||
remainTime.transform.Find("Bg/Distance").GetComponent<Text>().text = remain.ToString().PadLeft(2,'0');
|
||||
|
||||
if (canvas.alpha == 0)
|
||||
canvas.DOFade(1, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
// 220 - 年龄= 最大心率 ratio = heartRate /最大心率
|
||||
private float ComputeHearRateRatio(int heartRate)
|
||||
{
|
||||
var age = DateTime.Now.Year - App.CurrentUser.Birthday?.Year;
|
||||
if (DateTime.Now.Month - App.CurrentUser.Birthday?.Month > 0 && DateTime.Now.Day - App.CurrentUser.Birthday?.Day > 0)
|
||||
{
|
||||
age += 1;
|
||||
}
|
||||
age = age ?? 0;
|
||||
var ratio = heartRate / (220 - age);
|
||||
return (float)ratio;
|
||||
}
|
||||
|
||||
public void SetCurrentMode(VideoGameManager.ARMode aRMode)
|
||||
{
|
||||
if (aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
{
|
||||
ComputerPanel.SetActive(false);
|
||||
WatchPanel.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
WatchPanel.SetActive(false);
|
||||
ComputerPanel.SetActive(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void Init()
|
||||
{
|
||||
remainTime = transform.Find("Panel/Remain").gameObject;
|
||||
infoText = transform.Find("InfoText").GetComponentInChildren<Text>();
|
||||
ComputerPanel = transform.Find("Panel/ComputerPanel").gameObject;
|
||||
WatchPanel = transform.Find("Panel/WatchPanel").gameObject;
|
||||
power = transform.Find("Panel/ComputerPanel/Power").GetComponent<Text>();
|
||||
cadance = transform.Find("Panel/ComputerPanel/Cadance").GetComponent<Text>();
|
||||
heartRate = transform.Find("Panel/ComputerPanel/Hr").GetComponent<Text>();
|
||||
speed = transform.Find("Panel/ComputerPanel/Speed").GetComponent<Text>();
|
||||
left = transform.Find("Panel/ComputerPanel/Left").GetComponent<Image>();
|
||||
right = transform.Find("Panel/ComputerPanel/Right").GetComponent<Image>();
|
||||
//ToolBarPanel
|
||||
settingBtn = transform.Find("Panel/ToolBarPanel/SettingButton").gameObject;
|
||||
quitBtn = transform.Find("Panel/ToolBarPanel/ExitButton").gameObject;
|
||||
changeViewBtn = transform.Find("Panel/ToolBarPanel/ChangeView").gameObject;
|
||||
deviceBtn = transform.Find("Panel/ToolBarPanel/DeviceButton").gameObject;
|
||||
//minmap
|
||||
playerTimer = transform.Find("Panel/MiniMap/Panel/Timer").GetComponent<Text>();
|
||||
distance = transform.Find("Panel/MiniMap/Panel/Distance").GetComponent<Text>();
|
||||
mapName = transform.Find("Panel/MiniMap/Head/MapName").GetComponent<Text>();
|
||||
slope = transform.Find("Panel/MiniMap/Panel/Circle/slope").GetComponent<Text>();
|
||||
wave = transform.Find("Panel/MiniMap/Panel/Circle/wave");
|
||||
waveimage = wave.GetComponent<Image>();
|
||||
//FtpPanel
|
||||
ftpPanel = transform.Find("Panel/FtpPanel").gameObject;
|
||||
ftpImage = transform.Find("Panel/FtpPanel/ftp").GetComponent<Image>();
|
||||
wkg = transform.Find("Panel/FtpPanel/wkg").GetComponent<Text>();
|
||||
//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 事件注册
|
||||
UIManager.AddEvent(settingBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ShowSetting);
|
||||
UIManager.AddEvent(changeViewBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, ChangeViewClick);
|
||||
UIManager.AddEvent(deviceBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, DeviceClick);
|
||||
UIManager.AddEvent(quitBtn, UnityEngine.EventSystems.EventTriggerType.PointerClick, QuitClick);
|
||||
|
||||
}
|
||||
//设置坡度信息
|
||||
private void SetSlopePanel()
|
||||
{
|
||||
var normalizedSlope = (float)Math.Round(manager.CurrentPlayer.currentSlope, 1);
|
||||
slope.text = normalizedSlope > 0 ? "+"+normalizedSlope.ToString():normalizedSlope.ToString();
|
||||
var strength = 3;//增强旋转角度系数
|
||||
if (normalizedSlope > 10) {
|
||||
normalizedSlope = 10f;
|
||||
}
|
||||
if (normalizedSlope < -10) {
|
||||
normalizedSlope = -10f;
|
||||
}
|
||||
wave.DORotate(new Vector3(0f, 0f, normalizedSlope*strength),1f);
|
||||
SetWaveColor(normalizedSlope);
|
||||
}
|
||||
|
||||
private void SetWaveColor(double currentSlope)
|
||||
{
|
||||
if (currentSlope > 7)
|
||||
{
|
||||
waveimage.color = PFConstants.Red;
|
||||
}
|
||||
else if (currentSlope > 3)
|
||||
{
|
||||
waveimage.color = PFConstants.Orange;
|
||||
}
|
||||
else if (currentSlope > 0)
|
||||
{
|
||||
waveimage.color = PFConstants.Yellow;
|
||||
}
|
||||
else
|
||||
{
|
||||
waveimage.color = PFConstants.Green;
|
||||
}
|
||||
}
|
||||
|
||||
private void ShowSetting(BaseEventData e)
|
||||
{
|
||||
UIManager.ShowRideSettingPanel();
|
||||
}
|
||||
private void DeviceClick(BaseEventData e)
|
||||
{
|
||||
UIManager.Show(UIManager.Instance.DevicePanel, null, true);
|
||||
}
|
||||
|
||||
private void ChangeViewClick(BaseEventData e)
|
||||
{
|
||||
var nearByScript = FindObjectOfType<NearByScript>();
|
||||
var rankingScript = FindObjectOfType<RankingScript>();
|
||||
var arController = FindObjectOfType<ARTrainingController>();
|
||||
var cameraImage = changeViewBtn.transform.Find("Camera").gameObject;
|
||||
|
||||
manager._viewMode = manager._viewMode == ViewMode.THIRD ? ViewMode.FIRST : ViewMode.THIRD;
|
||||
if (manager._viewMode == ViewMode.FIRST)
|
||||
{
|
||||
ftpPanel.SetActive(manager._aRMode != ARMode.INSPECT);
|
||||
nearByScript.Hidehandler(null);
|
||||
rankingScript.Hidehandler(null);
|
||||
cameraImage.SetActive(true);
|
||||
arController.RiderCameraDistance = CameraDistance.FirstPerson;
|
||||
}
|
||||
else
|
||||
{
|
||||
ftpPanel.SetActive(false);
|
||||
nearByScript.Showhandler(null);
|
||||
rankingScript.Showhandler(null);
|
||||
cameraImage.SetActive(false);
|
||||
arController.RiderCameraDistance = CameraDistance.Middle;
|
||||
}
|
||||
}
|
||||
|
||||
public void ShowResultPanel()
|
||||
{
|
||||
resultPanel.SetActive(true);
|
||||
resultPanel.transform.SetAsLastSibling();
|
||||
var videoResultScript = resultPanel.GetComponent<VideoResultScript>();
|
||||
videoResultScript.InjectController(manager);
|
||||
videoResultScript.SetDataSource(manager.cyclingController.recorderData);
|
||||
}
|
||||
public void SaveAndShowResult()
|
||||
{
|
||||
if (manager._aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
SceneManager.LoadScene("MainScene");
|
||||
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)
|
||||
{
|
||||
var idMainRider = manager.CurrentPlayer != null && manager.CurrentPlayer.UserId == App.CurrentUser.Id;
|
||||
var shortDistance = idMainRider && (manager.CurrentPlayer.ticks == 0 || manager.cyclingController.recorderData.RiderDatas.Count == 0 || manager.CurrentPlayer.EndDistance - manager.CurrentPlayer.StartDistance < 0.1f);
|
||||
if (shortDistance)
|
||||
{
|
||||
UIManager.ShowConfirm(App.GetLocalString("Quit"), App.GetLocalString("Current ride distance too short to save."), () => {
|
||||
UIManager.CloseConfirm();
|
||||
SceneManager.LoadSceneAsync("MainScene");
|
||||
}, 2, () => { UIManager.CloseConfirm(); });
|
||||
return;
|
||||
}
|
||||
|
||||
if (manager._aRMode == VideoGameManager.ARMode.RIDE)
|
||||
{
|
||||
|
||||
UIManager.ShowConfirm(App.GetLocalString("Quit"), App.GetLocalString("Do you want to keep the record?"),
|
||||
() =>
|
||||
{
|
||||
SaveAndShowResult();
|
||||
UIManager.CloseConfirm();
|
||||
},
|
||||
2,
|
||||
() =>
|
||||
{
|
||||
UIManager.CloseConfirm();
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
UIManager.ShowConfirm(App.GetLocalString("Quit"), App.GetLocalString("Do you want to quit?"), () =>
|
||||
{
|
||||
UIManager.CloseConfirm();
|
||||
SceneManager.LoadSceneAsync("MainScene");
|
||||
},
|
||||
2,
|
||||
() =>
|
||||
{
|
||||
UIManager.CloseConfirm();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: deea375efff5f3d46a95e5b7b7165151
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,24 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
public class WatchPanelScript:MonoBehaviour
|
||||
{
|
||||
private VideoGameManager manager { get; set; }
|
||||
private Text userName { get; set; }
|
||||
private void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
userName = transform.Find("name").GetComponent<Text>();
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
userName.text = manager.CurrentPlayer?.UserName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee330a42f7b6a6f4391c18a98ef5f3c7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in new issue
Block a user