AR骑行动画&换装基本交互逻辑
This commit is contained in:
1 parent
d938a0c8be
commit
995aef63f8
117 files changed
+60802
-2718
No files matched your search
@@ -3,6 +3,7 @@ using Assets.Scripts.Apis.Models;
|
||||
using DG.Tweening;
|
||||
using Mapbox.Utils;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
@@ -44,9 +45,12 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
protected RaycastHit hit;
|
||||
float timer = 1f;
|
||||
protected bool start = true;
|
||||
|
||||
protected Sequence sequence;
|
||||
protected VideoGameManager manager { get; set; }
|
||||
Camera camera;
|
||||
float currenPlayerHeight;
|
||||
Transform bone_bottle_2 { get; set; }
|
||||
|
||||
protected virtual void Start()
|
||||
{
|
||||
@@ -63,6 +67,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
animator.Play("idle");
|
||||
}
|
||||
camera = Camera.main;
|
||||
//bone_bottle_2
|
||||
bone_bottle_2 = transform.Find("bone_cable_20");
|
||||
}
|
||||
|
||||
protected virtual void Update()
|
||||
@@ -70,13 +76,13 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
timer -= Time.deltaTime;
|
||||
ComputeAnimator();//控制动画
|
||||
CreateHeadImage();
|
||||
|
||||
while (timer <= 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
ComputeNextSlope();//计算下一个坡度
|
||||
ComputePlayer();//计算人物属性
|
||||
//animator.Play("touchHead");
|
||||
if (manager.IsStart())
|
||||
{
|
||||
ticks++;
|
||||
@@ -102,50 +108,26 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//人物碰撞
|
||||
void OnCollisionEnter(Collision collision)
|
||||
{
|
||||
//manager.GetSlotIndex();
|
||||
|
||||
}
|
||||
|
||||
void RayCastHit()
|
||||
{
|
||||
//获取player的position信息
|
||||
Vector3 pos = transform.position;
|
||||
//射线碰撞物信息接收
|
||||
|
||||
//第二种写法
|
||||
//我们可以先创建出一条射线
|
||||
Ray ray = new Ray(pos, new Vector3(0, 0, 1));
|
||||
//然后用这条射线去做射线检测
|
||||
//射线,输出碰撞体信息,射线长度,射线在那一层检测,射线不忽略开启触发器(istrigger)的碰撞体
|
||||
isHit = Physics.Raycast(ray, out hit, 1f, 1 << 0, QueryTriggerInteraction.Collide);
|
||||
if (isHit)
|
||||
{
|
||||
print(hit.collider.name);
|
||||
}
|
||||
}
|
||||
protected void ComputeRandom()
|
||||
{
|
||||
var offset = 30;
|
||||
if (ticks % 6 == 0)
|
||||
transform.DOMoveZ(transform.position.z - 1.1f*offset, 1f);
|
||||
if (ticks % 5 == 0)
|
||||
transform.DOMoveZ(transform.position.z + offset, 2f);
|
||||
|
||||
//人物的rotation y
|
||||
transform.DOLocalRotate(new Vector3(0f, bearing, 0f), 1f);
|
||||
}
|
||||
//动画状态机
|
||||
protected virtual void ComputeAnimator()
|
||||
{
|
||||
if (animator != null)
|
||||
{
|
||||
|
||||
animator.SetFloat("preSpeed", (float)preSpeed);
|
||||
animator.SetFloat("speed", (float)speed);
|
||||
animator.SetFloat("grade", (float)currentSlope);
|
||||
animator.SetFloat("power", (float)power);
|
||||
var headBack = ticks % 10 == 0 && speed > 0 && bearing == 0;
|
||||
var drink = ticks % 15 == 0 && speed > 0 && bearing == 0;
|
||||
animator.SetBool("headBack", headBack);
|
||||
animator.SetBool("drinking", drink);
|
||||
}
|
||||
}
|
||||
protected virtual int GetCurrentFrame()
|
||||
@@ -153,9 +135,9 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
return manager.GetCurrentFrame();
|
||||
}
|
||||
private bool animated = false;
|
||||
//大转弯是60度
|
||||
private int offset = 0;
|
||||
protected virtual void Turn()
|
||||
private float offset = 0;
|
||||
//控制角色进行向左或向右
|
||||
protected virtual void Turn()
|
||||
{
|
||||
var currentFrame = GetCurrentFrame();
|
||||
var result = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
|
||||
@@ -163,36 +145,55 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
bearing = result.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
bearing = 0;
|
||||
}
|
||||
animator.SetFloat("bearing", bearing);
|
||||
if (Math.Abs(bearing) > 50)
|
||||
var headBack = ticks % 60 == 0 && speed > 0 && bearing == 0;
|
||||
var drink = ticks % 125 == 0 && speed > 0 && bearing == 0;
|
||||
animator.SetBool("headBack", headBack);
|
||||
animator.SetBool("drinking", drink);
|
||||
|
||||
var waiting = ratio == 0 ? 1 : 1 / ratio;
|
||||
if (Math.Abs(bearing) > 30)
|
||||
{
|
||||
if (!animated)
|
||||
{
|
||||
animated = true;
|
||||
transform.DOMoveX(transform.position.x + 3, 1).onComplete += () =>
|
||||
var tween = transform.DORotate(new Vector3(0, bearing, -bearing/5), waiting);
|
||||
tween.onComplete += () =>
|
||||
{
|
||||
offset = -3;
|
||||
var zoffset = bearing / 10.5f;
|
||||
var doMoveX = transform.DOMoveX(transform.position.x + zoffset, waiting);
|
||||
doMoveX.onComplete += () =>
|
||||
{
|
||||
offset = -zoffset;
|
||||
};
|
||||
};
|
||||
print(176);
|
||||
tween.SetEase(Ease.InOutSine).SetLoops(2, LoopType.Incremental);
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
if (offset != 0)
|
||||
{
|
||||
transform.DOMoveX(transform.position.x + offset, 1f).onComplete += () =>
|
||||
var cpoffset = offset;
|
||||
transform.DORotate(new Vector3(0, bearing, 0), 1.2f * waiting).onComplete += () =>
|
||||
{
|
||||
animated = false;
|
||||
transform.DOMoveX(transform.position.x + cpoffset, 1.2f * waiting).onComplete += () =>
|
||||
{
|
||||
animated = false;
|
||||
};
|
||||
};
|
||||
offset = 0;
|
||||
}
|
||||
}
|
||||
transform.DORotate(new Vector3(0, bearing, 0), 1f);
|
||||
//var aniInfo = animator.GetCurrentAnimatorStateInfo(0);
|
||||
//if (aniInfo.loop)
|
||||
//{
|
||||
else
|
||||
{
|
||||
transform.DORotate(new Vector3(0, bearing, -bearing), waiting);
|
||||
}
|
||||
|
||||
//}
|
||||
}
|
||||
}
|
||||
//计算人物当前属性
|
||||
protected virtual void ComputePlayer()
|
||||
@@ -226,17 +227,35 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
distance = Math.Round(speed / 3600, 5, MidpointRounding.AwayFromZero);
|
||||
totalDistance += distance;
|
||||
currentlatLon = manager.Along(totalDistance % mapData.TotalDistance);
|
||||
////根据人物速度设置人物距离摄像头远近
|
||||
//if (speed > 20 && speed < 30)
|
||||
//{
|
||||
// transform.DOMoveZ(3, 1f);
|
||||
//}
|
||||
//else if (speed > 30 && speed < 40)
|
||||
//{
|
||||
// transform.DOMoveZ(3.5f, 1f);
|
||||
//}
|
||||
//else if (speed > 40)
|
||||
//{
|
||||
// transform.DOMoveZ(4, 1f);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// transform.DOMoveZ(3, 1f);
|
||||
//}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.LogError(e);
|
||||
}
|
||||
}
|
||||
protected float ratio = 1;
|
||||
|
||||
protected virtual void ComputeVideo()
|
||||
{
|
||||
mapData = manager.GetMapData();
|
||||
float ratio = 1;
|
||||
|
||||
if (currentIndex + 1 < mapData.List.Count)
|
||||
{
|
||||
ratio = (float)(speed / mapData.List[currentIndex + 1].Speed);
|
||||
@@ -247,8 +266,22 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
if (manager.CurrentPlayer != null && manager.CurrentPlayer.UserId != UserId)
|
||||
return;
|
||||
|
||||
if (ratio > 1)
|
||||
{
|
||||
ratio = Math.Min(ratio, 1.2f);
|
||||
}
|
||||
if (ratio < 1)
|
||||
{
|
||||
ratio = Math.Max(ratio, 0.6f);
|
||||
}
|
||||
var info = animator.GetCurrentAnimatorClipInfo(0);
|
||||
var currentClip = info.FirstOrDefault();
|
||||
if (currentClip.clip != null && currentClip.clip.isLooping)
|
||||
{
|
||||
animator.speed = ratio;
|
||||
}
|
||||
manager.Play(ratio);
|
||||
|
||||
}
|
||||
|
||||
protected virtual void ComputeRecord() { }
|
||||
@@ -318,7 +351,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
if (head != null)
|
||||
{
|
||||
//它们的乘积就是高度
|
||||
Vector3 worldPosition = new Vector3(transform.position.x, transform.position.y+1.5f, transform.position.z);
|
||||
Vector3 worldPosition = new Vector3(bone_bottle_2.position.x, bone_bottle_2.position.y+0.8f, bone_bottle_2.position.z);
|
||||
var playerScreenPos = Camera.main.WorldToScreenPoint(worldPosition);
|
||||
head.transform.position = playerScreenPos;
|
||||
ftpImage.fillAmount = (float)(wkg / 6);
|
||||
|
||||
@@ -67,15 +67,26 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
var players = manager.cyclingController.riders;
|
||||
var headList = FindObjectsOfType<HeadScript>();
|
||||
var videoPlayer = manager.CurrentPlayer;
|
||||
foreach (var item in players)
|
||||
{
|
||||
BarChart barChart = GetComponent<BarChart>();
|
||||
Vector3 vector3 = Vector3.back;
|
||||
var currentIndex = Math.Round(item.EndDistance / manager.mapRoute.Distance * manager.GetMapData().List.Count);
|
||||
var distance = item.EndDistance % manager.mapRoute.Distance;
|
||||
|
||||
var currentIndex = Math.Round(distance / manager.mapRoute.Distance * manager.GetMapData().List.Count);
|
||||
barChart.GetBarTrackPosition($"Player {currentIndex}", "Group 1", out vector3);
|
||||
|
||||
var currentHead = headList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
||||
|
||||
if (videoPlayer != null)
|
||||
{
|
||||
var diff = distance - videoPlayer.totalDistance % manager.mapRoute.Distance;
|
||||
if (diff < 0)
|
||||
{
|
||||
vector3.y = -800f;
|
||||
}
|
||||
}
|
||||
if (currentHead == null)
|
||||
{
|
||||
var onlineHead = Instantiate(headPanel, transform);
|
||||
@@ -87,6 +98,18 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
currentHead.transform.position = vector3;
|
||||
}
|
||||
}
|
||||
//删除离线的人
|
||||
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)
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
private void Update()
|
||||
{
|
||||
flag += Time.deltaTime;
|
||||
if (flag >= 1f)
|
||||
if (flag >= 0.5f)
|
||||
{
|
||||
alph -= Time.deltaTime;
|
||||
if (alph <= 0)
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
||||
trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
||||
}
|
||||
float timer = 0;
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (cyclingCotroller.CurrentPlayer != null)
|
||||
@@ -70,42 +70,8 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
((RectTransform)tr.transform).anchoredPosition = new Vector2((vp2.x * RectRoot.sizeDelta.x) - (RectRoot.sizeDelta.x * 0.5f), (vp2.y * RectRoot.sizeDelta.y) - (RectRoot.sizeDelta.y * 0.5f));
|
||||
trail.enabled = cyclingCotroller.CurrentPlayer.power > 0;
|
||||
}
|
||||
timer += Time.deltaTime;
|
||||
|
||||
while (timer >= 1)
|
||||
{
|
||||
//CreateMiniPath();
|
||||
timer = 0;
|
||||
}
|
||||
}
|
||||
void CreateMiniPath()
|
||||
{
|
||||
if (cyclingCotroller.CurrentPlayer == null)
|
||||
return;
|
||||
var dat = new List<Vector3>();
|
||||
var mapData = cyclingCotroller.GetMapData();
|
||||
if (mapData != null)
|
||||
{
|
||||
var count = mapData.List.Count;
|
||||
var interval = Math.Max(Math.Ceiling(count / 100D), 1f);
|
||||
for (int i = 0; i < mapData.List.Count; i++)
|
||||
{
|
||||
if (i % interval == 0)
|
||||
{
|
||||
var point = mapData.List[i].Point;
|
||||
Vector3 item = _map.GeoToWorldPosition(new Vector2d(point[0], point[1]));
|
||||
item.y += 5f;
|
||||
if (cyclingCotroller.CurrentPlayer.currentIndex >= i)
|
||||
{
|
||||
dat.Add(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
var feat = new VectorFeatureUnity();
|
||||
feat.Points.Add(dat);
|
||||
CreateRedLineRender(feat);//创建小地图路线
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool init = false;
|
||||
private void _map_OnInitialized()
|
||||
|
||||
@@ -28,7 +28,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
private void Start()
|
||||
{
|
||||
manager = FindObjectOfType<VideoGameManager>();
|
||||
GetComponent<Button>().onClick.AddListener(ButtonListener);
|
||||
if (manager._aRMode == VideoGameManager.ARMode.INSPECT)
|
||||
{
|
||||
GetComponent<Button>().onClick.AddListener(ButtonListener);
|
||||
}
|
||||
}
|
||||
private float timer = 1f;
|
||||
private void Update()
|
||||
|
||||
@@ -47,18 +47,18 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
if (_contactList != null) _contactList.Clear();
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);
|
||||
int index = 0;
|
||||
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 = DateTime.Now.Millisecond.ToString();
|
||||
obj.Gender = "";
|
||||
obj.id = item.Id.ToString();
|
||||
_contactList.Add(obj);
|
||||
}
|
||||
}
|
||||
float timer = 0.5f;
|
||||
float timer = 1f;
|
||||
private void Update()
|
||||
{
|
||||
timer -= Time.deltaTime;
|
||||
@@ -67,27 +67,11 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
if (manager.CurrentPlayer == null)
|
||||
return;
|
||||
var totalDitance = manager.GetMapData().TotalDistance;
|
||||
var currentDistance = manager.CurrentPlayer.totalDistance % totalDitance;
|
||||
var currentDistance = manager.CurrentPlayer.totalDistance;
|
||||
|
||||
var currenList = FindObjectsOfType<ListItem>();//当前列表
|
||||
var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
foreach (ListItem o in currenList)
|
||||
{
|
||||
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,diff.ToString("f0")+"M", needUpdate.Id.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
o.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
list = list.Where(c => c.Id != App.CurrentUser.Id).ToList();
|
||||
if (currenList.Count() == 0 && list.Count() > 0)
|
||||
{
|
||||
InitData();
|
||||
@@ -96,7 +80,28 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
_recyclableScrollRect.ReloadData();
|
||||
}
|
||||
}
|
||||
timer += 0.5f;
|
||||
//var currenList = FindObjectsOfType<ListItem>();//当前列表
|
||||
//var list = MapUDPService.GetOnlineUsers(App.RouteIdParam);//最新列表
|
||||
var currentPlayer = FindObjectOfType<VideoPlayer>();
|
||||
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)
|
||||
{
|
||||
var left = Math.Round((needUpdate.EndDistance - manager.CurrentPlayer.totalDistance) * 1000);
|
||||
//var right = (needUpdate.EndDistance % totalDitance - totalDitance - currentDistance) * 1000;
|
||||
//var diff = Math.Abs(left) > Math.Abs(right) ? right : left;
|
||||
o.UpdateItem(needUpdate.Name, left.ToString() + "M", needUpdate.Id.ToString());
|
||||
//o.gameObject.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
//o.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
timer +=1f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -20,70 +20,73 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//计算
|
||||
protected override void ComputePlayer()
|
||||
{
|
||||
base.ComputePlayer();
|
||||
var current = manager.CurrentPlayer;
|
||||
if (current != null && current.UserId != UserId)
|
||||
{
|
||||
var left = totalDistance % mapData.TotalDistance;
|
||||
var right = current.totalDistance % mapData.TotalDistance;
|
||||
diff = (left - right) * 1000;
|
||||
if (Math.Abs(diff) > 200)
|
||||
if (Math.Abs(diff) > 50)
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
var z = current.transform.position.z + diff * 0.1;
|
||||
transform.DOMoveZ((float)z, 1f);
|
||||
//Push();
|
||||
}
|
||||
}
|
||||
//人物向前超车 右边超车
|
||||
private void Push()
|
||||
protected override void Turn()
|
||||
{
|
||||
try
|
||||
{
|
||||
var offsetX = 1f;
|
||||
var currentPlayer = FindObjectOfType<VideoPlayer>();
|
||||
//根据差距动态位移
|
||||
var current = currentPlayer.transform.position;
|
||||
var x = current.x + offsetX;
|
||||
var z = current.z + diff;
|
||||
var y = current.y;
|
||||
var end = new Vector3(x, y, (float)z);
|
||||
//前方有人
|
||||
if (isHit)
|
||||
{
|
||||
var onlinePlayer = hit.collider.transform.GetComponent<AbstractVideoPlayer>();
|
||||
if (distance - onlinePlayer.distance > 20)
|
||||
{
|
||||
var prePos = onlinePlayer.transform.position;
|
||||
var disx = prePos.x + offsetX;
|
||||
var disz = prePos.z + diff;
|
||||
var disy = prePos.y;
|
||||
end = new Vector3(disx, (float)disz, disy);
|
||||
animator.Play("turnRight");
|
||||
transform.DOMove(end, 1f);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
transform.DOMoveZ((float)z, 1f);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
print(e.Message);
|
||||
}
|
||||
base.Turn();
|
||||
var current = manager.CurrentPlayer;
|
||||
var z = current.transform.position.z + diff * 0.5f;
|
||||
transform.DOMoveZ((float)z, 1f);
|
||||
//x轴位移
|
||||
|
||||
//z轴位移
|
||||
|
||||
//人物转向
|
||||
|
||||
|
||||
//try
|
||||
//{
|
||||
// var offsetX = 1f;
|
||||
// var current = manager.CurrentPlayer;
|
||||
// var z = current.transform.position.z + diff * 0.5f;
|
||||
// //前方有人
|
||||
// if (isHit)
|
||||
// {
|
||||
// var onlinePlayer = hit.collider.transform.GetComponent<AbstractVideoPlayer>();
|
||||
// if (distance - onlinePlayer.distance > 20)
|
||||
// {
|
||||
// var prePos = onlinePlayer.transform.position;
|
||||
// var disx = prePos.x + offsetX;
|
||||
// var disz = prePos.z + diff;
|
||||
// var disy = prePos.y;
|
||||
// var end = new Vector3(disx, (float)disz, disy);
|
||||
// animator.Play("turnRight");
|
||||
// transform.DOMove(end, 1f);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// transform.DOMoveZ((float)z, 1f);
|
||||
// }
|
||||
//}
|
||||
//catch (Exception e) {
|
||||
// print(e.Message);
|
||||
//}
|
||||
}
|
||||
protected override void ComputeAnimator()
|
||||
{
|
||||
base.ComputeAnimator();
|
||||
if (manager.CurrentPlayer == null || manager.CurrentPlayer.UserId != UserId)
|
||||
{
|
||||
var currentFrame = manager.GetFrameOffSet(diff);
|
||||
//var currentFrame = manager.GetFrameOffSet(diff);
|
||||
var mainFrame = manager.GetCurrentFrame();
|
||||
var min = Math.Min(currentFrame, mainFrame);
|
||||
var max = Math.Max(currentFrame, mainFrame);
|
||||
frames = currentFrame;
|
||||
var result = manager.mockDirection.Where(c => c.Start < min && c.End > max).FirstOrDefault();
|
||||
var currentFrame = mainFrame + diff * 10;
|
||||
//var min = Math.Min(currentFrame, mainFrame);
|
||||
//var max = Math.Max(currentFrame, mainFrame);
|
||||
frames = (int)currentFrame;
|
||||
var result = manager.mockDirection.Where(c => c.Start < frames && c.End > frames).FirstOrDefault();
|
||||
bearing = result?.Value ?? 0;
|
||||
animator.SetFloat("bearing", bearing);
|
||||
}
|
||||
@@ -97,7 +100,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
protected override int GetCurrentFrame()
|
||||
{
|
||||
return manager.DistanceToFrames(diff) + manager.GetCurrentFrame();
|
||||
return (int)(diff * 10) + manager.GetCurrentFrame();
|
||||
}
|
||||
protected override void ComputeVideo()
|
||||
{
|
||||
@@ -105,15 +108,16 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
}
|
||||
|
||||
//设置当前玩家属性
|
||||
public void SetPlayer(string name,double totalDistance, double cadance,double heartRate, double wkg, int userId)
|
||||
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power)
|
||||
{
|
||||
this.wkg = 2.3d;
|
||||
this.wkg = wkg;
|
||||
this.UserName = name;
|
||||
this.cadance = cadance;
|
||||
this.totalDistance = totalDistance;
|
||||
this.heartRate = (int?)heartRate;
|
||||
this.UserId = userId;
|
||||
this.power = 200;
|
||||
this.power = power;
|
||||
this.speed = distance * 3600;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,9 +152,10 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
var currentPlayer = list.FirstOrDefault();
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(currentPlayer.NickName, currentPlayer.EndDistance, currentPlayer.Cadence, currentPlayer.HeartRate, currentPlayer.TotalTicks, currentPlayer.UserId);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, onlineRider.TotalTicks, onlineRider.UserId, onlineRider.Power);
|
||||
obj.transform.DOMoveX(0, 1);
|
||||
ChangePlayer(currentPlayer.UserId);
|
||||
CurrentPlayer = online;
|
||||
@@ -184,16 +185,17 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
if (exsit != null)
|
||||
{
|
||||
var online = exsit.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(onlineRider.NickName,onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId);
|
||||
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power);
|
||||
}
|
||||
else
|
||||
{
|
||||
var diff = item.EndDistance % mapData.TotalDistance - CurrentPlayer.totalDistance % mapData.TotalDistance;
|
||||
if (Math.Abs(diff*1000) < 200)
|
||||
if (Math.Abs(diff*1000) <= 50)
|
||||
{
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance - onlineRider.PreDistance, onlineRider.EndDistance, item.Cadence, item.HeartRate, onlineRider.WeightKg, item.UserId, onlineRider.Power);
|
||||
obj.transform.DOMoveX(slots[currentOnlineCount], 1);
|
||||
currentOnlineCount++;
|
||||
}
|
||||
@@ -237,12 +239,13 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
else
|
||||
{
|
||||
var onlineRiders = cyclingController.riders;
|
||||
var onlineRider = onlineRiders.Where(c => c.UserId == userId).FirstOrDefault();
|
||||
if (onlineRider != null)
|
||||
var currentPlayer = onlineRiders.Where(c => c.UserId == userId).FirstOrDefault();
|
||||
if (currentPlayer != null)
|
||||
{
|
||||
var onlineRider = currentPlayer as OnlineRiderModel;
|
||||
var obj = Instantiate(OnlinePlayer, transform);
|
||||
var online = obj.GetComponent<OnlineVideoPlayer>();
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId);
|
||||
online.SetPlayer(onlineRider.NickName, onlineRider.EndDistance-onlineRider.PreDistance, onlineRider.EndDistance, onlineRider.Cadence, onlineRider.HeartRate, 0, onlineRider.UserId, onlineRider.Power);
|
||||
obj.transform.position = origin;
|
||||
CurrentPlayer = online;
|
||||
var currentFrames = DistanceToFrames(CurrentPlayer.totalDistance);
|
||||
@@ -462,10 +465,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
cyclingController.recorderData.LastFrame = GetCurrentFrame();
|
||||
RankingId = cyclingController.recorderData.SaveWithLocalRecordAysnc(cyclingModel, selectParamModel, imageFileName, recordId, path);
|
||||
}
|
||||
public void GetUIPanel()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void AddEvent(GameObject sender, EventTriggerType eventType, UnityAction<BaseEventData> unityAction)
|
||||
{
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
{
|
||||
base.Start();
|
||||
animator.Play("idle");
|
||||
power = 200;;
|
||||
UserId = App.CurrentUser.Id;
|
||||
UserName = App.CurrentUser.Nickname;
|
||||
}
|
||||
@@ -51,7 +50,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
power = manager.UpdatePower();
|
||||
cadance = manager.UpdateCadence();
|
||||
#if UNITY_EDITOR
|
||||
power = 350;
|
||||
power = 0;
|
||||
cadance = 150;
|
||||
heartRate = 160;
|
||||
#endif
|
||||
@@ -79,7 +78,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
Ticks = ticks,
|
||||
_Power = power,
|
||||
_Speed = speed,
|
||||
_Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
|
||||
_Distance = totalDistance,//totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
|
||||
_Cadence = cadance,
|
||||
_HeartRate = heartRate,
|
||||
_Lat = currentlatLon.x,
|
||||
|
||||
@@ -85,7 +85,7 @@ namespace Assets.Scripts.Scenes.VideoRide
|
||||
//ftp
|
||||
ftpImage.fillAmount = (float)(manager.CurrentPlayer.wkg / MAXWKG);
|
||||
wkg.text = $"{manager.CurrentPlayer.wkg}w/kg";
|
||||
explosive.SetActive(manager.CurrentPlayer.power > 600);
|
||||
explosive.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user