From 4d4f8feb8b77b6a36308516a73f6ee9870a2c578 Mon Sep 17 00:00:00 2001 From: lishuo Date: Thu, 30 Jun 2022 14:39:13 +0800 Subject: [PATCH] =?UTF-8?q?c2=E8=AF=BE=E7=A8=8B=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Android/unityandroidbluetoothlelib.jar | Bin 37487 -> 37537 bytes .../Prefab/Panel/Mobile/RowerWelldone.prefab | 50 +++++----- .../Scripts/Apis/Models/RowerRecordModel.cs | 9 +- Assets/Scripts/App.cs | 5 +- .../Devices/Ble/Characteristic/C2RowerData.cs | 68 ++++++------- .../Ble/Characteristic/FtmsRowerData.cs | 2 + .../Ble/Interfaces/IRowerCommonData.cs | 1 + Assets/Scripts/Scenes/MainController.cs | 2 +- .../UI/Prefab/Panel/RowerHomeScript.cs | 89 +++++++++--------- .../UI/Prefab/Rower/RowerMultiModeScript.cs | 2 + .../Scripts/UI/Prefab/Rower/RowerTaskPanel.cs | 2 +- .../Scripts/UI/Prefab/Rower/RowerWelldone.cs | 2 +- Assets/Scripts/UIManager.cs | 2 +- 13 files changed, 125 insertions(+), 109 deletions(-) diff --git a/Assets/Plugins/Android/unityandroidbluetoothlelib.jar b/Assets/Plugins/Android/unityandroidbluetoothlelib.jar index ee3ce4e1640387046908787de76be71675e51662..bc3603e2a5b6157beef82765980762b55a040606 100644 GIT binary patch delta 27327 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 Nr4t~KCjKY;{{SKx0JQ)B 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); }