2022-08-05 15:10:09 +08:00

122 lines
4.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
}