158 lines
6.5 KiB
C#
Raw Normal View History

2022-05-10 19:24:07 +08:00
using Assets.Scenes.Ride.Scripts.Model.RiderModels;
2022-08-05 15:10:09 +08:00
using Assets.Scripts;
2022-05-10 19:24:07 +08:00
using Assets.Scripts.Apis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Assets.Scenes.Ride.Scripts.Model.CyclingModels
{
public class GameModel : BaseCycling
{
2022-05-25 18:40:47 +08:00
/// <summary>
/// 第一个到终点的时间
/// </summary>
public DateTime? FirstEndTime { get; private set; }
2022-08-05 15:10:09 +08:00
public int? FirstUserId { get; private set; }
2022-05-25 18:40:47 +08:00
public GameRoomModel GameRoom { get; private set; }
2022-08-05 15:10:09 +08:00
public List<RoomRankItem> mapWorkoutRecordRankings = new List<RoomRankItem>();
2022-05-25 18:40:47 +08:00
2022-05-10 19:24:07 +08:00
public GameModel(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,
RoomId = App.gameRoomDetail.RoomId,
2022-05-13 09:28:58 +08:00
};
2022-05-25 18:40:47 +08:00
GameRoom = App.gameRoomDetail;
2022-05-13 09:28:58 +08:00
App.gameRoomDetail = null;
2022-05-10 19:24:07 +08:00
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.RemoveAll(r => r.IsSelf == false);
2022-05-13 09:28:58 +08:00
var onlineUsers = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id, recorderData.RoomId).Where(d => d.IsSelf == false)
2022-05-10 19:24:07 +08:00
.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,
2022-05-25 18:40:47 +08:00
Sex = item.Sex,
2022-05-10 19:24:07 +08:00
FrameRate = item.FrameRate,
});
}
#endregion
base.Run(targetData);
}
2022-05-25 18:40:47 +08:00
protected override void BeforeRunAfterPakcData()
{
base.BeforeRunAfterPakcData();
2022-08-05 15:10:09 +08:00
int index = 0;
List<CompetitionRankingSortModel> sort = new List<CompetitionRankingSortModel>();
var userList = MapUDPService.GetOnlineUsers(recorderData.CurrentRoute.RouteInstance.Id,recorderData.RoomId).OrderByDescending(u => u.Saved).ThenBy(d => d.CreateTime).ThenByDescending(d => d.EndDistance);
2022-05-25 18:40:47 +08:00
if (userList.Any())
{
2022-08-05 15:10:09 +08:00
//计算关门时间
2022-05-25 18:40:47 +08:00
foreach (var item in userList)
{
2022-08-05 15:10:09 +08:00
if (!FirstEndTime.HasValue && item.IsCompleted)
{
2022-05-25 18:40:47 +08:00
FirstEndTime = Now.AddMinutes(GameRoom.CloseTime);
2022-08-05 15:10:09 +08:00
FirstUserId = item.Id;
}
index++;
double near = Math.Round(item.EndDistance - currentDistance, 2); //Math.Round(TurfHelper.GetDistances(point, item.Point), 2);
if (item.IsCompleted)
{
sort.Add(new CompetitionRankingSortModel
{
Index = index,
Name = item.Name,
Near = near,
KGWeight = Math.Round(item.WeightKg, 2).ToString(),
Speed = Math.Round(item.Speed, 1),
CountryImg = item.Country,//ConfigHelper.Host + $"User/GetCountryImg?userid={ item.Id }",
UserId = item.Id,
IsSelf = item.IsSelf,
Headimage = item.HeadImage,
CreateTime = DateTime.MaxValue,
EndDistance = item.EndDistance,
IsCompleted = item.IsCompleted,
});
}
}
#region
var results = new List<CompetitionResultModel>();
if (recorderData.IsCompleted || recorderData.Saved)
{
var users1 = userList.Where(d => d.IsCompleted || d.Saved);
if ((users1.Any() && users1.Any(d => mapWorkoutRecordRankings.All(u => u.UserId != d.Id)))
|| mapWorkoutRecordRankings.All(u => u.UserId != recorderData.BelongUserId))
{
var result = ConfigHelper.GameRoomApi.GetDetail(GameRoom.RoomId);
if (result.result)
{
mapWorkoutRecordRankings = result.data.RoomRankingList;
}
}
foreach (var ranking in mapWorkoutRecordRankings)
{
var needUpdate = sort.Where(c => c.UserId == ranking.UserId).FirstOrDefault();
if (needUpdate != null)
{
ranking.WeightKG = needUpdate.KGWeight;
needUpdate.Index = ranking.Rank;
needUpdate.IsCompleted = true;
}
}
2022-05-25 18:40:47 +08:00
}
2022-08-05 15:10:09 +08:00
#endregion
2022-05-25 18:40:47 +08:00
}
}
2022-05-10 19:24:07 +08:00
}
}