122 lines
4.3 KiB
C#
122 lines
4.3 KiB
C#
using System;
|
||
using System.Linq;
|
||
using DG.Tweening;
|
||
using UnityEngine;
|
||
|
||
namespace Assets.Scripts.Scenes.VideoRide
|
||
{
|
||
public class OnlineVideoPlayer : AbstractVideoPlayer
|
||
{
|
||
public Transform target;
|
||
public double diff;
|
||
public int frames;
|
||
protected override void Update()
|
||
{
|
||
base.Update();
|
||
}
|
||
|
||
//计算
|
||
protected override void 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) > 100)
|
||
{
|
||
Destroy();
|
||
}
|
||
}
|
||
}
|
||
|
||
private const int rate = 20;// z轴与帧数的比例 1 :20
|
||
//人物向前超车 右边超车
|
||
protected override void Turn()
|
||
{
|
||
base.Turn();
|
||
var current = manager.CurrentPlayer;
|
||
var interval = this.currentFrame - manager.GetCurrentFrame();
|
||
var z = current.transform.position.z + interval / rate;
|
||
transform.DOMoveZ((float)z, 1f);
|
||
//x轴位移
|
||
//var x = bearing + current.bearing;
|
||
//transform.DOMove(new Vector3(x, transform.position.y, (float)z), 1); // ((float)z, 1f);
|
||
//人物转向
|
||
//transform.Rotate(new Vector3(0,1,0), bearing);
|
||
//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);
|
||
//}
|
||
}
|
||
|
||
private int currentFrame { get; set; }
|
||
protected override void ComputeAnimator()
|
||
{
|
||
base.ComputeAnimator();
|
||
if (manager.CurrentPlayer == null || manager.CurrentPlayer.UserId != UserId)
|
||
{
|
||
var result = manager.mockDirection.Where(c => c.Start < currentFrame && c.End > currentFrame).FirstOrDefault();
|
||
bearing = result?.RotationY ?? 0;
|
||
animator.SetFloat("bearing", bearing);
|
||
}
|
||
}
|
||
protected override int GetCurrentFrame()
|
||
{
|
||
return this.currentFrame;//(int)(diff * 10) + manager.GetCurrentFrame();
|
||
}
|
||
protected override void ComputeVideo()
|
||
{
|
||
base.ComputeVideo();
|
||
}
|
||
protected override void CreateHeadImage()
|
||
{
|
||
base.CreateHeadImage();
|
||
if (diff < 0)
|
||
((RectTransform)head.transform).anchoredPosition = new Vector2(((RectTransform)head.transform).anchoredPosition.x, -800f);
|
||
}
|
||
|
||
//设置当前玩家属性
|
||
public void SetPlayer(string name, double distance, double totalDistance, double cadance,double heartRate, double wkg, int userId,double power,double currentPlayerDistance,int frame)
|
||
{
|
||
this.wkg = wkg;
|
||
this.UserName = name;
|
||
this.cadance = cadance;
|
||
this.totalDistance = totalDistance;
|
||
this.heartRate = (int?)heartRate;
|
||
this.UserId = userId;
|
||
this.power = power;
|
||
this.speed = distance * 3600;
|
||
this.diff = totalDistance - currentPlayerDistance;
|
||
this.currentFrame = frame;
|
||
}
|
||
}
|
||
}
|