2022-03-10 18:32:53 +08:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using DG.Tweening;
|
2022-03-24 09:36:59 +08:00
|
|
|
|
using UnityEngine;
|
2022-03-10 18:32:53 +08:00
|
|
|
|
|
|
|
|
|
|
namespace Assets.Scripts.Scenes.VideoRide
|
|
|
|
|
|
{
|
|
|
|
|
|
public class OnlineVideoPlayer : AbstractVideoPlayer
|
|
|
|
|
|
{
|
2022-04-02 18:26:18 +08:00
|
|
|
|
public double diff;
|
2022-04-06 19:27:45 +08:00
|
|
|
|
public int frames;
|
2022-03-24 09:36:59 +08:00
|
|
|
|
protected override void Update()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Update();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2022-03-10 18:32:53 +08:00
|
|
|
|
//计算
|
|
|
|
|
|
protected override void ComputePlayer()
|
|
|
|
|
|
{
|
2022-03-29 18:41:32 +08:00
|
|
|
|
base.ComputePlayer();
|
|
|
|
|
|
var current = manager.CurrentPlayer;
|
2022-03-31 18:40:19 +08:00
|
|
|
|
if (current != null && current.UserId != UserId)
|
2022-03-29 18:41:32 +08:00
|
|
|
|
{
|
2022-03-31 18:40:19 +08:00
|
|
|
|
var left = totalDistance % mapData.TotalDistance;
|
|
|
|
|
|
var right = current.totalDistance % mapData.TotalDistance;
|
|
|
|
|
|
diff = (left - right) * 1000;
|
2022-04-06 19:27:45 +08:00
|
|
|
|
if (Math.Abs(diff) > 200)
|
2022-03-31 18:40:19 +08:00
|
|
|
|
{
|
|
|
|
|
|
Destroy();
|
|
|
|
|
|
}
|
2022-04-06 19:27:45 +08:00
|
|
|
|
var z = current.transform.position.z + diff * 0.1;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
transform.DOMoveZ((float)z, 1f);
|
2022-04-06 19:27:45 +08:00
|
|
|
|
//Push();
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
2022-03-24 09:36:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
//人物向前超车 右边超车
|
|
|
|
|
|
private void Push()
|
|
|
|
|
|
{
|
|
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
protected override void ComputeAnimator()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.ComputeAnimator();
|
2022-03-31 18:40:19 +08:00
|
|
|
|
if (manager.CurrentPlayer == null || manager.CurrentPlayer.UserId != UserId)
|
|
|
|
|
|
{
|
|
|
|
|
|
var currentFrame = manager.GetFrameOffSet(diff);
|
|
|
|
|
|
var mainFrame = manager.GetCurrentFrame();
|
|
|
|
|
|
var min = Math.Min(currentFrame, mainFrame);
|
|
|
|
|
|
var max = Math.Max(currentFrame, mainFrame);
|
2022-04-06 19:27:45 +08:00
|
|
|
|
frames = currentFrame;
|
|
|
|
|
|
var result = manager.mockDirection.Where(c => c.Start < min && c.End > max).FirstOrDefault();
|
2022-04-01 18:41:31 +08:00
|
|
|
|
bearing = result?.Value ?? 0;
|
|
|
|
|
|
animator.SetFloat("bearing", bearing);
|
2022-03-31 18:40:19 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
2022-03-29 18:41:32 +08:00
|
|
|
|
{
|
2022-03-31 18:40:19 +08:00
|
|
|
|
var mainFrame = manager.GetCurrentFrame();
|
2022-04-01 18:41:31 +08:00
|
|
|
|
var result = manager.mockDirection.Where(c => c.Start < mainFrame && c.End > mainFrame).FirstOrDefault();
|
|
|
|
|
|
bearing = result?.Value ?? 0;
|
2022-03-30 18:41:06 +08:00
|
|
|
|
animator.SetFloat("bearing", bearing);
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
2022-03-24 09:36:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
protected override int GetCurrentFrame()
|
|
|
|
|
|
{
|
|
|
|
|
|
return manager.DistanceToFrames(diff) + manager.GetCurrentFrame();
|
2022-03-10 18:32:53 +08:00
|
|
|
|
}
|
2022-03-29 18:41:32 +08:00
|
|
|
|
protected override void ComputeVideo()
|
|
|
|
|
|
{
|
2022-03-31 18:40:19 +08:00
|
|
|
|
base.ComputeVideo();
|
2022-03-29 18:41:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2022-03-10 18:32:53 +08:00
|
|
|
|
//设置当前玩家属性
|
2022-03-30 18:41:06 +08:00
|
|
|
|
public void SetPlayer(string name,double totalDistance, double cadance,double heartRate, double wkg, int userId)
|
2022-03-10 18:32:53 +08:00
|
|
|
|
{
|
2022-03-31 18:40:19 +08:00
|
|
|
|
this.wkg = 2.3d;
|
2022-03-30 18:41:06 +08:00
|
|
|
|
this.UserName = name;
|
2022-03-24 09:36:59 +08:00
|
|
|
|
this.cadance = cadance;
|
|
|
|
|
|
this.totalDistance = totalDistance;
|
|
|
|
|
|
this.heartRate = (int?)heartRate;
|
|
|
|
|
|
this.UserId = userId;
|
2022-03-29 18:41:32 +08:00
|
|
|
|
this.power = 200;
|
2022-03-10 18:32:53 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|