136 lines
4.6 KiB
C#
136 lines
4.6 KiB
C#
using UnityEngine;
|
|
using Assets.Scenes.Ride.Scripts.Model;
|
|
using UnityEngine.SceneManagement;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
|
|
|
|
namespace Assets.Scenes.Ride.Scripts
|
|
{
|
|
public class PlayerController : AbstractPlayer
|
|
{
|
|
#region 骑行逻辑
|
|
TrailRenderer trail;
|
|
GameObject onlineUserPrefab;
|
|
GameObject miniMapPlayerPrefab;
|
|
|
|
protected override void Init()
|
|
{
|
|
base.Init();
|
|
onlineUserPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/OnlinePlayer");
|
|
miniMapPlayerPrefab = Resources.Load<GameObject>("UI/Prefab/Ride/MiniMapPlayer");
|
|
|
|
totalDistance = mainController.selectParamModel.EndDistance;
|
|
currentlatlong = mainController.GetCenterCoordinate();
|
|
trail = FindObjectOfType<TrailRenderer>();
|
|
trail.startWidth = 1f;
|
|
trail.endWidth = 1f;
|
|
trail.startColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
|
trail.endColor = new Color(0.9764706f, 0.1882353f, 0.5254902f, 1f);
|
|
//var color7 = Resources.Load<Material>("UI/Material/color7");
|
|
//var Graph2 = Resources.Load<Material>("UI/Material/3dGraph2");
|
|
//trail.materials = new Material[] { color7};
|
|
}
|
|
TargetData targetData;
|
|
/// <summary>
|
|
/// 计算数据,父类会在此方法后处理动画
|
|
/// </summary>
|
|
protected override void Compute()
|
|
{
|
|
//计算数据
|
|
//speed = mainController.UpDateSpeed();
|
|
heartRate = mainController.UpDateHeart() ?? 0;
|
|
power = mainController.UpdatePower();
|
|
cadance = mainController.UpdateCadence();
|
|
weight = App.CurrentUser.Weight;
|
|
bicycleWeight = App.CurrentUser.BicycleWeight;
|
|
#if UNITY_EDITOR
|
|
power = 2380;//测试功率
|
|
#endif
|
|
mainController.TrackResistance(currentSlope * App.rideSetting.sensitivity / 100);
|
|
speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight);
|
|
distance = mainController.UpdateDistance(speed);
|
|
totalDistance += distance;
|
|
|
|
if (!stopRecord)
|
|
{
|
|
//记录骑行数据
|
|
currentlatlong = mainController.Along(totalDistance);//下一个坐标
|
|
var recorderData = mainController.cyclingController.recorderData;
|
|
targetData = new TargetData
|
|
{
|
|
Ticks = ticks,
|
|
_Power = power,
|
|
_Speed = speed,
|
|
_Distance = totalDistance > mapData.TotalDistance ? mapData.TotalDistance : totalDistance,
|
|
_Cadence = cadance,
|
|
_HeartRate = heartRate,
|
|
_Lat = currentlatlong.x,
|
|
_Lon = currentlatlong.y,
|
|
_TotalClimb = totalClimb,
|
|
};
|
|
recorderData.PreDistance = TotalDistance - Distance;
|
|
recorderData.EndDistance = TotalDistance;
|
|
recorderData.RiderDatas.Add(targetData);
|
|
}
|
|
|
|
}
|
|
protected override void SendTcp()
|
|
{
|
|
if (mainController.cyclingController != null)
|
|
{
|
|
mainController.cyclingController.Run(null);
|
|
ShowOnlineUsers();
|
|
}
|
|
}
|
|
List<OnlinePlayerController> otherList = new List<OnlinePlayerController>();
|
|
|
|
|
|
private void ShowOnlineUsers()
|
|
{
|
|
var onlineRiders = mainController.cyclingController.riders;
|
|
List<OnlinePlayerController> currentOnlineUserList = new List<OnlinePlayerController>();
|
|
currentOnlineUserList.AddRange(FindObjectsOfType<OnlinePlayerController>());
|
|
|
|
if (onlineRiders.Count > 0)
|
|
{
|
|
foreach (var item in onlineRiders)
|
|
{
|
|
var onlineRider = item as OnlineRiderModel;
|
|
var currentUser = currentOnlineUserList.Where(c => c.UserId == item.UserId).FirstOrDefault();
|
|
var onlineDistance = onlineRider.EndDistance - onlineRider.PreDistance;
|
|
var onlineTotalDistance = onlineRider.EndDistance;
|
|
if (currentUser == null)
|
|
{
|
|
//大地图人物
|
|
GameObject otherPlayerObj = (GameObject)Instantiate(onlineUserPrefab, transform.parent);
|
|
var onlinePlayerController = otherPlayerObj.GetComponent<OnlinePlayerController>();
|
|
otherList.Add(onlinePlayerController);
|
|
onlinePlayerController.UserId = onlineRider.UserId;
|
|
onlinePlayerController.SetDistance(onlineDistance);
|
|
onlinePlayerController.SetTotalDistance(onlineTotalDistance);
|
|
onlinePlayerController.SetHead(onlineRider.WxHeadImg);
|
|
//小地图人物
|
|
GameObject miniPlayer = (GameObject)Instantiate(miniMapPlayerPrefab, transform.parent);
|
|
var miniController = miniPlayer.GetComponent<MiniMapPlayerController>();
|
|
miniController.SetController(onlinePlayerController);
|
|
}
|
|
else
|
|
{
|
|
currentUser.SetDistance(onlineDistance);
|
|
currentUser.SetTotalDistance(onlineTotalDistance);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//上传数据
|
|
public override void Upload()
|
|
{
|
|
mainController.Save(TotalDistance);
|
|
//SceneManager.LoadScene("MainScene");
|
|
}
|
|
#endregion
|
|
}
|
|
}
|