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:
commit
1d015706db
41 files changed
+14379
-166815
No files matched your search
@@ -98,14 +98,15 @@ public class ActivityController : PFUIPanel
|
||||
webView.SetUserAgent($"UniWebView {Application.platform} {Application.version}");
|
||||
webView.BackgroundColor = Utils.HexToColorHtml("#23232d");
|
||||
//webView.CleanCache();
|
||||
if (action == null)
|
||||
{
|
||||
webView.Load(url);
|
||||
}
|
||||
else
|
||||
{
|
||||
action.Invoke();
|
||||
}
|
||||
webView.Load(url);
|
||||
//if (action == null)
|
||||
//{
|
||||
// webView.Load(url);
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// action.Invoke();
|
||||
//}
|
||||
// Show it.
|
||||
webView.Show();
|
||||
webView.OnMessageReceived -= FromJs;
|
||||
|
||||
@@ -44,6 +44,7 @@ public class ConnectDeviceModal : PFUIPanel
|
||||
private Dictionary<string, DeviceItem> deviceList;
|
||||
private Text noDevice,Title;
|
||||
private RectTransform searchIconRect;
|
||||
private GameObject deviceNotFound;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
@@ -52,6 +53,7 @@ public class ConnectDeviceModal : PFUIPanel
|
||||
deviceList = new Dictionary<string, DeviceItem>();
|
||||
|
||||
var container = this.transform.Find("GameObject");
|
||||
deviceNotFound = container.Find("Panel/Error").gameObject;
|
||||
var closeBtn = container.Find("CloseBtn");
|
||||
Logo = container.Find("Logo").GetComponent<Image>();
|
||||
Title = container.Find("Title").GetComponent<Text>();
|
||||
@@ -259,6 +261,7 @@ public class ConnectDeviceModal : PFUIPanel
|
||||
//如果没有可连接的设备按钮只读
|
||||
connectBtn.mButton.enabled = deviceList.Count > 0;
|
||||
connectBtn.mButton.interactable = deviceList.Count > 0;
|
||||
deviceNotFound.SetActive(deviceList.Count <= 0);
|
||||
}
|
||||
}
|
||||
//选中需要连接的设备
|
||||
@@ -285,7 +288,7 @@ public class ConnectDeviceModal : PFUIPanel
|
||||
}
|
||||
}
|
||||
|
||||
noDevice.text = deviceItemObj.DeviceInfo.Name + "-"+ deviceItemObj.DeviceInfo.DeviceNumber;
|
||||
noDevice.text = deviceItemObj.DeviceInfo.Name;
|
||||
if (deviceItemObj.DeviceInfo.State == DeviceState.Connected)
|
||||
{
|
||||
noDevice.color = Color.white;
|
||||
|
||||
@@ -71,11 +71,11 @@ public class DeviceItem : Selectable, IEventSystemHandler, IPointerClickHandler
|
||||
//signal.enabled = true;
|
||||
|
||||
var signalValue = DeviceInfo.SignalStrength * -1;
|
||||
if (signalValue >= 0 && signalValue <= 20)
|
||||
if (signalValue >= 0 && signalValue <= 30)
|
||||
{
|
||||
signal.sprite = Signal_1;
|
||||
}
|
||||
else if (signalValue > 20 && signalValue <= 60)
|
||||
else if (signalValue > 30 && signalValue <= 60)
|
||||
{
|
||||
signal.sprite = Signal_2;
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@ public class NewMainNav : MonoBehaviour
|
||||
{
|
||||
if (App.IsRowerMode == true)
|
||||
{
|
||||
if (UIManager.Instance.RowerHomeScript.checkRowing()) return;
|
||||
UIManager.ShowEditUserPanel();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Android;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class RowerDevicePanel : PFUIPanel
|
||||
@@ -10,6 +11,7 @@ public class RowerDevicePanel : PFUIPanel
|
||||
{
|
||||
UIManager.AddEvent(transform.Find("Container/Tools/Back").gameObject, UnityEngine.EventSystems.EventTriggerType.PointerClick, b =>
|
||||
{
|
||||
App.MainDeviceAdapter.StopScan();
|
||||
Close();
|
||||
});
|
||||
}
|
||||
@@ -25,6 +27,18 @@ public class RowerDevicePanel : PFUIPanel
|
||||
#if UNITY_ANDROID || UNITY_IOS
|
||||
#if UNITY_ANDROID
|
||||
Utils.CallAndroidMethod("OpenLocationService");
|
||||
if (!Permission.HasUserAuthorizedPermission(Permission.CoarseLocation))
|
||||
{
|
||||
Permission.RequestUserPermission(Permission.CoarseLocation);
|
||||
Permission.RequestUserPermission(Permission.FineLocation);
|
||||
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Powerfun need location service permission,please open the location permission.")
|
||||
, () => {
|
||||
UIManager.CloseConfirm();
|
||||
}, 2
|
||||
, () => {
|
||||
UIManager.CloseConfirm();
|
||||
});
|
||||
}
|
||||
#endif
|
||||
App.MainDeviceAdapter.StartScan();
|
||||
#endif
|
||||
|
||||
@@ -35,7 +35,7 @@ public class RowerDeviceView : MonoBehaviour
|
||||
private GameObject mDisconnectButton;
|
||||
private GameObject unconnectionPanel;
|
||||
private GameObject connectionPanel;
|
||||
private Text searchState;
|
||||
private Text searchState,connSearchState;
|
||||
private ConnectDeviceModal deviceModal;
|
||||
private Text title;
|
||||
private Text noDevice;
|
||||
@@ -58,7 +58,7 @@ public class RowerDeviceView : MonoBehaviour
|
||||
/// </summary>
|
||||
private Sprite sprite3;
|
||||
|
||||
private float timer = 1.0f;
|
||||
private float timer = 0f;
|
||||
private void Awake()
|
||||
{
|
||||
title = this.transform.Find("Title").GetComponent<Text>();
|
||||
@@ -69,7 +69,7 @@ public class RowerDeviceView : MonoBehaviour
|
||||
searchState = unconnectionPanel.transform.Find("SearchState").GetComponent<Text>();
|
||||
//mPairButton.SetActive(false);
|
||||
connectionPanel = this.transform.Find("ConnectionPanel").gameObject;
|
||||
|
||||
connSearchState = connectionPanel.transform.Find("SearchState").GetComponent<Text>();
|
||||
var material = Instantiate(Resources.Load<Material>("UI/Material/RoundedCornersTextureMaterial"));
|
||||
var rect = ((RectTransform)transform).rect;
|
||||
material.SetVector(Shader.PropertyToID("_WidthHeightRadius"), new Vector4(rect.width, rect.height, rect.height * 0.2f, 0));
|
||||
@@ -132,9 +132,10 @@ public class RowerDeviceView : MonoBehaviour
|
||||
var device = GetDevice();
|
||||
if (device != null && device.State == DeviceState.Connected)
|
||||
{
|
||||
UIManager.ShowConfirm("警告", "是否断开该设备?", () =>
|
||||
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Disconnect the device?"), () =>
|
||||
{
|
||||
device.Disconnect(false);
|
||||
DeviceCache.Remove(device);
|
||||
UIManager.CloseConfirm();
|
||||
}, 2, () => {
|
||||
UIManager.CloseConfirm();
|
||||
@@ -146,11 +147,12 @@ public class RowerDeviceView : MonoBehaviour
|
||||
}
|
||||
});
|
||||
UIManager.AddEvent(mDisconnectButton, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction<BaseEventData>(e => {
|
||||
UIManager.ShowConfirm("警告", "是否断开该设备?", () =>
|
||||
UIManager.ShowConfirm(App.GetLocalString("Warning"), App.GetLocalString("Disconnect the device?"), () =>
|
||||
{
|
||||
var device = GetDevice();
|
||||
if (device != null && device.State == DeviceState.Connected)
|
||||
{
|
||||
DeviceCache.Remove(device);
|
||||
device.Disconnect(false);
|
||||
}
|
||||
UIManager.CloseConfirm();
|
||||
@@ -271,9 +273,8 @@ public class RowerDeviceView : MonoBehaviour
|
||||
connectionPanel.SetActive(false);
|
||||
|
||||
logo.sprite = sprite0;
|
||||
noDevice.text = App.GetLocalString("NO DEVICE");
|
||||
searchState.text = App.GetLocalString("Searching...");
|
||||
|
||||
|
||||
var hasDevice = false;
|
||||
if (SensorType == SensorType.SpeedCadence)
|
||||
{
|
||||
@@ -283,6 +284,8 @@ public class RowerDeviceView : MonoBehaviour
|
||||
{
|
||||
hasDevice = App.MainDeviceAdapter.GetDevices().Any(d => d.Sensor == SensorType);
|
||||
}
|
||||
searchState.text = hasDevice ? App.GetLocalString("CHOOSE DEVICE") : App.GetLocalString("NO DEVICE");
|
||||
noDevice.text = "";// App.GetLocalString("NOCONN DEVICE"); //hasDevice ? App.GetLocalString("CHOOSE DEVICE") : ;
|
||||
if (hasDevice)
|
||||
{
|
||||
mSearchButton.SetActive(false);
|
||||
@@ -346,7 +349,6 @@ public class RowerDeviceView : MonoBehaviour
|
||||
}
|
||||
|
||||
logo.sprite = sprite3;
|
||||
|
||||
//title.text = connectedDevice.Name;
|
||||
if (connectedDevice.Network == NetworkType.BLE)
|
||||
{
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using UnityEngine;
|
||||
using ChartAndGraph;
|
||||
using System.Collections;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class RowerGraphChartFeed : MonoBehaviour
|
||||
@@ -42,14 +43,45 @@ public class RowerGraphChartFeed : MonoBehaviour
|
||||
}
|
||||
public void SetCurrentPoint(double x,double y)
|
||||
{
|
||||
if(dataSource != null)
|
||||
x += dataSource.HorizontalViewOrigin;
|
||||
Debug.Log($"SetCurrentPoint:{x}-{y}");
|
||||
|
||||
dataSource?.AddPointToCategoryRealtime("Player 2", x, y);
|
||||
}
|
||||
public void ClearChart()
|
||||
{
|
||||
dataSource?.ClearCategory("Player 1");
|
||||
dataSource?.ClearCategory("Player 2");
|
||||
if (dataSource != null)
|
||||
{
|
||||
dataSource.HorizontalViewOrigin += 10;
|
||||
SetCurrentPoint(0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void SetHistoryData(double x,List<DoubleVector2> list2 = null)
|
||||
{
|
||||
if (list2 != null && list2.Count > 0)
|
||||
{
|
||||
var offset = dataSource.HorizontalViewOrigin;
|
||||
graph.DataSource.AddPointToCategoryRealtime("Player 1", offset, 0);
|
||||
for (int i = 0; i < list2.Count; i++)
|
||||
{
|
||||
var item = list2[i];
|
||||
graph.DataSource.AddPointToCategoryRealtime("Player 1", item.x + offset, item.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void ResetChart()
|
||||
{
|
||||
if (dataSource != null)
|
||||
{
|
||||
dataSource.HorizontalViewOrigin = -0.03;
|
||||
dataSource.ClearCategory("Player 1");
|
||||
dataSource.ClearCategory("Player 2");
|
||||
}
|
||||
}
|
||||
|
||||
public void SetData(List<DoubleVector2> list,List<DoubleVector2> list2 = null)
|
||||
{
|
||||
if (graph != null)
|
||||
|
||||
@@ -10,6 +10,8 @@ using UnityEngine.UI;
|
||||
using Assets.Scripts.UI.Prefab.Login;
|
||||
using Newtonsoft.Json;
|
||||
using Assets.Scripts.UI.UIEffect;
|
||||
using UnityEngine.Networking;
|
||||
using Assets.Scripts.Apis;
|
||||
|
||||
public class RowerMultiModeScript : MonoBehaviour
|
||||
{
|
||||
@@ -197,49 +199,86 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
public int diff { get; set; }
|
||||
public int sumdiff { get; set; }
|
||||
}
|
||||
|
||||
public Dictionary<int, RankDiff> rankDiffDict;
|
||||
|
||||
private IEnumerator Get(string url,Action<JsonResult<List<RowerRank>>> callback)
|
||||
{
|
||||
var request = new UnityWebRequest(url, "GET");
|
||||
request.SetRequestHeader("Accept", "application/json");
|
||||
request.SetRequestHeader("User-Agent", "PowerFun UnityApp/2.1.3 Android");
|
||||
request.SetRequestHeader("Pf-User-Agent", "PowerFun UnityApp/2.1.3 Android");
|
||||
request.SetRequestHeader("Cookie", $"PowerFun.AUTH={App.CurrentUser.cookie}");
|
||||
request.SetRequestHeader("Language", App.GetLocalLanguage());
|
||||
request.SetRequestHeader("deviceUniqueIdentifier", App.DeviceUniqueIdentifier);
|
||||
request.SetRequestHeader("host", "pf.juze.pro");
|
||||
//request.SetRequestHeader("Accept-Encoding", "gzip, deflate");
|
||||
//defaultRequestHeaders.Add("deviceUniqueIdentifier", App.DeviceUniqueIdentifier);
|
||||
//defaultRequestHeaders.Remove("Language");
|
||||
//defaultRequestHeaders.Add("Language", App.GetLocalLanguage());
|
||||
request.downloadHandler = new DownloadHandlerBuffer();
|
||||
yield return request.SendWebRequest();
|
||||
if (request.isHttpError || request.isNetworkError)
|
||||
{
|
||||
Debug.LogError(request.error);
|
||||
}
|
||||
else
|
||||
{
|
||||
var res = JsonConvert.DeserializeObject<JsonResult<List<RowerRank>>>(request.downloadHandler.text, new JsonSerializerSettings
|
||||
{
|
||||
DateTimeZoneHandling = DateTimeZoneHandling.Local
|
||||
});
|
||||
callback.Invoke(res);
|
||||
//Debug.Log(request.downloadHandler.text);
|
||||
}
|
||||
}
|
||||
|
||||
public async void GetShadowList(RowerTaskPanel.RowerType rowerType, RowerResultModel reRowData)
|
||||
{
|
||||
this.rowerType = rowerType;
|
||||
currentSecond = GetComponent<RowerHomeScript>().historyTime - 1;
|
||||
//if(Application.internetReachability == NetworkReachability.NotReachable)
|
||||
var res = reRowData ==null? await ConfigHelper.rowerApi.GetShadowList(rowerType): await ConfigHelper.rowerApi.GetReRowShadowList(reRowData.Id);
|
||||
shadowList = res.data;
|
||||
|
||||
//foreach (var t in traceList)
|
||||
//{
|
||||
// t.userId = 0;
|
||||
// t.trace.gameObject.SetActive(false);
|
||||
//}
|
||||
var _tmpList = shadowList.Select(x => new TraceData
|
||||
|
||||
var url = $"{App.Host}Rower/GetShadowList?type={rowerType.type}&typeValue={rowerType.value}";
|
||||
if (reRowData != null)
|
||||
{
|
||||
list = x.list,
|
||||
NickName = x.NickName,
|
||||
Avatar = x.WxHeadImg,
|
||||
UserId = x.UserId,
|
||||
isMine = false,
|
||||
currentDistance = 0,
|
||||
Country = x.Country
|
||||
}).ToList();
|
||||
|
||||
myData = new TraceData();
|
||||
myData.list = new List<RowerChartModel>();
|
||||
myData.UserId = App.CurrentUser.Id;
|
||||
myData.NickName = App.CurrentUser.Nickname;
|
||||
myData.Avatar = App.CurrentUser.WxHeadImg;
|
||||
myData.isMine = true;
|
||||
myData.Country = App.CurrentUser.Country;
|
||||
_tmpList.Insert(_tmpList.Count / 2, myData);
|
||||
//_tmpList.Add(myData);
|
||||
userList = _tmpList.OrderByDescending(x => x.currentDistance).ToList();
|
||||
rankDiffDict = new Dictionary<int, RankDiff>();
|
||||
for (int i = 0; i < userList.Count; i++)
|
||||
{
|
||||
userList[i].currentRank = i + 1;
|
||||
rankDiffDict.Add(userList[i].UserId, new RankDiff { rank = userList[i].currentRank, diff = 0 });
|
||||
url = $"{App.Host}Rower/GetReRowShadowList?Id={reRowData.Id}";
|
||||
}
|
||||
DisplayUserRanks(true);
|
||||
DisplayTraces(true);
|
||||
StartCoroutine(Get(url, (res) =>
|
||||
{
|
||||
shadowList = res.data;
|
||||
var _tmpList = shadowList.Select(x => new TraceData
|
||||
{
|
||||
list = x.list,
|
||||
NickName = x.NickName,
|
||||
Avatar = x.WxHeadImg,
|
||||
UserId = x.UserId,
|
||||
isMine = false,
|
||||
currentDistance = 0,
|
||||
Country = x.Country
|
||||
}).ToList();
|
||||
|
||||
myData = new TraceData();
|
||||
myData.list = new List<RowerChartModel>();
|
||||
myData.UserId = App.CurrentUser.Id;
|
||||
myData.NickName = App.CurrentUser.Nickname;
|
||||
myData.Avatar = App.CurrentUser.WxHeadImg;
|
||||
myData.isMine = true;
|
||||
myData.Country = App.CurrentUser.Country;
|
||||
_tmpList.Insert(_tmpList.Count / 2, myData);
|
||||
//_tmpList.Add(myData);
|
||||
userList = _tmpList.OrderByDescending(x => x.currentDistance).ToList();
|
||||
rankDiffDict = new Dictionary<int, RankDiff>();
|
||||
for (int i = 0; i < userList.Count; i++)
|
||||
{
|
||||
userList[i].currentRank = i + 1;
|
||||
rankDiffDict.Add(userList[i].UserId, new RankDiff { rank = userList[i].currentRank, diff = 0 });
|
||||
}
|
||||
DisplayUserRanks(true);
|
||||
DisplayTraces(true);
|
||||
}));
|
||||
//App.Host + $"/Rower/GetShadowList?type={rowerType.type}&typeValue={rowerType.value}"
|
||||
//var res = reRowData == null ? await ConfigHelper.rowerApi.GetShadowList(rowerType) : await ConfigHelper.rowerApi.GetReRowShadowList(reRowData.Id);
|
||||
//return;
|
||||
}
|
||||
float GetStrokeSpeed(uint rate)
|
||||
{
|
||||
@@ -425,11 +464,11 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
}
|
||||
}
|
||||
//if(!data.isMine) diffWidth = 101;
|
||||
t.Find("Left/Rank").GetComponent<Text>().text = (userList.FindIndex(x => x.UserId == data.UserId) + 1).ToString("00");
|
||||
if (is0to100(diffWidth))
|
||||
{
|
||||
var tWidth = (diffWidth / 100f) * width;
|
||||
t.Find("Main/Boat").gameObject.SetActive(true);
|
||||
t.Find("Left/Rank").GetComponent<Text>().text = (userList.FindIndex(x => x.UserId == data.UserId) + 1).ToString("00");
|
||||
if (isAni)
|
||||
{
|
||||
t.Find("Main/Boat").DOLocalMoveX(21.5f + tWidth, 0.9f);
|
||||
@@ -951,6 +990,7 @@ public class RowerMultiModeScript : MonoBehaviour
|
||||
}
|
||||
private void DisplayUserRanks(bool isRefresh = false)
|
||||
{
|
||||
if (!scrollRank) return;
|
||||
if (isRefresh)
|
||||
{
|
||||
scrollRank.content.DestroyChildren();
|
||||
|
||||
@@ -22,6 +22,9 @@ public class RowerTaskPanel : PFUIPanel
|
||||
/// 里程:m 时间:s
|
||||
/// </summary>
|
||||
public float value { get; set; }
|
||||
public bool EqualTo(RowerType rowerType) {
|
||||
return this.type == rowerType.type && this.value == rowerType.value;
|
||||
}
|
||||
}
|
||||
Transform selector, distance, time;
|
||||
public RowerType rowerType;
|
||||
|
||||
@@ -124,7 +124,14 @@ public class RowerWelldone : PFUIPanel
|
||||
game.transform.Find("Content/Rank").GetComponent<Text>().text = item.rankNum.ToString("00");
|
||||
game.transform.Find("Content/NickName").GetComponent<Text>().text = item.NickName;
|
||||
Utils.DisplayImageTempDict(game.transform.Find("Content/Avatar").GetComponent<RawImage>(), item.WxHeadImg, caches);
|
||||
game.transform.Find("Content/Time").GetComponent<Text>().text = data.info.Type == 1 ? TimeSpan.FromSeconds(item.Ticks).ToString(@"hh\:mm\:ss") : item.TotalDistance.ToString("#0M");
|
||||
if (item.GradeStr.Contains("DNF"))
|
||||
{
|
||||
game.transform.Find("Content/Time").GetComponent<Text>().text = "DNF";
|
||||
}
|
||||
else
|
||||
{
|
||||
game.transform.Find("Content/Time").GetComponent<Text>().text = data.info.Type == 1 ? TimeSpan.FromSeconds(item.Ticks).ToString(@"hh\:mm\:ss") : item.TotalDistance.ToString("#0M");
|
||||
}
|
||||
game.transform.SetParent(rankContent);
|
||||
game.transform.localScale = Vector3.one;
|
||||
game.SetActive(true);
|
||||
|
||||
Reference in new issue
Block a user