diff --git a/Assets/Plugins/Android/unityandroidbluetoothlelib.jar b/Assets/Plugins/Android/unityandroidbluetoothlelib.jar index ee3ce4e1..bc3603e2 100644 Binary files a/Assets/Plugins/Android/unityandroidbluetoothlelib.jar and b/Assets/Plugins/Android/unityandroidbluetoothlelib.jar differ diff --git a/Assets/Resources/UI/Prefab/Panel/Mobile/RowerWelldone.prefab b/Assets/Resources/UI/Prefab/Panel/Mobile/RowerWelldone.prefab index afb2b763..04c8e478 100644 --- a/Assets/Resources/UI/Prefab/Panel/Mobile/RowerWelldone.prefab +++ b/Assets/Resources/UI/Prefab/Panel/Mobile/RowerWelldone.prefab @@ -130,7 +130,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 362.5, y: -12} + m_AnchoredPosition: {x: 370.5, y: -12} m_SizeDelta: {x: 63, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5907608872145303852 @@ -300,7 +300,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 170.5, y: -12} + m_AnchoredPosition: {x: 178.5, y: -12} m_SizeDelta: {x: 63, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7186105676469645931 @@ -772,8 +772,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 57.5, y: -12} - m_SizeDelta: {x: 53, y: 24} + m_AnchoredPosition: {x: 61.5, y: -12} + m_SizeDelta: {x: 61, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3836652121421275166 CanvasRenderer: @@ -812,10 +812,10 @@ MonoBehaviour: m_Alignment: 4 m_AlignByGeometry: 0 m_RichText: 1 - m_HorizontalOverflow: 0 + m_HorizontalOverflow: 1 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: 12:00 + m_Text: 00:00:00:00 --- !u!1 &2361253683883903539 GameObject: m_ObjectHideFlags: 0 @@ -1342,7 +1342,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 234.5, y: -10} + m_AnchoredPosition: {x: 239.5, y: -10} m_SizeDelta: {x: 63, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &269708835447031313 @@ -1811,8 +1811,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 57.5, y: -10} - m_SizeDelta: {x: 53, y: 20} + m_AnchoredPosition: {x: 60, y: -10} + m_SizeDelta: {x: 57, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &9087205330612000289 CanvasRenderer: @@ -1851,10 +1851,10 @@ MonoBehaviour: m_Alignment: 4 m_AlignByGeometry: 0 m_RichText: 1 - m_HorizontalOverflow: 0 + m_HorizontalOverflow: 1 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: 12:00 + m_Text: 00:00:00 --- !u!1 &4008537939924920360 GameObject: m_ObjectHideFlags: 0 @@ -2244,7 +2244,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 288.7, y: 81.4} + m_AnchoredPosition: {x: 285.7, y: 105.39996} m_SizeDelta: {x: 458, y: 24} m_Pivot: {x: 0.5, y: 1} --- !u!222 &7444512366960477214 @@ -2421,7 +2421,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 362.5, y: -10} + m_AnchoredPosition: {x: 367.5, y: -10} m_SizeDelta: {x: 63, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7402218478811892123 @@ -2662,7 +2662,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 426.5, y: -10} + m_AnchoredPosition: {x: 431.5, y: -10} m_SizeDelta: {x: 63, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7588943949929111357 @@ -2740,7 +2740,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 426.5, y: -12} + m_AnchoredPosition: {x: 434.5, y: -12} m_SizeDelta: {x: 63, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8229538892286258918 @@ -2818,7 +2818,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 298.5, y: -12} + m_AnchoredPosition: {x: 306.5, y: -12} m_SizeDelta: {x: 63, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8887962303842604337 @@ -2972,7 +2972,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 234.5, y: -12} + m_AnchoredPosition: {x: 242.5, y: -12} m_SizeDelta: {x: 63, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1292433779917309027 @@ -3412,7 +3412,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 111.5, y: -12} + m_AnchoredPosition: {x: 119.5, y: -12} m_SizeDelta: {x: 53, y: 24} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3812684676960283277 @@ -4196,7 +4196,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 298.5, y: -10} + m_AnchoredPosition: {x: 303.5, y: -10} m_SizeDelta: {x: 63, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1079738450500434844 @@ -4412,7 +4412,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 111.5, y: -10} + m_AnchoredPosition: {x: 116.5, y: -10} m_SizeDelta: {x: 53, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1973580062630642371 @@ -4490,7 +4490,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 170.5, y: -10} + m_AnchoredPosition: {x: 175.5, y: -10} m_SizeDelta: {x: 63, y: 20} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8126899616570297098 @@ -4847,12 +4847,12 @@ PrefabInstance: - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} @@ -5022,12 +5022,12 @@ PrefabInstance: - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} propertyPath: m_AnchorMin.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5329299856310536127, guid: 6b94e789d6585a04dbdc04c8a7cf97b2, type: 3} diff --git a/Assets/Scripts/Apis/Models/RowerRecordModel.cs b/Assets/Scripts/Apis/Models/RowerRecordModel.cs index 740fb145..d761841b 100644 --- a/Assets/Scripts/Apis/Models/RowerRecordModel.cs +++ b/Assets/Scripts/Apis/Models/RowerRecordModel.cs @@ -19,16 +19,17 @@ namespace Assets.Scripts.Apis.Models public DateTime StartTime { get; set; } public DateTime CreateTime { get; set; } public int MaxPower { get; set; } - public ushort MaxPace { get; set; } + public int MaxPace { get; set; } public uint MaxRate { get; set; } public double AvgPace { get; set; } public double AvgPower { get; set; } public double AvgRate { get; set; } public int MaxHeartRate { get; set; } public int AvgHeartRate { get; set; } - public ushort StrokeCount { get; set; } - public uint TotalDistance { get; set; } + public int StrokeCount { get; set; } + public int TotalDistance { get; set; } public int TotalTime { get; set; } + public double TrainingTime { get; set; } public int? Type { get; set; } public double? TypeValue { get; set; } public string ShadowIds { get; set; } @@ -73,7 +74,7 @@ namespace Assets.Scripts.Apis.Models public class SegmentList { - public int Ticks { get; set; } + public double Ticks { get; set; } public int Distance { get; set; } public int Speed { get; set; } public int Power { get; set; } diff --git a/Assets/Scripts/App.cs b/Assets/Scripts/App.cs index 36577124..e4c682d1 100644 --- a/Assets/Scripts/App.cs +++ b/Assets/Scripts/App.cs @@ -21,7 +21,7 @@ public delegate void ChangeLanguageDelegate(); public static class App { - public static string Host = "http://192.168.0.101:5083/"; + public static string Host = "http://192.168.0.102:5082/"; public static string AppVersion = Application.version; @@ -222,6 +222,9 @@ public static class App static App() { InitLanguage(); + Host = "http://pf.juze.pro/"; + //UdpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21000); + //TcpAddress = new IPEndPoint(IPAddress.Parse("47.97.84.8"), 21001); #if !UNITY_EDITOR //测试服务器 Host = "http://192.168.0.101:5083/"; Host = "http://pf.juze.pro/"; diff --git a/Assets/Scripts/Devices/Ble/Characteristic/C2RowerData.cs b/Assets/Scripts/Devices/Ble/Characteristic/C2RowerData.cs index a9dbde56..22ff74c9 100644 --- a/Assets/Scripts/Devices/Ble/Characteristic/C2RowerData.cs +++ b/Assets/Scripts/Devices/Ble/Characteristic/C2RowerData.cs @@ -11,11 +11,6 @@ namespace Assets.Scripts.Devices.Ble.Characteristic { public class C2RowerData : ICharacteristic, IRowerCommonData { - public static string JUSTROW_HEX = "F1 76 07 01 01 01 13 02 01 01 61 F2"; - public static string TERMINATEWORKOUT_HEX = "F1 76 04 13 02 01 02 62 F2"; - public static string FIXEDDISTANCE_HEX = "F1 76 18 01 01 03 03 05 80 00 00 07 D0 05 05 80 00 00 01 90 14 01 01 13 02 01 01 28 F2"; - public static string FIXEDTIME_HEX = "F1 76 07 01 01 01 13 02 01 01 61 F2"; - public Guid Uuid => ServiceUuids.Characteristics.C2RowerData35; public Guid ServiceUuid => ServiceUuids.Characteristics.C2Service; @@ -23,6 +18,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic public bool IsOptional => false; public static event EventHandler EnableChanged; + public static event EventHandler RowerTypeChanged; private static bool _isEnabled; public static bool IsEnabled { @@ -56,59 +52,62 @@ namespace Assets.Scripts.Devices.Ble.Characteristic } } - public static bool IsUserDefined { get; set; } - public static bool isReadyStatus { get; private set; } - public static RowerTaskPanel.RowerType rowerType { get; private set; } + public static RowerTaskPanel.RowerType rowerType = new RowerTaskPanel.RowerType() { type = 0 ,value = 0}; public void HandleAttributeReceived(byte[] data) { - + if (data[0] == 0x35) { PeakDriveForce = LbsToNewton(Convert.ToDouble(BitConvertHelper.ToUInt16(data, 13)) / 10, true); AverageDriveForce = LbsToNewton(Convert.ToDouble(BitConvertHelper.ToUInt16(data, 15)) / 10, true); - ElapsedTime = (int)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 1)) / 100); - TotalDistance = (uint)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 4)) / 10); StrokeCount = BitConvertHelper.ToUInt16(data, 19); } else if (data[0] == 0x3d) { + if (data[2] == 0) + { + PullValue = 0; + } //老款表头不支持 //List r = new List(); for (int i = 3; i < data.Length; i += 2) { - ushort pull = data[i] < 10 ? (ushort)0 : Convert.ToUInt16(Math.Round(LbsToNewton(data[i], true))); + ushort pull = Convert.ToUInt16(Math.Round(LbsToNewton(data[i], true))); //r.Add(pull); PullValue = pull; } - // Debug.Log("拉力曲线:" + string.Join(",", r)); + // Debug.Log("拉力曲线:" + string.Join(",", r)); } else if (data[0] == 0x31) { - byte status = data[18]; + ElapsedTime = (int)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 1)) / 100); + TotalDistance = (uint)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 4)) / 10); + + int status = (int)data[7]; int value = (data[17] << 16) + (data[16] << 8) + data[15]; - if (status == 128 && value != 0) + + int type = 0; + //3 里程 5 时间 1直接划船 + if (status == 3) { - rowerType = new RowerTaskPanel.RowerType(); - rowerType.type = 1; + type = 1; + } + if (status == 5) + { + type = 2; + value /= 100; + } + //如果课程发生变化 + if (status != 0 && type > 0 && ( rowerType.type != type || rowerType.value != value)) + { + Debug.Log($"status{status}-type{type}-value{value}"); + rowerType.type = type; rowerType.value = value; - IsUserDefined = true; + RowerTypeChanged?.Invoke(this,null); } - else if (status == 0) - { - rowerType = new RowerTaskPanel.RowerType(); - rowerType.type = 2; - rowerType.value = value / 100; - IsUserDefined = false; - } - else - { - rowerType = null; - IsUserDefined = false; - } - Debug.Log($"里程:{TotalDistance}峰力值:{PeakDriveForce} 均力值{AverageDriveForce} ReadyStatus:{isReadyStatus} TIME{DateTime.Now}"); - //isReadyStatus = data[9] == 0; + var time = ((data[3] << 16) + (data[2] << 8) + data[1]) / 100; Debug.Log("划船时间" + time); isReadyStatus = data[9] == 0; @@ -139,7 +138,8 @@ namespace Assets.Scripts.Devices.Ble.Characteristic } else if (data[0] == 0x39) { - ElapsedTime = (int)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 5)) / 100); + TrainingTime = (Convert.ToDouble(BitConvertHelper.ToUInt24(data, 5)) / 100); + ElapsedTime = (int)TrainingTime; TotalDistance = (uint)(Convert.ToDouble(BitConvertHelper.ToUInt24(data, 8)) / 10); CompleteEvent?.Invoke(this, null); } @@ -196,6 +196,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic public int AveragePower { get; set; } = 0; public int ElapsedTime { get; set; } = 0; + public double TrainingTime { get; set; } = 0; public int TotalEnergy { get; set; } = 0; public int EnergyPerHour { get; set; } = 0; public int EnergyPerMinute { get; set; } = 0; @@ -216,6 +217,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic this.EnergyPerHour = 0; this.EnergyPerMinute = 0; this.ElapsedTime = 0; + this.TrainingTime = 0; } } diff --git a/Assets/Scripts/Devices/Ble/Characteristic/FtmsRowerData.cs b/Assets/Scripts/Devices/Ble/Characteristic/FtmsRowerData.cs index 109160b2..926b5452 100644 --- a/Assets/Scripts/Devices/Ble/Characteristic/FtmsRowerData.cs +++ b/Assets/Scripts/Devices/Ble/Characteristic/FtmsRowerData.cs @@ -77,6 +77,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic /// 运行时间 /// public int ElapsedTime { get; set; } = 0; + public double TrainingTime { get; set; } = 0; public int TotalEnergy { get; set; } = 0; public int EnergyPerHour { get; set; } = 0; public int EnergyPerMinute { get; set; } = 0; @@ -295,6 +296,7 @@ namespace Assets.Scripts.Devices.Ble.Characteristic this.EnergyPerHour = 0; this.EnergyPerMinute = 0; this.ElapsedTime = 0; + this.TrainingTime = 0; } public int SizeOfDataForFlag(RowerDataFlag flag) diff --git a/Assets/Scripts/Devices/Ble/Interfaces/IRowerCommonData.cs b/Assets/Scripts/Devices/Ble/Interfaces/IRowerCommonData.cs index 1bd1dad3..0cb539ed 100644 --- a/Assets/Scripts/Devices/Ble/Interfaces/IRowerCommonData.cs +++ b/Assets/Scripts/Devices/Ble/Interfaces/IRowerCommonData.cs @@ -37,6 +37,7 @@ namespace Assets.Scripts.Devices.Ble.Interfaces int InstantaneousPower { get; set; } int AveragePower { get; set; } int ElapsedTime { get; set; } + double TrainingTime { get; set; } int TotalEnergy { get; set; } int EnergyPerHour { get; set; } diff --git a/Assets/Scripts/Scenes/MainController.cs b/Assets/Scripts/Scenes/MainController.cs index abc36835..ba81e853 100644 --- a/Assets/Scripts/Scenes/MainController.cs +++ b/Assets/Scripts/Scenes/MainController.cs @@ -25,7 +25,7 @@ public class MainController : BaseScene Debug.Log("执行25"); Version = this.transform.Find("GameObject").Find("Version").GetComponent(); Version.text = "V"+App.AppVersion; - transform.Find("Text").GetComponent().text = "2022-6-21-V1"; + transform.Find("Text").GetComponent().text = "2022-6-29-V1"; DeviceCache.Init(PFConstants.DeviceCacheFolder); Loom.Initialize(); msg = transform.Find("GameObject/Message").GetComponent(); diff --git a/Assets/Scripts/UI/Prefab/Panel/RowerHomeScript.cs b/Assets/Scripts/UI/Prefab/Panel/RowerHomeScript.cs index 9ab58820..134f1c89 100644 --- a/Assets/Scripts/UI/Prefab/Panel/RowerHomeScript.cs +++ b/Assets/Scripts/UI/Prefab/Panel/RowerHomeScript.cs @@ -104,7 +104,7 @@ public class RowerHomeScript : PFUIPanel double Kj = 0; int seconds = 0; bool isPause = false; - public RowerType rowerType = null; + public RowerType rowerType = new RowerType() { type = 1, value = 500 }; /// /// 计算停止的秒数,如果超过5秒,除了累加值都变成--,这些值记录为0,提示用户如果超过90秒,将直接保存数据 /// 如果5-90秒有拉力,则继续滑行 @@ -129,7 +129,6 @@ public class RowerHomeScript : PFUIPanel protected override void Awake() { Id = Guid.NewGuid().ToString(); - rowerType = new RowerType() { type = 1, value = 500 }; spriteDict = new Dictionary() { @@ -299,7 +298,7 @@ public class RowerHomeScript : PFUIPanel RowerData.CompleteEvent -= CompelteFunc; RowerData.CompleteEvent += CompelteFunc; } - rowerType = new RowerType { type = 1, value = 500 }; + HandleSelectType(); Init(); isFirstReset = false; @@ -391,7 +390,7 @@ public class RowerHomeScript : PFUIPanel historyTime = 0; if (C2RowerData.IsEnabled == true) { - Utils.showToast(null, "Press \"Menu\" to save.", int.MaxValue, stopFunc: () => C2RowerData.isReadyStatus, endCallback: Init); + Utils.showToast(null, "Press \"Menu\" to save.", int.MaxValue, stopFunc: () => C2RowerData.isReadyStatus, endCallback: ()=> Init()); } else { @@ -419,7 +418,7 @@ public class RowerHomeScript : PFUIPanel dw = $"\nM"; } bottom.Find("Expected/Title").GetComponent().text = $"{App.GetLocalString("EST")}{dw}"; - Init(); + Init(true); //Utils.showToast(null, "请滑动划船机并开始", isLowest: true, type: 1); } @@ -560,24 +559,27 @@ public class RowerHomeScript : PFUIPanel var strokeCount = RowerData.StrokeCount; var power = RowerData.InstantaneousPower; var rate = RowerData.StrokeRate; - + if (rowerType.type == 1) { TimeText.text = $"{RowerData.ElapsedTime}"; KMText.text = "0"; + trainingTime = RowerData.TrainingTime; } else { TimeText.text = TimeSpan.FromSeconds(0).ToPFString(); KMText.text = $"{RowerData.TotalDistance}"; + trainingTime = rowerType.value; } - - records.Add($"{strokeCount},{RowerData.ElapsedTime},{RowerData.TotalDistance},{RowerData.InstantaneousPower},{RowerData.InstantaneousPace},{RowerData.StrokeRate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{RowerData.ElapsedTime}"); + truelyTime++; + records.Add($"{strokeCount},{RowerData.ElapsedTime},{RowerData.TotalDistance},{RowerData.InstantaneousPower},{RowerData.InstantaneousPace},{RowerData.StrokeRate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}"); var tmpdata = new TempRowerCalc() { strokeCount = strokeCount, pace = RowerData.InstantaneousPace, power = power, rate = rate, heartRate = heartRate, distance = (int)RowerData.TotalDistance, energy = energy }; values.Add(tmpdata); SendDataToRace(tmpdata); HandleSaveDirect(); } + private double trainingTime = 0; private bool SaveFunc(RowerRecordModel model, List files) { if (Application.internetReachability == NetworkReachability.NotReachable) @@ -588,13 +590,14 @@ public class RowerHomeScript : PFUIPanel return false; } + model.TrainingTime = trainingTime; model.ManufacturerName = deviceName + " " + deviceNetwork + " " + deviceSensor; model.DeviceNumber = $"{ deviceAddress },{ deviceSensor }"; var res = ConfigHelper.rowerApi.Add(model, files); if (res.result) { - UIManager.ShowRowerWelldone(model.Id, Init); + UIManager.ShowRowerWelldone(model.Id, ()=> Init()); try { if (File.Exists(files[0])) @@ -671,8 +674,8 @@ public class RowerHomeScript : PFUIPanel model.AvgPower = values.Average(x => x.power); model.AvgRate = values.Average(x => x.rate); model.AvgHeartRate = (int)values.Average(x => x.heartRate); - model.StrokeCount = (ushort)values.Max(x=>x.strokeCount); - model.TotalDistance = (ushort)values.Max(x => x.distance); + model.StrokeCount = values.Max(x=>x.strokeCount); + model.TotalDistance = values.Max(x => x.distance); model.Kj = values.Max(x => x.energy); } model.TotalTime = records.Count; @@ -710,14 +713,16 @@ public class RowerHomeScript : PFUIPanel //Disconnect(); } - private void Init() + private void Init(bool init = false) { + initRower = init; ResetChart(); deviceName = ""; deviceNetwork = ""; deviceAddress = ""; deviceSensor = ""; pointCount = 0; + trainingTime = 0; print("初始化"); if (Rower != null) { @@ -745,21 +750,20 @@ public class RowerHomeScript : PFUIPanel openTimer = false; if (rowerType.type == 0) { + Debug.Log("rowerType.type == 0"); TimeText.text = "---"; KMText.text = "---"; } - else + if (rowerType.type == 1) { - if (rowerType.type == 1) - { - TimeText.text = "---"; - KMText.text = $"{rowerType.value}"; - } - else - { - TimeText.text = TimeSpan.FromSeconds(rowerType.value).ToPFString(); - KMText.text = "---"; - } + Debug.Log("rowerType.type == 1"); + TimeText.text = "---"; + KMText.text = $"{rowerType.value}"; + } + if (rowerType.type == 2) + { + TimeText.text = TimeSpan.FromSeconds(rowerType.value).ToPFString(); + KMText.text = "---"; } WText.text = "---"; @@ -788,6 +792,8 @@ public class RowerHomeScript : PFUIPanel #endif C2RowerData.EnableChanged -= ModeChanged; C2RowerData.EnableChanged += ModeChanged; + C2RowerData.RowerTypeChanged -= RowerTypeChanged; + C2RowerData.RowerTypeChanged += RowerTypeChanged; if (RowerData != null) { RowerData.RowerResChanged -= ResChanged; @@ -810,7 +816,11 @@ public class RowerHomeScript : PFUIPanel Resources.UnloadUnusedAssets(); GC.Collect(); } - + private void RowerTypeChanged(object sender, EventArgs e) + { + rowerType = C2RowerData.rowerType; + HandleSelectType(); + } private void ModeChanged(object sender, EventArgs e) { if (RowerData != null) @@ -929,10 +939,8 @@ public class RowerHomeScript : PFUIPanel Debug.Log($"ElapsedTime :{RowerData.ElapsedTime} : {truelyTime}-{RowerData.TotalDistance}"); TempRowerCalc tmpdata = null; - //解决C2里程训练无法结束的问题 - var c2notStop = C2RowerData.IsEnabled && rowerType!=null && rowerType.type !=0 && (rowerType.value-totalDistance) <= 5; //里程停止逻辑 - if (totalDistance == RowerData.TotalDistance && !c2notStop) + if (totalDistance == RowerData.TotalDistance) { //判定一次停止 stopSeconds++; @@ -1351,8 +1359,10 @@ public class RowerHomeScript : PFUIPanel } float staticTimer = 1f,shortTimer = 0.25f; int ticks { get; set; } = 0; + bool initRower = false; void Update() { + InitC2Rower(); shortTimer -= Time.deltaTime; if (shortTimer <= 0) { @@ -1372,14 +1382,21 @@ public class RowerHomeScript : PFUIPanel TimerTicks(); ticks++; } - + HandleStatic(); var heartRate = HeartRate ?? 0; BPMText.text = heartRate == 0 ? "---" : heartRate.ToString(); - HandleStatic(); - timer += 1f ; } } + private void InitC2Rower() + { + if (!initRower && Rower != null && RowerData != null && rowerType != null && C2RowerData.IsEnabled && C2RowerData.isReadyStatus) + { + initRower = true; + HandleC2RowerTaskPanel(rowerType); + } + } + void ShortUpdateData() { if (!openTimer) return; @@ -1433,17 +1450,5 @@ public class RowerHomeScript : PFUIPanel transform.Find("Stopped/DeviceStatus").gameObject.SetActive(!flag); transform.Find("Stopped/DeviceStatusConnect").gameObject.SetActive(flag); } - if (Rower != null) - { - if (C2RowerData.IsEnabled == true && !openTimer && !isPause && C2RowerData.rowerType!=null && rowerType!= null && !rowerType.EqualTo(C2RowerData.rowerType)) - { - rowerType = C2RowerData.rowerType; - HandleSelectType(); - } - //if (C2RowerData.IsEnabled) - //{ - // Rower.C2GetStatus(new byte[] { 0xc1 }); - //} - } } } diff --git a/Assets/Scripts/UI/Prefab/Rower/RowerMultiModeScript.cs b/Assets/Scripts/UI/Prefab/Rower/RowerMultiModeScript.cs index 69b9bf9d..dce0fc97 100644 --- a/Assets/Scripts/UI/Prefab/Rower/RowerMultiModeScript.cs +++ b/Assets/Scripts/UI/Prefab/Rower/RowerMultiModeScript.cs @@ -246,6 +246,8 @@ public class RowerMultiModeScript : MonoBehaviour StartCoroutine(Get(url, (res) => { shadowList = res.data; + if (shadowList == null) + return; var _tmpList = shadowList.Select(x => new TraceData { list = x.list, diff --git a/Assets/Scripts/UI/Prefab/Rower/RowerTaskPanel.cs b/Assets/Scripts/UI/Prefab/Rower/RowerTaskPanel.cs index a9d79643..61dd3d63 100644 --- a/Assets/Scripts/UI/Prefab/Rower/RowerTaskPanel.cs +++ b/Assets/Scripts/UI/Prefab/Rower/RowerTaskPanel.cs @@ -27,7 +27,7 @@ public class RowerTaskPanel : PFUIPanel } } Transform selector, distance, time; - public RowerType rowerType; + public RowerType rowerType { get; set; } public Action callBack { get; set; } diff --git a/Assets/Scripts/UI/Prefab/Rower/RowerWelldone.cs b/Assets/Scripts/UI/Prefab/Rower/RowerWelldone.cs index 96b88718..0b342498 100644 --- a/Assets/Scripts/UI/Prefab/Rower/RowerWelldone.cs +++ b/Assets/Scripts/UI/Prefab/Rower/RowerWelldone.cs @@ -155,7 +155,7 @@ public class RowerWelldone : PFUIPanel var game = i == 0 ? Instantiate(AllRecord) : Instantiate(Record); var content = i != 0 ? game.transform.Find("Content") : game.transform; content.Find("Index").GetComponent().text = i == 0 ? "ALL" : i.ToString("00"); - content.Find("Time").GetComponent().text = TimeSpan.FromSeconds(item.Ticks).ToString(); + content.Find("Time").GetComponent().text = i == 0 ? TimeSpan.FromSeconds(item.Ticks).ToString(@"hh\:mm\:ss\.ff"): TimeSpan.FromSeconds(item.Ticks).ToString(@"hh\:mm\:ss"); content.Find("Distance").GetComponent().text = item.Distance.ToString("#0"); content.Find("500").GetComponent().text = TimeSpan.FromSeconds(item.Speed).ToString().Substring(3, 5); content.Find("Power").GetComponent().text = item.Power.ToString("#0"); diff --git a/Assets/Scripts/UIManager.cs b/Assets/Scripts/UIManager.cs index 2a56693c..992702cd 100644 --- a/Assets/Scripts/UIManager.cs +++ b/Assets/Scripts/UIManager.cs @@ -365,7 +365,7 @@ public class UIManager : MonoBehaviour } public static void ShowRowerTaskPanel(Action callBack, RowerTaskPanel.RowerType type) { - UIManager.Instance.RowerTaskPanel.rowerType = type; + UIManager.Instance.RowerTaskPanel.rowerType = new RowerTaskPanel.RowerType() { value = type.value,type= type.type }; UIManager.Instance.RowerTaskPanel.callBack = callBack; UIManager.Show(UIManager.Instance.RowerTaskPanel, null, true); }