多人动画位移计算和动画帧数偏差公式调整
This commit is contained in:
parent
efdc95ed3d
commit
d938a0c8be
File diff suppressed because it is too large
Load Diff
@ -167,9 +167,9 @@ namespace Assets.Scripts.Apis
|
||||
return await PostAsync<JsonResult<object>>("/MapRecord/Delete", new { id });
|
||||
}
|
||||
|
||||
public JsonResult<MapRouteRankingList> GetRouteRanking(int id,string type, int pageIndex,int pageSize,string name)
|
||||
public JsonResult<MapRouteRankingList> GetRouteRanking(int id,string type, int pageIndex,int pageSize,string name,DateTime? startTime=null,DateTime? endTime = null)
|
||||
{
|
||||
var url = $"Map/v1/GetRouteRanking?pageIndex={ pageIndex }&pageSize={ pageSize }&name={ name }&id={ id }&type={ type }&filterSelf={ false }";
|
||||
var url = $"Map/v1/GetRouteRanking?pageIndex={ pageIndex }&pageSize={ pageSize }&name={ name }&id={ id }&type={ type }&filterSelf={ false }&startTime={ startTime }&endTime={ endTime }";
|
||||
|
||||
return Get<JsonResult<MapRouteRankingList>>(url);
|
||||
}
|
||||
|
||||
@ -445,5 +445,33 @@ namespace Assets.Scenes.Ride.Scripts
|
||||
var url = $"https://api.mapbox.com/styles/v1/juzetest/ckmkdjwsa1nvt17nr1ps4fqgs/static/path-4+fff-1({encodeline})/auto/1280x768?access_token={App.MapBoxAccessToken}&padding=200&pitch=30";
|
||||
return url;
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取日 周 月第一天
|
||||
/// </summary>
|
||||
/// <param name="now">截止日期</param>
|
||||
/// <param name="type">日:day周:week月:month</param>
|
||||
/// <returns></returns>
|
||||
public static DateTime GetStartTime(DateTime now,string type = "month")
|
||||
{
|
||||
//日
|
||||
DateTime startTime = new DateTime(now.Year,now.Month,now.Day);
|
||||
if (type.Equals("week"))
|
||||
{
|
||||
//周
|
||||
var week = now.DayOfWeek;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
startTime = now.AddDays(-i);
|
||||
if (startTime.DayOfWeek != week)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (type.Equals("month"))
|
||||
{
|
||||
//月
|
||||
startTime = new DateTime(now.Year, now.Month, 1);
|
||||
}
|
||||
return startTime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -33,11 +33,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//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()
|
||||
@ -61,6 +64,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
timer -= Time.deltaTime;
|
||||
while (timer < 0)
|
||||
{
|
||||
if (manager.CurrentPlayer == null)
|
||||
return;
|
||||
var totalDitance = manager.GetMapData().TotalDistance;
|
||||
var currentDistance = manager.CurrentPlayer.totalDistance % totalDitance;
|
||||
|
||||
var currenList = FindObjectsOfType<ListItem>();//当前列表
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
foreach (ListItem o in currenList)
|
||||
@ -68,8 +76,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var needUpdate = list.Where(c => c.Id.ToString() == o.Id).FirstOrDefault();
|
||||
if (needUpdate != null)
|
||||
{
|
||||
var left = (needUpdate.EndDistance % totalDitance - currentDistance) * 1000;
|
||||
var right = (needUpdate.EndDistance % totalDitance - totalDitance - currentDistance) * 1000;
|
||||
var diff = Math.Abs(left) > Math.Abs(right) ? right : left;
|
||||
o.gameObject.SetActive(true);
|
||||
o.UpdateItem(needUpdate.Name, needUpdate.LastActiveTime.ToShortTimeString(), needUpdate.Id.ToString());
|
||||
o.UpdateItem(needUpdate.Name,diff.ToString("f0")+"M", needUpdate.Id.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -11,6 +11,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
public class OnlineVideoPlayer : AbstractVideoPlayer
|
||||
{
|
||||
public double diff;
|
||||
public int frames;
|
||||
protected override void Update()
|
||||
{
|
||||
base.Update();
|
||||
@ -26,13 +27,13 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var left = totalDistance % mapData.TotalDistance;
|
||||
var right = current.totalDistance % mapData.TotalDistance;
|
||||
diff = (left - right) * 1000;
|
||||
if (Math.Abs(diff) > 100)
|
||||
if (Math.Abs(diff) > 200)
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
var z = current.transform.position.z + diff * 0.5;
|
||||
var z = current.transform.position.z + diff * 0.1;
|
||||
transform.DOMoveZ((float)z, 1f);
|
||||
Push();
|
||||
//Push();
|
||||
}
|
||||
}
|
||||
//人物向前超车 右边超车
|
||||
@ -81,7 +82,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var mainFrame = manager.GetCurrentFrame();
|
||||
var min = Math.Min(currentFrame, mainFrame);
|
||||
var max = Math.Max(currentFrame, mainFrame);
|
||||
var result = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
|
||||
frames = currentFrame;
|
||||
var result = manager.mockDirection.Where(c => c.Start < min && c.End > max).FirstOrDefault();
|
||||
bearing = result?.Value ?? 0;
|
||||
animator.SetFloat("bearing", bearing);
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
using DG.Tweening;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
@ -13,27 +14,48 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
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>();
|
||||
UIManager.AddEvent(Hide, UnityEngine.EventSystems.EventTriggerType.PointerClick, Hidehandler);
|
||||
UIManager.AddEvent(Show, UnityEngine.EventSystems.EventTriggerType.PointerClick, Showhandler);
|
||||
Init();
|
||||
UIManager.AddEvent(Month, UnityEngine.EventSystems.EventTriggerType.PointerClick, MonthClick);
|
||||
UIManager.AddEvent(Week, UnityEngine.EventSystems.EventTriggerType.PointerClick, WeekClick);
|
||||
UIManager.AddEvent(Day, UnityEngine.EventSystems.EventTriggerType.PointerClick, DayClick);
|
||||
Container = transform.Find("List/Viewport/Content");
|
||||
Month.GetComponent<Text>();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
private void Init()
|
||||
private void Refresh(string type = "month")
|
||||
{
|
||||
var list = manager.GetRankingList();
|
||||
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, transform.Find("List/Viewport/Content"));
|
||||
GameObject newObj = (GameObject)Instantiate(prefab, Container);
|
||||
var itemScript = newObj.GetComponent<RankingItemScript>();
|
||||
itemScript.SetName(item.NickName);
|
||||
var texture = manager.GetCountryImageByCode(item.CountryCode);
|
||||
@ -64,5 +86,26 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -17,6 +17,7 @@ using DG.Tweening;
|
||||
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
||||
using UnityEngine.EventSystems;
|
||||
using UnityEngine.Events;
|
||||
using Helper = Assets.Scenes.Ride.Scripts.Helper;
|
||||
|
||||
namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
@ -63,13 +64,14 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
base.Awake();
|
||||
#if UNITY_EDITOR
|
||||
App.RouteIdParam = 12353;
|
||||
#endif
|
||||
mediaPlayer = FindObjectOfType<MediaPlayer>();
|
||||
//自动登录
|
||||
if (App.CurrentUser == null)
|
||||
{
|
||||
Login();
|
||||
UIManager.InitNow();//重置当前时间
|
||||
}
|
||||
#endif
|
||||
mediaPlayer = FindObjectOfType<MediaPlayer>();
|
||||
DeviceCache.Init(PFConstants.DeviceCacheFolder);
|
||||
var check = CheckAnt();//初始化蓝牙设备
|
||||
recordId = Guid.NewGuid().ToString();
|
||||
@ -80,7 +82,9 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
void Start()
|
||||
{
|
||||
InitSlots();
|
||||
startTime = DateTime.Now;//UIManager.Now.GetDateTime();
|
||||
|
||||
UIManager.Instance.MainPanel = GetCanvasTransform().GetComponent<PFUIPanel>();
|
||||
UIManager.Instance.ModalsPanel = this.transform.Find("Canvas/ModalPanel").GetComponent<PFUIPanel>();
|
||||
var routeId = App.RouteIdParam;
|
||||
//获取路书
|
||||
GetMapRoute();
|
||||
@ -127,11 +131,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
}
|
||||
MapRouteRankingList rankingList;
|
||||
public MapRouteRankingList GetRankingList()
|
||||
public MapRouteRankingList GetRankingList(string type = "month")
|
||||
{
|
||||
if (rankingList != null)
|
||||
return rankingList;
|
||||
var list = ConfigHelper.mapApi.GetRouteRanking(App.RouteIdParam, "1", 0, 10, "");
|
||||
var endTime = UIManager.Now.GetDateTime();
|
||||
var startTime = Helper.GetStartTime(endTime, type);
|
||||
var list = ConfigHelper.mapApi.GetRouteRanking(App.RouteIdParam, "1", 0, 10, "", startTime,endTime);
|
||||
if (list.result)
|
||||
{
|
||||
rankingList = list.data;
|
||||
@ -185,7 +189,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
else
|
||||
{
|
||||
var diff = item.EndDistance % mapData.TotalDistance - CurrentPlayer.totalDistance % mapData.TotalDistance;
|
||||
if (Math.Abs(diff*1000) < 100)
|
||||
if (Math.Abs(diff*1000) < 200)
|
||||
{
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
@ -306,6 +310,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//设置骑行模式
|
||||
public void SetCyclingModel(CyclingModel mode)
|
||||
{
|
||||
startTime = UIManager.Now.GetDateTime();
|
||||
this.cyclingModel = mode;
|
||||
switch (cyclingModel)
|
||||
{
|
||||
@ -406,6 +411,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var currentFrame = GetCurrentFrame();
|
||||
var frames = mediaPlayer.Info.GetMaxFrameNumber(); //视频打开后生效
|
||||
var TotalDistance = route?.TotalDistance ?? 0;
|
||||
TotalDistance *= 1000;
|
||||
distance %= TotalDistance;
|
||||
var offset = TotalDistance > 0 ? Convert.ToInt32(frames / TotalDistance * distance) : 0;
|
||||
return currentFrame + offset;
|
||||
|
||||
@ -51,7 +51,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
power = manager.UpdatePower();
|
||||
cadance = manager.UpdateCadence();
|
||||
#if UNITY_EDITOR
|
||||
power = 1200;
|
||||
power = 350;
|
||||
cadance = 150;
|
||||
heartRate = 160;
|
||||
#endif
|
||||
|
||||
@ -68,6 +68,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
|
||||
mapName.text = manager.GetMapRoute().Name;
|
||||
infoText.text = $"帧数:{manager.GetCurrentFrame()}";
|
||||
if (manager.CurrentPlayer != null)
|
||||
@ -147,7 +148,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
private void SetSlopePanel()
|
||||
{
|
||||
var normalizedSlope = (float)Math.Round(manager.CurrentPlayer.currentSlope, 1);
|
||||
slope.text = normalizedSlope.ToString();
|
||||
slope.text = normalizedSlope > 0 ? "+"+normalizedSlope.ToString():normalizedSlope.ToString();
|
||||
var strength = 3;//增强旋转角度系数
|
||||
if (normalizedSlope > 10) {
|
||||
normalizedSlope = 10f;
|
||||
@ -198,8 +199,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var cameraImage = changeViewBtn.transform.Find("Camera").gameObject;
|
||||
if (_viewMode == ViewMode.FIRST)
|
||||
{
|
||||
currentPlayer.DOMoveZ(-0.1f, 0f);
|
||||
currentPlayer.DOMoveY(-1.1f, 0f);
|
||||
currentPlayer.DOMoveZ(-0.09f, 0f);
|
||||
currentPlayer.DOMoveY(-0.85f, 0f);
|
||||
ftpPanel.SetActive(true);
|
||||
nearByScript.Hidehandler(null);
|
||||
rankingScript.Hidehandler(null);
|
||||
|
||||
@ -23,7 +23,8 @@ namespace Assets.Scripts.UI.Control
|
||||
Normal,
|
||||
Border,
|
||||
Primary,
|
||||
Image
|
||||
Image,
|
||||
Transparent
|
||||
}
|
||||
|
||||
[SerializeField] Type mType;
|
||||
@ -121,6 +122,11 @@ namespace Assets.Scripts.UI.Control
|
||||
image.color = ConvertColor("#F93086");
|
||||
}
|
||||
break;
|
||||
case Type.Transparent:
|
||||
{
|
||||
image.color = Color.clear;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user