116 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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) > 150)
{
Destroy();
}
}
}
//人物向前超车 右边超车
protected override void Turn()
{
base.Turn();
var current = manager.CurrentPlayer;
var z = current.transform.position.z + diff*1000 * 0.5f;
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?.Value ?? 0;
animator.SetFloat("bearing", bearing);
}
}
protected override int GetCurrentFrame()
{
return (int)(diff * 10) + manager.GetCurrentFrame();
}
protected override void ComputeVideo()
{
base.ComputeVideo();
}
//设置当前玩家属性
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;
}
}
}