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) > 150) { 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(); // 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; } } }