Merge branch 'dev_cyp1' into dev_ar_cyp

# Conflicts:
#	Assets/Plugins/Android/unityandroidbluetoothlelib.jar
#	Assets/Resources/UI/language.json
#	Assets/Scenes/MainScene.unity
#	Assets/Scripts/Devices/Ble/mobile/BleMobileInterface.cs
#	Assets/Scripts/Devices/Ble/mobile/BleMobileThread.cs
#	Assets/Scripts/Scenes/MainController.cs
#	Assets/Scripts/UI/Prefab/Panel/RowerHomeScript.cs
#	Assets/Scripts/UI/Prefab/Rower/RowerDeviceView.cs
#	Assets/Scripts/UI/Prefab/Rower/RowerGraphChartFeed.cs
#	Assets/Scripts/UIManager.cs
This commit is contained in:
lishuo committed 2022-06-27 10:36:20 +08:00
commit 1d015706db
41 files changed
+14379 -166815

No files matched your search

+377 -166
View File
@@ -17,12 +17,14 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.UI;
using static RowerTaskPanel;
using Assets.Scripts.Ble.Commands;
public class RowerHomeScript : PFUIPanel
{
private class TempRowerCalc
private class TempRowerCalc
{
public int power { get; set; }
public ushort pace { get; set; }
@@ -52,19 +54,20 @@ public class RowerHomeScript : PFUIPanel
protected override void OnDestroy()
{
Debug.Log("銷毀");
if (RowerData != null)
if (RowerData != null)
{
RowerData.PullChanged -= PaintPullCurve;
RowerData.StartEvent -= StartFunc;
RowerData.CompleteEvent -= CompelteFunc;
RowerData.RowerResChanged -= ResChanged;
}
C2RowerData.EnableChanged -= ModeChanged;
}
private IRowerDevice Rower
private IRowerDevice Rower
{
get
{
var device = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType.Rower);
var device = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => d.State == DeviceState.Connected && d.Sensor == SensorType.Rower);
if (device != null)
{
return (IRowerDevice)device;
@@ -75,9 +78,9 @@ public class RowerHomeScript : PFUIPanel
/// <summary>
/// 心率数据
/// </summary>
private int? HeartRate
private int? HeartRate
{
get
get
{
var device = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType.HeartRate);
if (device != null)
@@ -88,12 +91,12 @@ public class RowerHomeScript : PFUIPanel
}
}
GameObject btnStart;
Transform left, bottom, mid,rmydata;
Transform left, bottom, mid, rmydata;
Image leftImage;
Image rightImage;
float timer = 1.0f;
float timer = 0f;
List<DoubleVector2> pullList, historyPullList;
public Dictionary<object, Sprite> spriteDict,spriteDict2;
public Dictionary<object, Sprite> spriteDict, spriteDict2;
List<string> records;
List<TempRowerCalc> values;
DateTime startTime;
@@ -127,7 +130,7 @@ public class RowerHomeScript : PFUIPanel
{
Id = Guid.NewGuid().ToString();
rowerType = new RowerType() { type = 1, value = 500 };
spriteDict = new Dictionary<object, Sprite>()
{
{"Start",Resources.Load<Sprite>("Images/RowerNew/ICON_continue_44") },
@@ -201,30 +204,26 @@ public class RowerHomeScript : PFUIPanel
UIManager.AddEvent(transform.Find("ResBar/BtnAdd").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
{
if (RowerData != null)
if (RowerData != null)
{
slider.GetComponent<PFUISlider>().SetValue((RowerData.ResistanceLevel + 1 - 50) / 300f);
}
});
UIManager.AddEvent(transform.Find("ResBar/BtnSub").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
{
if (RowerData != null)
if (RowerData != null)
{
slider.GetComponent<PFUISlider>().SetValue((RowerData.ResistanceLevel - 1 - 50) / 300f);
}
});
slider.GetComponent<PFUISlider>().valueHandler = (a) => 50 + a * 300;
slider.GetComponent<PFUISlider>().SetValueChanged(r =>
{
var v = (ushort)Math.Round((r * 300));
print("设置阻力" + v);
if (Rower != null)
{
Rower.SetResistanceLevel(v);
//RowerData.
}
StartCoroutine(SetResistanceLevel(v));
});
//transform.Find("Ready/DeviceStatus").gameObject.SetActive(!flag);
//transform.Find("Ready/DeviceStatusConnect").gameObject.SetActive(flag);
@@ -238,26 +237,39 @@ public class RowerHomeScript : PFUIPanel
if (checkRowing()) return;
UIManager.ShowRowerDevicePanel();
});
UIManager.AddEvent(transform.Find("Stopped/DeviceStatus").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
{
//if (checkRowing()) return;
UIManager.ShowRowerDevicePanel();
});
UIManager.AddEvent(transform.Find("Stopped/DeviceStatusConnect").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
{
//if (checkRowing()) return;
UIManager.ShowRowerDevicePanel();
});
//手机版tab
#if UNITY_ANDROID || UNITY_IOS
var nav = transform.Find("MainNav-mobile").GetComponent<NewMainNav>();
var c1 = new NewMainNav.CustomButton(Resources.Load<Sprite>("Images/RowerNew/ICON_create_44"), () =>
{
//UIManager.ShowRowerWelldone("33171855-66FC-4121-935C-0F4DA98E5BB2", Init);
//UIManager.ShowRowerWelldone("31C5A37D-6ADD-4EE1-B6DA-5AA2F9949C4B", Init);
//return;
//UIManager.ShowRowerWelldone("C0F81E83-120B-4A2C-AD0E-8BC1B8EB3E74", Init);
//return;
if (checkRowing()) return;
if (C2RowerData.IsEnabled == true && C2RowerData.rowerType != null) return;
UIManager.ShowRowerTaskPanel(type=>
//if (C2RowerData.IsEnabled == true && C2RowerData.rowerType != null) return;
UIManager.ShowRowerTaskPanel(type =>
{
rowerType = type;
if(C2RowerData.IsEnabled)
HandleC2RowerTaskPanel(type);//处理app自定义课程同步到c2划船机
HandleSelectType();
},rowerType);
}, rowerType);
}, false);
var c2 = new NewMainNav.CustomButton(Resources.Load<Sprite>("Images/RowerNew/记录"), () =>
var c2 = new NewMainNav.CustomButton(Resources.Load<Sprite>("Images/RowerNew/记录"), () =>
{
if (checkRowing()) return;
UIManager.ShowResultListPanel();
}, false);
btnStart = transform.Find("MainNav-mobile/Custom2").gameObject;
@@ -278,25 +290,56 @@ public class RowerHomeScript : PFUIPanel
{
Discard();
});
if (RowerData != null)
if (RowerData != null)
{
RowerData.PullChanged -= PaintPullCurve;
RowerData.PullChanged += PaintPullCurve;
RowerData.StartEvent -= StartFunc;
RowerData.StartEvent += StartFunc;
RowerData.CompleteEvent -= CompelteFunc;
RowerData.CompleteEvent += CompelteFunc;
}
rowerType = new RowerType { type = 1, value = 500 };
HandleSelectType();
Init();
isFirstReset = false;
}
void HandleC2RowerTaskPanel(RowerType rowerType)
{
if (!C2RowerData.IsEnabled)
return;
RowerCommand currentCommand = RowerCommand.JustRow;
if (rowerType.type == 0 && rowerType.value == 0)
{
currentCommand = RowerCommand.JustRow;
}
if (rowerType.type == 1 && rowerType.value >= 100)
{
currentCommand = RowerCommand.FixedDistance;
}
if (rowerType.type == 2 && rowerType.value > 0)
{
currentCommand = RowerCommand.FixedTime;
}
Rower?.SendCommand(currentCommand, (int)rowerType.value);
}
IEnumerator SetResistanceLevel(ushort res)
{
yield return new WaitForSeconds(0.1f);
if (Rower != null)
{
Rower.SetResistanceLevel(res);
}
}
RowerResultModel reRowData = null;
public void ReRow(RowerResultModel r)
{
this.reRowData = r;
if (r!= null && r.Type.HasValue)
if (r != null && r.Type.HasValue)
{
rowerType = new RowerType { type = r.Type.Value,value = (float)r.TypeValue.Value };
rowerType = new RowerType { type = r.Type.Value, value = (float)r.TypeValue.Value };
if (Rower != null)
{
Rower.Reset();
@@ -308,17 +351,34 @@ public class RowerHomeScript : PFUIPanel
if (rowerType.type == 0)
{
dw = $"\nM/ 30Min";
}
else if (rowerType.type == 2)
}
else if (rowerType.type == 2)
{
dw = $"\nM";
}
bottom.Find("Expected/Title").GetComponent<Text>().text = $"{App.GetLocalString("EST")}{dw}";
}
}
private void Discard()
private void DeleteCacheDir()
{
//删除实时记录
try
{
var dir = $"{PFConstants.RowerRecordCacheFolder}/{App.CurrentUser.Id}/";
if (Directory.Exists(dir))
{
Helper.DelectDir(dir);
//Directory.Delete(dir, true);
}
}
catch (Exception e)
{
Debug.LogError(e.ToString());
}
}
private void Discard()
{
openTimer = false;
if (Application.internetReachability == NetworkReachability.NotReachable)
{
transform.Find("Stopped").gameObject.SetActive(true);
@@ -326,8 +386,9 @@ public class RowerHomeScript : PFUIPanel
return;
}
transform.Find("Stopped").gameObject.SetActive(false);
openTimer = false;
isPause = true;
DeleteCacheDir();
historyTime = 0;
if (C2RowerData.IsEnabled == true)
{
Utils.showToast(null, "Press \"Menu\" to save.", int.MaxValue, stopFunc: () => C2RowerData.isReadyStatus, endCallback: Init);
@@ -362,12 +423,17 @@ public class RowerHomeScript : PFUIPanel
//Utils.showToast(null, "请滑动划船机并开始", isLowest: true, type: 1);
}
protected override void OnDisable()
{
base.OnDisable();
//App.MainDeviceAdapter.StopScan();
}
public override void Show()
{
base.Show();
//var mainNav = this.transform.Find("MainNav").GetComponent<MainNav>();
//mainNav.ShowRowerTab();
//App.MainDeviceAdapter.StartScan();
transform.MyDOFade();
//Debug.Log("140,开始扫描");
//App.MainDeviceAdapter.StartScan();
@@ -375,18 +441,18 @@ public class RowerHomeScript : PFUIPanel
CheckLocalData();
//transform.Find("Left/Rower").GetComponent<RowerAnimation>().StartAnimation();
}
void Disconnect()
void Disconnect()
{
foreach(var d in App.MainDeviceAdapter.GetDevices())
foreach (var d in App.MainDeviceAdapter.GetDevices())
{
if ((d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && (d.Sensor == SensorType.Rower || d.Sensor == SensorType.HeartRate))
if ((d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && (d.Sensor == SensorType.Rower || d.Sensor == SensorType.HeartRate))
{
d.Disconnect();
}
}
App.MainDeviceAdapter.StopScan();
}
void HandleDiscardDirect()
void HandleDiscardDirect()
{
openTimer = false;
isPause = true;
@@ -395,7 +461,7 @@ public class RowerHomeScript : PFUIPanel
btnStart.tag = "Start";
Init();
}
void HandleSaveDirect()
void HandleSaveDirect()
{
openTimer = false;
isPause = true;
@@ -410,7 +476,7 @@ public class RowerHomeScript : PFUIPanel
{
if (Save()) Init();
}
else
else
{
if (SaveFunc(tempRecordData.model, tempRecordData.files)) Init();
}
@@ -420,7 +486,7 @@ public class RowerHomeScript : PFUIPanel
{
Utils.showToast(null, "Press \"Menu\" to save.", int.MaxValue, stopFunc: () => C2RowerData.isReadyStatus, endCallback: f);
}
else
else
{
f.Invoke();
}
@@ -429,9 +495,29 @@ public class RowerHomeScript : PFUIPanel
int truelyTime = 0;
private void StartFunc(object sender, EventArgs e)
{
var bleDevice = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType.Rower) as BleDevice;
if (bleDevice != null)
{
deviceName = bleDevice.Name;
deviceNetwork = bleDevice.Network.ToString();
deviceAddress = bleDevice.Address;
deviceSensor = bleDevice.Sensor.ToString();
}
var rowdata = (IRowerCommonData)sender;
if (rowdata != RowerData)
return;
Debug.Log($"开始了:{openTimer}-{DateTime.Now}");
if (UIManager.Instance.confirm != null && UIManager.Instance.confirm.IsActive())
{
print("当前有弹窗");
return;
}
if (openTimer) return;
Id = Guid.NewGuid().ToString();
if (transform.parent.parent.Find("ModalPanel/RowerWelldone(Clone)") && transform.parent.parent.Find("ModalPanel/RowerWelldone(Clone)").gameObject.activeInHierarchy)
if (transform.parent.parent.Find("ModalPanel/RowerWelldone(Clone)") && transform.parent.parent.Find("ModalPanel/RowerWelldone(Clone)").gameObject.activeInHierarchy)
{
return;
}
@@ -443,7 +529,7 @@ public class RowerHomeScript : PFUIPanel
}
if (!isPause)
{
}
if (!openTimer)
{
@@ -452,7 +538,7 @@ public class RowerHomeScript : PFUIPanel
truelyTime = historyTime;
//TimerTicks();
openTimer = true;
timer = 1.0f;
timer = 0f;
}
transform.Find("Ready").gameObject.SetActive(false);
//if (UIManager.Instance.RowerWelldone)
@@ -462,15 +548,49 @@ public class RowerHomeScript : PFUIPanel
btnStart.GetComponent<Image>().sprite = spriteDict["Untagged"];
btnStart.tag = "Untagged";
}
private bool SaveFunc(RowerRecordModel model, List<string> files)
private void CompelteFunc(object sender, EventArgs e)
{
if (Application.internetReachability == NetworkReachability.NotReachable)
var rowdata = (IRowerCommonData)sender;
if (rowdata != RowerData)
return;
var heartRate = HeartRate ?? 0;
var energy = RowerData.TotalEnergy;
var strokeCount = RowerData.StrokeCount;
var power = RowerData.InstantaneousPower;
var rate = RowerData.StrokeRate;
if (rowerType.type == 1)
{
TimeText.text = $"{RowerData.ElapsedTime}";
KMText.text = "0";
}
else
{
TimeText.text = TimeSpan.FromSeconds(0).ToPFString();
KMText.text = $"{RowerData.TotalDistance}";
}
records.Add($"{strokeCount},{RowerData.ElapsedTime},{RowerData.TotalDistance},{RowerData.InstantaneousPower},{RowerData.InstantaneousPace},{RowerData.StrokeRate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{RowerData.ElapsedTime}");
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 bool SaveFunc(RowerRecordModel model, List<string> files)
{
if (Application.internetReachability == NetworkReachability.NotReachable)
{
transform.Find("Stopped").gameObject.SetActive(true);
Utils.showToast(null, App.GetLocalString("Please check the network status!"));
tempRecordData = new TempRecordData(model, files);
return false;
}
model.ManufacturerName = deviceName + " " + deviceNetwork + " " + deviceSensor;
model.DeviceNumber = $"{ deviceAddress },{ deviceSensor }";
var res = ConfigHelper.rowerApi.Add(model, files);
if (res.result)
{
@@ -481,6 +601,7 @@ public class RowerHomeScript : PFUIPanel
{
File.Delete(files[0]);
}
DeleteCacheDir();
}
catch (Exception ex)
{
@@ -494,31 +615,47 @@ public class RowerHomeScript : PFUIPanel
tempRecordData = null;
return true;
}
public class TempRecordData
public class TempRecordData
{
public RowerRecordModel model;
public List<string> files;
public TempRecordData(RowerRecordModel model, List<string> files)
public TempRecordData(RowerRecordModel model, List<string> files)
{
this.model = model;
this.files = files;
}
}
TempRecordData tempRecordData;
private bool Save()
private string deviceName { get; set; }
private string deviceNetwork { get; set; }
private string deviceSensor { get; set; }
private string deviceAddress { get; set; }
private bool Save(string shadowids = null)
{
var bleDevice = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType.Rower) as BleDevice;
RowerRecordModel model = new RowerRecordModel();
model.Ticks = records.Count;
if (bleDevice != null)
var bleDevice = App.MainDeviceAdapter.GetDevices().FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType.Rower) as BleDevice;
if (bleDevice != null)
{
model.ManufacturerName = bleDevice.Name + " " + bleDevice.Network + " " + bleDevice.Sensor;
model.DeviceNumber = $"{ bleDevice.Address },{ bleDevice.Sensor }";
}
else
{
model.ManufacturerName = deviceName + " " + deviceNetwork + " " + deviceSensor;
model.DeviceNumber = $"{ deviceAddress },{ deviceSensor }";
}
model.Id = Id;//Guid.NewGuid().ToString();
model.Weight = App.CurrentUser.Weight;
model.Kj = RowerData.TotalEnergy;
model.StartTime = startTime;
if (string.IsNullOrEmpty(shadowids))
{
model.StartTime = startTime;
}
else
{
model.StartTime = createTime.Value.AddSeconds(-values.Count);
}
model.CreateTime = createTime.Value;
Debug.Log(values.Count);
if (values.Count > 0)
@@ -536,11 +673,13 @@ public class RowerHomeScript : PFUIPanel
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.Kj = values.Max(x => x.energy);
}
model.TotalTime = RowerData.ElapsedTime;
model.TotalTime = records.Count;
model.Type = rowerType.type == 0 ? (int?)null : rowerType.type;
model.TypeValue = rowerType.value == 0 ? (float?)null : rowerType.value;
model.ShadowIds = string.Join(",",GetComponent<RowerMultiModeScript>().shadowList.Select(x=>x.Nid));
model.ShadowIds = string.IsNullOrEmpty(shadowids)?string.Join(",",GetComponent<RowerMultiModeScript>().shadowList.Select(x=>x.Nid)):shadowids;
var path = PFConstants.RowerRecordFolder + "/" + model.Id;
Helper.CreateDirectoryIfNotExsit(path);
var files = new List<string>();
@@ -573,15 +712,21 @@ public class RowerHomeScript : PFUIPanel
private void Init()
{
ResetChart();
deviceName = "";
deviceNetwork = "";
deviceAddress = "";
deviceSensor = "";
pointCount = 0;
print("初始化");
if (RowerData != null)
{
RowerData.Reset();
}
if (Rower != null)
if (Rower != null)
{
Rower.Reset();
}
//if (RowerData != null)
//{
// RowerData.Reset();
//}
GetComponent<RowerMultiModeScript>().GetShadowList(rowerType, reRowData);
btnStart.tag = "Start";
btnStart.GetComponent<Image>().sprite = spriteDict["Start"];
@@ -674,6 +819,8 @@ public class RowerHomeScript : PFUIPanel
RowerData.PullChanged += PaintPullCurve;
RowerData.StartEvent -= StartFunc;
RowerData.StartEvent += StartFunc;
RowerData.CompleteEvent -= CompelteFunc;
RowerData.CompleteEvent += CompelteFunc;
RowerData.RowerResChanged -= ResChanged;
RowerData.RowerResChanged += ResChanged;
}
@@ -684,13 +831,15 @@ public class RowerHomeScript : PFUIPanel
private void ResChanged(object sender, EventArgs e)
{
if ((Convert.ToSingle(sender) >= 50) && slider)
var originData = (IRowerCommonData)sender;
if (slider && RowerData!= null && originData == RowerData)
{
slider.GetComponent<PFUISlider>().SetValue((Convert.ToSingle(sender) - 50) / 300f);
var origin = RowerData.ResistanceLevel;
var wrapped = origin< 50 ? 50 : origin;
slider.GetComponent<PFUISlider>().SetValue((wrapped - 50) / 300f,false);
}
}
public bool checkRowing()
{
if (seconds > 0)
@@ -735,36 +884,55 @@ public class RowerHomeScript : PFUIPanel
private Text rmyAvgForceText { get; set; }
private Text PeakForceText { get; set; }
private Text rmyPeakForceText { get; set; }
private bool interruptFlag{ get; set; }
void TimerTicks()
void TimerTicks()
{
var heartRate = HeartRate ?? 0;
#if UNITY_EDITOR
var a = tempList[(tempx++) % tempList.Count];
//Debug.Log(a);
PaintPullCurve((ushort)(a / 10));
if (RowerData == null) return;
#endif
#if !UNITY_EDITOR
//#if !UNITY_EDITOR
if (Rower == null)
{
HandleDiscardDirect();
interruptFlag = true;
//HandleDiscardDirect();
isPause = true;
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Save the game?"), () =>
{
HandleSaveDirect();
UIManager.CloseConfirm();
interruptFlag = false;
}, 2, ()=> {
Init();
interruptFlag = false;
});
return;
}
if (interruptFlag) {
transform.Find("Stopped").gameObject.SetActive(false);
return;
}
if (RowerData == null) return;
#endif
var heartRate = HeartRate ?? 0;
BPMText.text = heartRate.ToString();
//断线重连继续
//#endif
//断线重连继续()
var distance = (int)RowerData.TotalDistance + historyDistance;
var energy = RowerData.TotalEnergy + historyEnergy;
var strokeCount = RowerData.StrokeCount + historyStrokeCount;
var power = RowerData.InstantaneousPower;
var rate = RowerData.StrokeRate;
truelyTime++;
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 + historyDistance)
if (totalDistance == RowerData.TotalDistance && !c2notStop)
{
//判定一次停止
stopSeconds++;
@@ -776,6 +944,12 @@ public class RowerHomeScript : PFUIPanel
}
if (stopSeconds >= 2)
{
Debug.Log($"stopSeconds:{RowerData.TotalDistance}");
if (UIManager.Instance.confirm != null && UIManager.Instance.confirm.IsActive()) {
Debug.Log("stopSeconds >= 2");
transform.Find("Stopped").gameObject.SetActive(false);
return;
}
transform.Find("Stopped").gameObject.SetActive(true);
//if (stopSeconds == 6)
//{
@@ -897,18 +1071,19 @@ public class RowerHomeScript : PFUIPanel
KMText.text = totalDistance.ToString();
}
records.Add($"{strokeCount},{RowerData.ElapsedTime},{distance},{RowerData.InstantaneousPower},{RowerData.InstantaneousPace},{RowerData.StrokeRate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}");
tmpdata = new TempRowerCalc() { strokeCount = strokeCount, pace = pace, power = power, rate = rate, heartRate = heartRate, distance = distance, energy = energy };
values.Add(tmpdata);
SendDataToRace(tmpdata);
if (C2RowerData.IsEnabled == true && C2RowerData.isReadyStatus && values.Count()>10)
if (truelyTime > 0)
{
HandleSaveDirect();
records.Add($"{strokeCount},{RowerData.ElapsedTime},{distance},{RowerData.InstantaneousPower},{RowerData.InstantaneousPace},{RowerData.StrokeRate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}");
tmpdata = new TempRowerCalc() { strokeCount = strokeCount, pace = pace, power = power, rate = rate, heartRate = heartRate, distance = distance, energy = energy };
values.Add(tmpdata);
SendDataToRace(tmpdata);
}
if (ticks % 5 == 0)
{
SaveRealTimes();//实时保存数据
}
truelyTime++;
}
//检查本地数据
int historyDistance = 0,historyStrokeCount = 0,historyEnergy = 0;
@@ -924,44 +1099,58 @@ public class RowerHomeScript : PFUIPanel
var files = Directory.GetFiles(dir);
if (files.Length == 0)
return;
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Continue the game?"), () =>
var historyRowerTime = PlayerPrefs.GetString("historyRowerTime");
deviceName = PlayerPrefs.GetString("deviceName");
deviceNetwork = PlayerPrefs.GetString("deviceNetwork");
deviceAddress = PlayerPrefs.GetString("deviceAddress");
deviceSensor = PlayerPrefs.GetString("deviceSensor");
if (!string.IsNullOrEmpty(historyRowerTime))
{
var str = File.ReadAllText(files[0]);
var list = str.Replace("\r\n", " ").Split(' ');
records.Clear();
foreach (var item in list)
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Save the game?"), () =>
{
if (!string.IsNullOrEmpty(item))
var str = File.ReadAllText(files[0]);
var list = str.Replace("\r\n", " ").Split(' ');
records.Clear();
foreach (var item in list)
{
records.Add(item);
}
//records.Add($"{strokeCount},{RowerData.ElapsedTime},{distance},{power},{pace},{rate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}");
var _re = records.LastOrDefault();
if (!string.IsNullOrEmpty(_re))
{
var datas = _re.Split(',');
historyStrokeCount = int.Parse(datas[0]);
historyDistance = int.Parse(datas[2]);
historyTime = int.Parse(datas[10]);
seconds = historyTime;
historyEnergy = int.Parse(datas[8]);
var historyRowerType = PlayerPrefs.GetString("historyRowerType");
if (!string.IsNullOrEmpty(historyRowerType))
if (!string.IsNullOrEmpty(item))
{
var typeObject = historyRowerType.Split(',');
rowerType = new RowerType() { type = int.Parse(typeObject[0]), value = float.Parse(typeObject[1]) };
HandleSelectType();
var datas = item.Split(',');
records.Add(item);
values.Add(new TempRowerCalc()
{
strokeCount = int.Parse(datas[0]),
pace = ushort.Parse(datas[4]),
power = int.Parse(datas[3]),
rate = uint.Parse(datas[5]),
heartRate = int.Parse(datas[7]),
distance = int.Parse(datas[2]),
energy = int.Parse(datas[8])
});
}
//records.Add($"{strokeCount}0,{RowerData.ElapsedTime},{distance}2,{power}3,{pace}4,{rate}5,{RowerData.ResistanceLevel},{heartRate}7,{energy}8,{RowerData.AveragePower},{truelyTime}");
}
}
Helper.DelectDir(dir);
UIManager.CloseConfirm();
}, 2,
() =>
{
Helper.DelectDir(dir);
UIManager.CloseConfirm();
});
var historyRowerType = PlayerPrefs.GetString("historyRowerType");
if (!string.IsNullOrEmpty(historyRowerType))
{
var typeObject = historyRowerType.Split(',');
rowerType = new RowerType() { type = int.Parse(typeObject[0]), value = float.Parse(typeObject[1]) };
}
createTime = UIManager.Now.GetDateTime();
Save(PlayerPrefs.GetString("historyRowerShadowIds"));
Helper.DelectDir(dir);
UIManager.CloseConfirm();
}, 2,
() =>
{
Helper.DelectDir(dir);
UIManager.CloseConfirm();
if (Rower != null)
{
Rower.Reset();
}
});
}
}
}
catch (Exception e)
@@ -981,7 +1170,16 @@ public class RowerHomeScript : PFUIPanel
Directory.CreateDirectory(dir);
}
File.WriteAllText(path, string.Join("\r\n", records));
//File.WriteAllText($"{PFConstants.RowerRecordCacheFolder}/cache.txt", string.Join("\r\n", App.cacheList));
PlayerPrefs.SetString("deviceName", deviceName);
PlayerPrefs.SetString("deviceNetwork", deviceNetwork);
PlayerPrefs.SetString("deviceAddress", deviceAddress);
PlayerPrefs.SetString("deviceSensor", deviceSensor);
PlayerPrefs.SetString("historyRowerType", $"{rowerType.type},{rowerType.value}");
PlayerPrefs.SetString("historyRowerTime", UIManager.Now.GetDateTime().ToString());
PlayerPrefs.SetString("historyRowerShadowIds", string.Join(",", GetComponent<RowerMultiModeScript>().shadowList.Select(x => x.Nid)));
//Debug.Log(Convert.ToDateTime());
}
catch (Exception e)
{
@@ -1005,7 +1203,10 @@ public class RowerHomeScript : PFUIPanel
void PaintPullCurve(object sender, EventArgs e)
{
//防止设备断开重连rowData对象发生变化,事件重复触发
var ftms = (IRowerCommonData)sender;
if (RowerData != ftms)
return;
//Debug.Log(ftms.PullValue);
PaintPullCurve(ftms.PullValue);
}
@@ -1013,8 +1214,7 @@ public class RowerHomeScript : PFUIPanel
int pointCount = 0;
void PaintPullCurve(ushort y)
{
Debug.Log("收到拉力" + y + ","+ DateTime.Now.Ticks);
//Debug.Log($"收到拉力 x={x} , y={y}");
//#if !UNITY_EDITOR
// if (!openTimer)
// {
@@ -1035,7 +1235,6 @@ public class RowerHomeScript : PFUIPanel
if (rate > 1) rate = 1f;
leftImage.fillAmount = rate;
rightImage.fillAmount = rate;
//动画
//left.Find("Rower").GetComponent<Image>().sprite = spriteDict[y / 67];
//曲线
@@ -1044,11 +1243,11 @@ public class RowerHomeScript : PFUIPanel
//if (pullList.Count == 0)
if(pointCount == 0)
{
ClearChart();
isPlay = true;
x = 0.1;
x = 0;
pointCount++;
pullList.Add(new DoubleVector2(x, y));
//SetChartData(pullList, historyPullList);
SetChartData(x, y);
}
//else if (pullList.Count > 1)
@@ -1058,19 +1257,19 @@ public class RowerHomeScript : PFUIPanel
pointCount++;
pullList.Add(new DoubleVector2(x, y));
SetChartData(x, y);
//SetChartData(pullList, historyPullList);
//historyPullList = pullList.Select(x => x).ToList();
historyPullList = pullList.Select(x => x).ToList();
pullList.Clear();
pointCount = 0;
ClearChart();
x = 0.1;
isPlay = true;
pullList.Add(new DoubleVector2(x, y));
//x = 0.1;
//SetChartData(x, y);
pointCount = 1;
//isPlay = true;
//pullList.Add(new DoubleVector2(x, y));
}
else
{
//只有0并且两秒没拉,曲线消失
if (stopSeconds == 1)
if (stopSeconds == 1)
{
ClearChart();
//SetChartData(new List<DoubleVector2>(), new List<DoubleVector2>());
@@ -1079,6 +1278,12 @@ public class RowerHomeScript : PFUIPanel
}
else
{
if (pullList.Count(x => x.y == 0) == pullList.Count)
{
ClearChart();
pointCount = 0;
//SetChartData(0.1, 0);
}
x += 0.1;
pointCount++;
pullList.Add(new DoubleVector2(x, y));
@@ -1107,18 +1312,23 @@ public class RowerHomeScript : PFUIPanel
}
void ClearChart()
{
rowerGraphChartFeed.ClearChart();
graphChartFeed.ClearChart();
if (x > 0)
{
rowerGraphChartFeed.ClearChart();
graphChartFeed.ClearChart();
x = 0;
}
}
void ResetChart() {
rowerGraphChartFeed?.ResetChart();
graphChartFeed?.ResetChart();
}
double preX, preY;
void SetChartData(double x, double y)
{
if (M1.localPosition.x == 0)
{
rowerGraphChartFeed.SetCurrentPoint(x, y);
var index = pullList.Count - 1 < 0 ? 0 : pullList.Count - 1;
var pre = pullList[index];
rowerGraphChartFeed.SetPrePoint(pre.x, pre.y);
rowerGraphChartFeed.SetHistoryData(x, historyPullList);
}
else
{
@@ -1131,7 +1341,7 @@ public class RowerHomeScript : PFUIPanel
//graph.DataSource.AddPointToCategoryRealtime("Player 2", item.x, item.y);
if (M1.localPosition.x == 0)
{
rowerGraphChartFeed.SetData(v1, v2);
rowerGraphChartFeed.SetData(v1, v2);
}
else
{
@@ -1143,60 +1353,49 @@ public class RowerHomeScript : PFUIPanel
int ticks { get; set; } = 0;
void Update()
{
#if UNITY_EDITOR
if (openTimer || true)
#else
if (openTimer)
#endif
shortTimer -= Time.deltaTime;
if (shortTimer <= 0)
{
timer -= Time.deltaTime;
shortTimer -= Time.deltaTime;
if (shortTimer <= 0)
{
ShortUpdateData();
shortTimer += 0.25f;
}
if (openTimer && timer <= 0)
ShortUpdateData();
shortTimer += 0.25f;
}
timer -= Time.deltaTime;
if (timer <= 0)
{
#if UNITY_EDITOR
if (openTimer || true)
#else
if (openTimer)
#endif
{
TimerTicks();
ticks++;
timer = 1f + timer;
}
}
staticTimer -= Time.deltaTime;
if (staticTimer <= 0)
{
var heartRate = HeartRate ?? 0;
BPMText.text = heartRate == 0 ? "---" : heartRate.ToString();
HandleStatic();
staticTimer += 1f;
}
//shortTimer -= Time.deltaTime;
//if (shortTimer <= 0)
//{
// if (openTimer)
// {
// ShortUpdateData();
// }
// shortTimer += 0.5f;
//}
timer += 1f ;
}
}
void ShortUpdateData()
{
if (!openTimer) return;
if (RowerData == null) return;
var power = RowerData.InstantaneousPower;
var rate = RowerData.StrokeRate;
var pace = RowerData.InstantaneousPace;
var strokeCount = RowerData.StrokeCount;
var distance = (int)RowerData.TotalDistance;
var energy = RowerData.TotalEnergy;
var strokeCount = RowerData.StrokeCount + historyStrokeCount;
var energy = RowerData.TotalEnergy + historyEnergy;
var heartRate = HeartRate ?? 0;
if (rowerType.type == 1 && totalDistance >=rowerType.value && !createTime.HasValue)
if (rowerType.type == 1 && totalDistance >= rowerType.value && !createTime.HasValue)
{
openTimer = false;
KMText.text = "0";
records.Add($"{strokeCount},{RowerData.ElapsedTime},{distance},{power},{pace},{rate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}");
var tmpdata = new TempRowerCalc() { strokeCount = strokeCount, pace = pace, power = power, rate = rate, heartRate = heartRate, distance = distance, energy = energy };
records.Add($"{strokeCount},{RowerData.ElapsedTime},{rowerType.value},{power},{pace},{rate},{RowerData.ResistanceLevel},{heartRate},{energy},{RowerData.AveragePower},{truelyTime}");
var tmpdata = new TempRowerCalc() { strokeCount = strokeCount, pace = pace, power = power, rate = rate, heartRate = heartRate, distance = (int)rowerType.value, energy = energy };
values.Add(tmpdata);
SendDataToRace(tmpdata);
HandleSaveDirect();
@@ -1212,19 +1411,31 @@ public class RowerHomeScript : PFUIPanel
MSText.text = rate.ToString();
}
bool isFirstReset = false;
void HandleStatic()
{
var flag = Rower != null && RowerData != null && !(UIManager.Instance.confirm != null && UIManager.Instance.confirm.IsActive());
if (transform.Find("Ready").gameObject.activeInHierarchy)
{
var flag = Rower != null && RowerData != null;
transform.Find("Ready/DeviceStatus").gameObject.SetActive(!flag);
transform.Find("Ready/Img").gameObject.SetActive(flag);
transform.Find("Ready/Text").gameObject.SetActive(flag);
transform.Find("Ready/DeviceStatusConnect").gameObject.SetActive(flag);
if (flag && RowerData.TotalDistance != 0)
{
Rower.Reset();
if(C2RowerData.IsEnabled)
RowerData.Reset();
}
}
if (transform.Find("Stopped").gameObject.activeInHierarchy)
{
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)
if (C2RowerData.IsEnabled == true && !openTimer && !isPause && C2RowerData.rowerType!=null && rowerType!= null && !rowerType.EqualTo(C2RowerData.rowerType))
{
rowerType = C2RowerData.rowerType;
HandleSelectType();