场景加载处理一些卡顿的情况

This commit is contained in:
lishuo committed 2021-04-02 19:17:23 +08:00
1 parent e7a3214cb5
commit 65fc5b5c50
35 files changed
+8668 -2075

No files matched your search

+36 -119
View File
@@ -12,138 +12,55 @@ namespace Assets.Scenes.Ride.Scripts
{
public class PlayerController : AbstractPlayer
{
#region 骑行逻辑
public List<TargetData> RiderDatas = new List<TargetData>();
protected override void Init()
{
base.Init();
}
/// <summary>
/// 计算数据,父类会在此方法后处理动画
/// </summary>
protected override void Compute()
{
//计算数据
power = 2000;//功率
//speed = mainController.UpDateSpeed();
heartRate = mainController.UpDateHeart()??0;
power = mainController.UpdatePower();
cadance = mainController.UpdateCadence();
power = 2000;//测试功率
speed = Helper.CalculateSpeed(elevation, currentSlope, power, weight, bicycleWeight);
distance = Math.Round(speed / 3600, 6);
distance = mainController.UpdateDistance(speed);
totalDistance += distance;
//记录骑行数据
var recordText = string.Format($"{ ticks },{ power.ToString(CultureInfo.InvariantCulture) },{ speed.ToString(CultureInfo.InvariantCulture) },{ Math.Round(totalDistance, 6).ToString(CultureInfo.InvariantCulture) },{ cadance.ToString(CultureInfo.InvariantCulture) },{ heartRate.ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.x, 6).ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.y, 6).ToString(CultureInfo.InvariantCulture) }");
//记录骑行数据
var recordText = string.Format($"{ ticks },{ power.ToString(CultureInfo.InvariantCulture) },{ speed.ToString(CultureInfo.InvariantCulture) },{ Math.Round(totalDistance, 6).ToString(CultureInfo.InvariantCulture) },{ cadance.ToString(CultureInfo.InvariantCulture) },{ heartRate.ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.x, 6).ToString(CultureInfo.InvariantCulture) },{ Math.Round(nextlatlong.y, 6).ToString(CultureInfo.InvariantCulture) }");
Debug.Log(recordText);
RiderDatas.Add(new TargetData
{
Ticks = ticks,
_Power = power,
_Speed = speed,
_Distance = totalDistance,
_Cadence = cadance,
_HeartRate = heartRate,
_Lat = nextlatlong.x,
_Lon = nextlatlong.y
});
}
#if !UNITY_EDITOR
var recorderData = cyclingExcutor.recorderData;
recorderData.RiderDatas.Add(new TargetData
{
Ticks = ticks,
_Power = power,
_Speed = speed,
_Distance = totalDistance> mapData.TotalDistance? mapData.TotalDistance: totalDistance,
_Cadence = cadance,
_HeartRate = heartRate,
_Lat = nextlatlong.x,
_Lon = nextlatlong.y
});
#endif
}
//上传数据
protected override void Upload()
{
}
#region 保存骑行数据 准备迁移
private string ContinueMark = "TODO";
private int ContinueIndex=0;
private int Competitionid =0;
private bool IsNeedRanking = true;
private double CurrentRouteStartDistance = 0;
private int ManufacturerId=0;
private int AntModelId =0 ;
private CyclingModel cyclingModel = CyclingModel.Single;
private DateTime EndTime;
void Complete()
{
EndTime = startTime.AddSeconds(ticks);
MapInterruptRecordApi api = new MapInterruptRecordApi();
string newFileName = Guid.NewGuid().ToString();
int FTP = Helper.GetFtp();
double NP = Helper.GetNP(RiderDatas);
//强度
double IF = NP / FTP;
//训练量
double TSS = (RiderDatas.Count * NP * IF) / (FTP * 3600) * 100;
var recordId = Guid.NewGuid().ToString();
var averagePower = Helper.AveragePower(RiderDatas);
var interruptRecord = new MapInterruptRecord
{
Id = recordId,
RouteId = 1,
RouteName = "",
TotalDistance = mapData.TotalDistance,
UserId = userId,
RecordFileName = newFileName + ".txt",
Ftp = FTP,//FTP设置
IF = Math.Round(IF, 2),
Kj = RiderDatas.Sum(a => a._Power) / 1000,//消耗
Tss = Math.Round(TSS, 2),
EndDistance = totalDistance,
IsCompleted = totalDistance >= mapData.TotalDistance,
NormalizedPower = Math.Floor(NP),//标准化功率
AveragePower = averagePower,//平均功率
MaxPower = RiderDatas.Max(a => a._Power),//最大功率
WeightKg = Math.Round(averagePower / weight, 2),
Weight = weight,
BicycleWeight = bicycleWeight,
ContinueMark = ContinueMark,
ContinueIndex = ContinueIndex,
IsDelete = false,
MapCompetitionId = Competitionid,
ManufacturerName = "TODO",
DeviceNumber = "TODO",
IsRanking = IsNeedRanking,
CurrentRouteStartDistance = CurrentRouteStartDistance,
ManufacturerId = ManufacturerId,
AntModelId = AntModelId,
StartTime = startTime,
CreateTime = EndTime,
Ticks = RiderDatas.Last().Ticks,
Mode = cyclingModel.ToString(),
//Param = Newtonsoft.Json.JsonConvert.SerializeObject(selectParam),
//GlobalCyclingId = selectParam.GlobalCyclingId
};
interruptRecord.SpeedRange = null;
double process = Math.Round((totalDistance - interruptRecord.CurrentRouteStartDistance) /mapData.TotalDistance, 2);
interruptRecord.Progress = process > 1 ? 1 : process;
var cadences = RiderDatas.Where(a => a._Cadence.HasValue && a._Cadence.Value > 0);
if (cadences.Any())
{
interruptRecord.AverageCadence = Math.Round(cadences.Average(a => a._Cadence.GetValueOrDefault(0)));
}
interruptRecord.MaxCadence = Math.Round(RiderDatas.Max(a => a._Cadence.GetValueOrDefault(0)));
interruptRecord.AverageHeartRate = Math.Round(RiderDatas.Average(a => a._HeartRate.GetValueOrDefault(0)));
interruptRecord.MaxHeartRate = RiderDatas.Max(a => a._HeartRate.GetValueOrDefault(0));
var path = Helper.GetDataDire("MapWorkoutRecords");
var fname = path + "/" + newFileName + ".txt";
var files = new List<string>();
using (var fs = new FileInfo(fname).OpenWrite())
{
var stream = new StreamWriter(fs);
stream.BaseStream.Seek(0, SeekOrigin.End);
foreach (var item in RiderDatas)
{
stream.Write(item.Write() + "\r\n");
}
stream.Flush();
stream.Close();
files.Add(fname);
}
var result = api.Add(interruptRecord, files);
#if !UNITY_EDITOR
cyclingExcutor.recorderData.IsCompleted = totalDistance == mapData.TotalDistance;
cyclingExcutor.recorderData.EndDistance = totalDistance;
cyclingExcutor.recorderData.SaveData(cyclingExcutor.Mode,null,string.Empty);
#endif
}
#endregion
#endregion
}
}
#endregion
}
}