605 lines
16 KiB
C#
Raw Normal View History

using GeoJSON.Net.Geometry;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assets.Scenes.Ride.Scripts.Model
{
/// <summary>
/// 排名
/// </summary>
public class CompetitionRankingSortModel
{
public int Index { get; set; }
public string Name { get; set; }
public string Headimage { get; set; }
public double Near { get; set; }
public string KGWeight { get; set; }
public double Speed { get; set; }
public string CountryImg { get; set; }
public int UserId { get; set; }
public bool IsSelf { get; set; }
2021-08-10 16:36:13 +08:00
public DateTime CreateTime { get; set; }
public bool IsCompleted { get; set; }
public double EndDistance { get; set; }
}
/// <summary>
/// 结果页模型
/// </summary>
public class CompetitionResultModel
{
public int Index { get; set; }
public int UserId { get; set; }
public string Name { get; set; }
public string WxHeadImg { get; set; }
//public string Time { get; set; }
public double Power { get; set; }
public double WeightKg { get; set; }
public double Weight { get; set; }
public double BicycleWeight { get; set; }
2021-08-10 16:36:13 +08:00
public double? HeartRate { get; set; }
public string DeviceType { get; set; }
public string CreateTime { get; set; }
/// <summary>
/// 骑行时长
/// </summary>
public string TripTime { get; set; }
public string CompleteTime { get; set; }
/// <summary>
/// 与冲线时间的差距
/// </summary>
public string Gap { get; set; }
public string Country { get; set; }
}
public class RankingDataModel
{
public int UserId { get; set; }
public TargetData data { get; set; }
}
public class CompetitionTopModel
{
public int UserId { get; set; }
public int Index { get; set; }
public string Name { get; set; }
public string Country { get; set; }
public string Head { get; set; }
public string TripTime { get; set; }
}
public class RankingSortData
{
public int Index { get; set; }
public int UserId { get; set; }
public string WxHeadImg { get; set; }
public string NickName { get; set; }
/// <summary>
/// 注意这里TotalTime不是时间是距离为了重用前端组件没改名称
/// </summary>
public double TotalTime { get; set; }
public int Ticks { get; set; }
/// <summary>
/// 其他人和我的距离(m)
/// </summary>
public double Near { get; set; }
}
public class CyclingFrameRankingModel
{
public List<RankingDataModel> data { get; set; }
public List<RankingSortData> sort { get; set; }
public int myranking { get; set; }
}
/// <summary>
/// 比赛的排名
/// </summary>
public class CompetitionRankingModel
{
public List<CompetitionRankingSortModel> Sorts { get; set; }
public int Total { get; set; }
public int MyRanking { get; set; }
public List<CompetitionResultModel> Results { get; set; }
public List<CompetitionTopModel> TopList { get; set; }
}
/// <summary>
/// 骑行中 输出的数据模型
/// </summary>
public class OutModel
{
public double progress { get; set; }
public double? Elevation { get; set; }
public string Seconds { get; set; }
public int? EleIndex { get; set; }
//public long ExcuteTime { get; set; }
//public double? Bearing { get; set; }
/// <summary>
/// 坡度
/// </summary>
public double SlopeGrade { get; set; }
public TargetData targetData { get; set; }
public List<OutUser> baseRiders { get; set; }
public CyclingFrameRankingModel Ranking { get; set; }
public CompetitionRankingModel CompetitionRanking { get; set; }
public bool CanStart { get; set; } = true;
/// <summary>
/// 开始倒计时
/// </summary>
public int StartCountDown { get; set; }
/// <summary>
/// 结束倒计时
/// </summary>
public int EndCountDown { get; set; }
/// <summary>
/// 标识比赛的倒计时是关门时间
/// </summary>
public bool IsClosed { get; set; }
///// <summary>
///// 是否已保存
///// </summary>
//public bool Saved { get; set; }
/// <summary>
/// 比赛模式下,第一名的坐标
/// </summary>
public GeographicPosition FirstPoint { get; set; }
public ChartSymbol ChartSymbol { get; set; }
}
public class OutUser
{
public int UserId { get; set; }
public string InMapId { get; set; }
public double NextDistance { get; set; }
public double PreDistance { get; set; }
//public TargetData targetData { get; set; }//暂时不需要此字段
public List<double[]> NextFrameArray { get; set; }
//private List<object> _nextFrameArray { get; set; }
//public List<object> NextFrameArray
//{
// get
// {
// if (_nextFrameArray != null)
// {
// return _nextFrameArray;
// }
// _nextFrameArray = (List<object>)CefBrowserPool.GetFrame(BrowserWindow.Main).EvaluateScriptAsync($"getFrameArray({PreDistance},{NextDistance})").ConfigureAwait(false).GetAwaiter().GetResult().Result;
// return _nextFrameArray;
// }
//}
public string NickName { get; set; }
public string WxHeadImg { get; set; }
public bool IsSelf
{
get
{
2021-04-12 17:35:56 +08:00
return this.UserId == App.CurrentUser.Id;
}
}
public GeographicPosition Point { get; set; }
public double Bearing { get; set; }
}
public class ChartSymbol
{
private double _grade = 0;
private double _nextGrade = 0;
public string GradeSymbol
{
get
{
if (_grade > 0)
{
return "+";
}
if (_grade < 0)
{
return "-";
}
return "";
}
}
public string GradeDisplay
{
get
{
if (_grade < 0)
{
return (_grade * -1).ToString("0.#");
}
if (_grade > 0)
{
return _grade.ToString("0.#");
}
return "0";
}
}
public string NextGrade
{
get
{
if (_nextGrade > 0)
{
return "+" + _nextGrade.ToString("0.#");
}
return _nextGrade.ToString("0.#");
}
}
/// <summary>
/// 单位m
/// </summary>
public double Distance { get; set; }
/// <summary>
///
/// </summary>
/// <param name="grade"></param>
/// <param name="nextGrade"></param>
/// <param name="distance">单位m</param>
public ChartSymbol(double grade, double nextGrade, double distance)
{
this._grade = grade;
this._nextGrade = nextGrade;
this.Distance = Math.Round(distance, 1);
}
}
public class NearRiderModel
{
2021-04-12 17:35:56 +08:00
public int Id { get; set; }
public string Name { get; set; }
public string Headimage { get; set; }
public double Near { get; set; }
public string KGWeight { get; set; }
public double Speed { get; set; }
public string CountryImg { get; set; }
2021-04-30 17:25:28 +08:00
public string Country { get; set; }
public bool IsSelf { get; set; }
}
public class MsgModel
{
public int RouteId { get; set; }
public int MemberId { get; set; }
public double[] Point { get; set; }
//public bool exit { get; set; }
public double Speed { get; set; }
public double Power { get; set; }
2021-07-30 19:39:01 +08:00
public double? HeartRate { get; set; }
public double? Cadence { get; set; }
public int TotalTicks { get; set; }
public bool IsCompleted { get; set; }
/// <summary>
/// 需要展示的属性
/// </summary>
//public string Prop { get; set; }
public double EndDistance { get; set; }
///// <summary>
///// 是否展示在线的人
///// </summary>
//public bool ShowVirtual { get; set; }
/// <summary>
/// 命令类型,0命令1消息
/// </summary>
public byte CommandType { get; set; }
//public bool IsVirtual { get; set; }
/// <summary>
/// 功率体重比
/// </summary>
public double WeightKg { get; set; }
public double PreDistance { get; set; }
public int Competitionid { get; set; }
/// <summary>
/// 客户端通过是否有用户保存了数据,来拉取相应的已经被保存的数据。(主要用在比赛)
/// </summary>
public bool Saved { get; set; }
//public int V { get; set; }
}
public class GzipMsgModel
{
public int CommandType { get; set; }
public int V { get; set; }
public string Encoding { get; set; }
public string Client { get; set; }
public int MemberId { get; set; }
public int Competitionid { get; set; }
public bool IsWatch { get; set; }
}
public class ReceiveMsgModel
{
public int RouteId { get; set; }
public int MemberId { get; set; }
public double[] Point { get; set; }
//public bool exit { get; set; }
public double Speed { get; set; }
public double Power { get; set; }
public double HeartRate { get; set; }
public double Cadence { get; set; }
public int TotoalTicks { get; set; }
public bool IsCompleted { get; set; }
/// <summary>
/// 需要展示的属性
/// </summary>
//public string Prop { get; set; }
public double EndDistance { get; set; }
/// <summary>
/// 是否展示在线的人
/// </summary>
//public bool ShowVirtual { get; set; }
/// <summary>
/// 命令类型,0命令1消息
/// </summary>
//public byte CommandType { get; set; }
//public bool IsVirtual { get; set; }
public double PreDistance { get; set; }
/// <summary>
/// 功率体重比
/// </summary>
public double WeightKg { get; set; }
public int Competitionid { get; set; }
public bool Saved { get; set; }
public string WatchIdList { get; set; }
public static ReceiveMsgModel Parse(string str)
{
var list = str.Split(',');
if (list.Length != 14)
{
return null;
}
try
{
return new ReceiveMsgModel
{
RouteId = Convert.ToInt32(list[0],CultureInfo.InvariantCulture),
MemberId = Convert.ToInt32(list[1], CultureInfo.InvariantCulture),
Point = new double[] { double.Parse(list[2].Split(':')[0], CultureInfo.InvariantCulture), double.Parse(list[2].Split(':')[1], CultureInfo.InvariantCulture) },
IsCompleted = ToBoolean(list[3]),
//exit = ToBoolean(list[4]),
Speed = Convert.ToDouble(list[4], CultureInfo.InvariantCulture),
PreDistance = Convert.ToDouble(list[5], CultureInfo.InvariantCulture),
EndDistance = Convert.ToDouble(list[6], CultureInfo.InvariantCulture),
WeightKg = Convert.ToDouble(list[7], CultureInfo.InvariantCulture),
Competitionid = Convert.ToInt32(list[8], CultureInfo.InvariantCulture),
Saved = ToBoolean(list[9]),
Power = Convert.ToDouble(list[10], CultureInfo.InvariantCulture),
HeartRate = Convert.ToDouble(list[11], CultureInfo.InvariantCulture),
Cadence = Convert.ToDouble(list[12], CultureInfo.InvariantCulture),
TotoalTicks = Convert.ToInt32(list[13], CultureInfo.InvariantCulture),
};
}
catch
{
return null;
}
}
private static bool ToBoolean(string str)
{
return Convert.ToBoolean(int.Parse(str));
}
}
public class OnlineUser
{
/// <summary>
/// 用户Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// 在地图中的ID
/// </summary>
public string InMapId
{
get
{
//if (IsVirtual)
//{
// return "Online-Virtual-" + this.Id;
//}
return "Online-" + this.Id;
}
}
public bool IsVirtual { get; set; }
/// <summary>
/// 虚拟人物名称
/// </summary>
public string Name { get; set; }
public double Weight { get; set; }
/// <summary>
/// 头像地址
/// </summary>
public string HeadImage { get; set; }
/// <summary>
/// 路线Id
/// </summary>
public int RouteId { get; set; }
/// <summary>
/// FTP
/// </summary>
public int FTP { get; set; }
/// <summary>
/// 点位
/// </summary>
public double[] Point { get; set; }
/// <summary>
/// 需要展示的属性
/// </summary>
//public List<KeyPaire> Show { get; set; }
/// <summary>
/// 需要隐藏的属性
/// </summary>
public List<KeyPaire> Hide { get; set; }
/// <summary>
/// 是否骑行完毕
/// </summary>
public bool IsCompleted { get; set; }
public bool IsWatcher { get; set; }
public List<int> WatcherList { get; set; }
public double PreDistance { get; set; }
/// <summary>
/// 最后距离
/// </summary>
public double EndDistance { get; set; }
///// <summary>
///// 是否退出
///// </summary>
//public bool exit { get; set; }
/// <summary>
/// 速度(km/h)
/// </summary>
public double Speed { get; set; }
public double Power { get; set; }
public double HeartRate { get; set; }
public double Cadence { get; set; }
public int TotalTicks { get; set; }
///// <summary>
///// 圆形头像
///// </summary>
//public string CircHeadImg
//{
// get; set;
//}
public bool IsSelf
{
get
{
2021-04-12 17:35:56 +08:00
return Id == App.CurrentUser.Id;
}
}
public double WeightKg { get; set; }
public int CompetitionId { get; set; }
/// <summary>
/// 已保存的
/// </summary>
public bool Saved { get; set; }
public DateTime LastActiveTime { get; set; }
public bool IsLost
{
get
{
return (DateTime.Now - LastActiveTime).TotalSeconds > 3;
}
}
2021-04-22 19:29:59 +08:00
public string Country { get; set; }
2021-08-10 16:36:13 +08:00
public DateTime CreateTime { get; set; }
}
public class KeyPaire
{
public object Key { get; set; }
public object Value { get; set; }
public KeyPaire(object key, object value)
{
this.Key = key;
this.Value = value;
}
}
}