2023-01-31 18:22:15 +08:00

112 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
using Assets.Scripts.Apis.Models;
namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
{
public class ARSingleModel : BaseCycling
{
public ARSingleModel(Route route,RouteResultParam param)
: base(route, CyclingModel.Single)
{
this.IsRecord = true;
recorderData = new RecorderDataModel()
{
CurrentUser = App.CurrentUser,
Competitionid = 0,
ContinueIndex = 0,
ContinueMark = Guid.NewGuid().ToString(),
EndDistance = 0,
IsCompleted = false,
IsNeedRanking = true,
CyclingState = CyclingStateEnum.Prepare,
CurrentRoute = route,
CurrentRouteStartDistance = 0,
StartTime = DateTime.Now,//UIManager.Now.GetDateTime(),//DateTime.Now
selectParam = param
};
if (param != null)
{
recorderData.EndDistance = param.EndDistance;
recorderData.CurrentRouteStartDistance = param.EndDistance;
if (!string.IsNullOrWhiteSpace(param.ContinueMark))
{
recorderData.ContinueMark = param.ContinueMark;
}
else
{
param.ContinueMark = recorderData.ContinueMark;
}
recorderData.ContinueIndex = param.ContinueIndex.GetValueOrDefault(0);
}
recorderData.PreDistance = recorderData.EndDistance;
riders = new List<BaseRider>();
}
public override void Run(TargetData targetData)
{
#region 线线
riders.Clear();
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id).ToList();
onlineUsers = onlineUsers.Where(c => !c.Saved).ToList();
foreach (var item in onlineUsers)
{
riders.Add(new OnlineRiderModel()
{
NickName = item.Name,
UserId = item.Id,
WxHeadImg = item.HeadImage,
Point = new GeoJSON.Net.Geometry.GeographicPosition(item.Point[0], item.Point[1]),
EndDistance = item.EndDistance,
PreDistance = item.PreDistance,
WeightKg = item.WeightKg,
Sex = item.Sex,
FrameRate = item.FrameRate,
Speed = item.Speed,
IsWatcher = item.IsWatcher,
Saved = item.Saved
});
}
#endregion
SendUserPositionToServer();
}
protected override void SendUserPositionToServer()
{
try
{
if (recorderData.RiderDatas.Any())
{
var lastData = recorderData.RiderDatas.Last();
var preDistance = recorderData.PreDistance;
var weightKg = Math.Round(lastData._Power / recorderData.CurrentUser.Weight, 2);
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId,
new double[] { lastData._Lat, lastData._Lon },
recorderData.IsCompleted, false, recorderData.EndDistance,
true, 1, lastData._Speed, false, preDistance, weightKg, competitionId: recorderData.Competitionid, recorderData.Saved, 0, lastData._Power, lastData._Cadence, lastData.Ticks, (lastData._FrameRate ?? 0), roomId: recorderData.RoomId);
}
else if (recorderData.EndDistance > 0)//没有骑,但是有初始位置的情况
{
var point = _turfHelper.Along(recorderData.EndDistance);
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, new double[] { point.Latitude, point.Longitude }, endDistance: recorderData.EndDistance, preDistance: recorderData.EndDistance, competitionId: recorderData.Competitionid);
}
else
{
MapUDPService.Send(route.RouteInstance.Id, recorderData.BelongUserId, route.Point.First().Reverse().ToArray(), competitionId: recorderData.Competitionid, roomId: recorderData.RoomId);
}
}
catch (Exception)
{
}
}
}
}