Unity Udexreal开发插件包
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

997 lines
28 KiB

using Auto_Calibration;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public class BleHandDriver : MonoBehaviour
{
private AndroidJavaClass AR1_linear_AA;
private AndroidJavaClass AR1_linear_AD;
private AndroidJavaClass AR1_linear_AE;
private AndroidJavaClass AR1_linear_AG;
private string Version;
public BleHandDriver(string _DeviceName)
{
DeviceName = _DeviceName;
if (PlayerPrefs.GetFloat($"{DeviceName}_X_Center") != 0)
{
x_center_data = PlayerPrefs.GetFloat($"{DeviceName}_X_Center");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_Y_Center") != 0)
{
y_center_data = PlayerPrefs.GetFloat($"{DeviceName}_Y_Center");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_X_MAX") != 0)
{
x_max_data = PlayerPrefs.GetFloat($"{DeviceName}_X_MAX");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_Y_MAX") != 0)
{
y_max_data = PlayerPrefs.GetFloat($"{DeviceName}_Y_MAX");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_X_MIN") != 0)
{
x_min_data = PlayerPrefs.GetFloat($"{DeviceName}_X_MIN");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_Y_MIN") != 0)
{
y_min_data = PlayerPrefs.GetFloat($"{DeviceName}_Y_MIN");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_DeadZone") != 0)
{
dead_zone = PlayerPrefs.GetFloat($"{DeviceName}_DeadZone");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_TriggerValue") != 0)
{
trigger_value = PlayerPrefs.GetFloat($"{DeviceName}_TriggerValue");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_GrabValue") != 0)
{
grab_value = PlayerPrefs.GetFloat($"{DeviceName}_GrabValue");
}
if (PlayerPrefs.GetFloat($"{DeviceName}_TrackpadValue") != 0)
{
trackpad_value = PlayerPrefs.GetFloat($"{DeviceName}_TrackpadValue");
}
AR1_linear_AA = new("com.example.ar1_linear1.AR1_linear_AA");
AR1_linear_AD = new("com.example.ar1_linear1.AR1_linear_AD");
AR1_linear_AE = new("com.example.ar1_linear1.AR1_linear_AE");
AR1_linear_AG = new("com.example.ar1_linear1.AR1_linear_AG");
}
public enum HandType
{
Left,
Right
}
public enum Axis
{
x = -3,
y = -2,
z = -1,
x_n,
y_n,
z_n
}
public enum CalibrationType
{
AdductFin = -2,
FistFin = -1,
None, //δ<EFBFBD>
Fist, //<EFBFBD><EFBFBD>ȭ
Adduct, //<EFBFBD><EFBFBD>£
Stretch, //<EFBFBD>ſ<EFBFBD>
Completed //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
private float f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17, f18;
private float a4 = 0,
a5 = 0,
a6 = 0,
a7 = 0,
a8 = 0,
a9 = 0,
a10 = 0,
a11,
a12 = 0,
a13 = 0,
a14 = 0,
a15;
private float n1 = 0,
n2 = 0,
n3 = 0,
n4 = 0,
n5 = 0,
n6 = 0,
n7 = 0,
n8 = 0,
n9 = 0,
n10 = 0,
n11 = 0,
n12 = 0,
n13 = 0,
n14 = 0,
n15 = 0;
private float h4 = 0,
h5 = 0,
h6 = 0,
h7 = 0,
h8 = 0,
h9 = 0,
h10 = 0,
h11 = 0,
h12 = 0,
h13 = 0,
h14 = 0,
h15 = 0,
h16 = 0,
h17 = 0;
private float m4 = 0,
m5 = 0,
m6 = 0,
m7 = 0,
m8 = 0,
m9 = 0,
m10 = 0,
m11 = 0,
m12 = 0,
m13 = 0,
m14 = 0,
m15 = 0;
private float dot4 = 0,
dot5 = 0,
dot6 = 0,
dot7 = 0,
dot8 = 0,
dot9 = 0,
dot10 = 0,
dot11 = 0,
dot12 = 0,
dot13 = 0,
dot14 = 0,
dot15 = 0;
private Queue<float> f4Queue = new Queue<float>();
private Queue<float> f5Queue = new Queue<float>();
private Queue<float> f6Queue = new Queue<float>();
private Queue<float> f7Queue = new Queue<float>();
private Queue<float> f8Queue = new Queue<float>();
private Queue<float> f9Queue = new Queue<float>();
private Queue<float> f10Queue = new Queue<float>();
private Queue<float> f11Queue = new Queue<float>();
private Queue<float> f12Queue = new Queue<float>();
private Queue<float> f13Queue = new Queue<float>();
private Queue<float> f14Queue = new Queue<float>();
private Queue<float> f15Queue = new Queue<float>();
private const int QUEUE_MAX_SIZE = 10;
public int HandDeviceIndex = 1;
public HandType Hand;
public Transform Wrist;
[Header("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵƫ<EFBFBD><EFBFBD>")]
public Axis Pitch = Axis.z;
public Axis Roll = Axis.x_n;
public Axis Yaw = Axis.y_n;
[Header("IMU<EFBFBD><EFBFBD><EFBFBD><EFBFBD>")] public bool HasIMU = false;
[Header("Ĵָ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ϵ<EFBFBD><EFBFBD>")][Range(0, 1)] public float coefficient = 0.6f;
[Header("Ĵָ<EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ƫ<EFBFBD><EFBFBD>")] public Vector3 Thumb1Offset;
public string DeviceName;
public float time;
string line;
private CalibrationType mCalibrationType = CalibrationType.None;
private double[] pre_sensor_data;
private List<double> angle_data = new();
private List<double> raw_data = new();
bool isCalibration = false;
private float x_center_data = 1850;
private float y_center_data = 1850;
private float x_max_data = 3750;
private float x_min_data = 620;
private float y_min_data = 620;
private float y_max_data = 3750;
private bool centerCalib = false;
private bool rangeCalib = false;
private float dead_zone = 0.15f;
private float trackpad_value = 0.3f;
private float trigger_value = 0.5f;
private float grab_value = 0.5f;
private InputData input;
private bool SaveCalibrationDataPermission = false;
private bool ReadControllerSavedData = true;
private int _curCalibTimes = 0;
public void Method_update()
{
if (time < 0)
{
time = 5;
}
else
{
time -= Time.deltaTime;
}
line = UDE_API.GetDeviceDataByName(DeviceName);
if (string.IsNullOrEmpty(line))
{
return;
}
//Debug.Log("Line " + line);
var data = line.Split(',');
raw_data = new();
foreach (string str in data)
{
raw_data.Add(Convert.ToDouble(str));
}
f4 = Convert.ToSingle(data[0]);
f5 = Convert.ToSingle(data[1]);
f6 = Convert.ToSingle(data[2]);
f7 = Convert.ToSingle(data[3]);
f8 = Convert.ToSingle(data[4]);
f9 = Convert.ToSingle(data[5]);
f10 = Convert.ToSingle(data[6]);
f11 = Convert.ToSingle(data[7]);
f12 = Convert.ToSingle(data[8]);
f13 = Convert.ToSingle(data[9]);
f14 = Convert.ToSingle(data[10]);
f15 = Convert.ToSingle(data[11]);
if (data.Length > 12 && data.Length <= 16)
{
f16 = Convert.ToSingle(data[12]);
f17 = Convert.ToSingle(data[13]);
f18 = Convert.ToSingle(data[14]);
}
else if (data.Length > 16)
{
f16 = Convert.ToSingle(data[16]);
f17 = Convert.ToSingle(data[17]);
f18 = Convert.ToSingle(data[18]);
}
if (ReadControllerSavedData)
{
ReadControllerSavedData = false;
var x_temp = PlayerPrefs.GetFloat(DeviceName + "_X_Center");
if (x_temp != 0)
{
x_center_data = x_temp;
y_center_data = PlayerPrefs.GetFloat(DeviceName + "_Y_Center");
}
var max_temp = PlayerPrefs.GetFloat(DeviceName + "_X_Max");
if (max_temp != 0)
{
x_max_data = max_temp;
x_min_data = PlayerPrefs.GetFloat(DeviceName + "_X_Min");
y_max_data = PlayerPrefs.GetFloat(DeviceName + "_Y_Max");
y_min_data = PlayerPrefs.GetFloat(DeviceName + "_Y_Min");
}
}
float f25 = (f16 - x_center_data) / ((x_max_data - x_min_data) / 2);
float f26 = (f17 - y_center_data) / ((y_max_data - y_min_data) / 2);
if (f25 > 1)
{
f25 = 1;
}
if (f25 < -1)
{
f25 = -1;
}
if (f26 > 1)
{
f26 = 1;
}
if (f26 < -1)
{
f26 = -1;
}
if (f25 <= dead_zone && f25 >= -dead_zone)
{
f25 = 0;
}
if (f26 <= dead_zone && f26 >= -dead_zone)
{
f26 = 0;
}
input = new InputData();
input.joyX = f25;
input.joyY = f26;
switch (f18)
{
case 1:
input.bButton = true;
break;
case 2:
input.aButton = true;
break;
case 3:
input.menu = true;
break;
case 4:
input.joyButton = true;
break;
case 5:
break;
case 6:
break;
case 7:
break;
}
if (centerCalib)
{
x_center_data = f16;
y_center_data = f17;
centerCalib = false;
PlayerPrefs.SetFloat(DeviceName + "_X_Center", f16);
PlayerPrefs.SetFloat(DeviceName + "_Y_Center", f17);
}
if (rangeCalib)
{
if (f16 > 600)
{
x_min_data = Math.Min(x_min_data, f16);
}
if (f16 < 3800)
{
x_max_data = Math.Max(x_max_data, f16);
}
if (f17 > 600)
{
y_min_data = Math.Min(y_min_data, f17);
}
if (f17 < 3800)
{
y_max_data = Math.Max(y_max_data, f17);
}
}
if (mCalibrationType == CalibrationType.None && PlayerPrefs.GetInt(DeviceName) == 1)
{
string[] CalibSavedData = PlayerPrefs.GetString(DeviceName + "_CalibDT").Split(",");
int index = 0;
n4 = float.Parse(CalibSavedData[index++]);
n5 = float.Parse(CalibSavedData[index++]);
n6 = float.Parse(CalibSavedData[index++]);
n7 = float.Parse(CalibSavedData[index++]);
n8 = float.Parse(CalibSavedData[index++]);
n9 = float.Parse(CalibSavedData[index++]);
n10 = float.Parse(CalibSavedData[index++]);
n11 = float.Parse(CalibSavedData[index++]);
n12 = float.Parse(CalibSavedData[index++]);
n13 = float.Parse(CalibSavedData[index++]);
n14 = float.Parse(CalibSavedData[index++]);
n15 = float.Parse(CalibSavedData[index++]);
h4 = float.Parse(CalibSavedData[index++]);
h5 = float.Parse(CalibSavedData[index++]);
h6 = float.Parse(CalibSavedData[index++]);
h7 = float.Parse(CalibSavedData[index++]);
h8 = float.Parse(CalibSavedData[index++]);
h9 = float.Parse(CalibSavedData[index++]);
h10 = float.Parse(CalibSavedData[index++]);
h11 = float.Parse(CalibSavedData[index++]);
h12 = float.Parse(CalibSavedData[index++]);
h13 = float.Parse(CalibSavedData[index++]);
h14 = float.Parse(CalibSavedData[index++]);
h15 = float.Parse(CalibSavedData[index]);
mCalibrationType = CalibrationType.Completed;
}
#region Dynamic Calibration
//if (_curCalibTimes < 1000)
//{
// if (m4 < f4)
// {
// m4 = f4;
// if (m4 < h4)
// {
// m4 = h4;
// }
// }
// if (m5 < f5)
// {
// m5 = f5;
// if (m5 < h5)
// {
// m5 = h5;
// }
// }
// if (m6 < f6)
// {
// m6 = f6;
// if (m6 < h6)
// {
// m6 = h6;
// }
// }
// if (m7 < f7)
// {
// m7 = f7;
// if (m7 < h7)
// {
// m7 = h7;
// }
// }
// if (m9 < f9)
// {
// m9 = f9;
// if (m9 < h9)
// {
// m9 = h9;
// }
// }
// if (m10 < f10)
// {
// m10 = f10;
// if (m10 < h10)
// {
// m10 = h10;
// }
// }
// if (m12 < f12)
// {
// m12 = f12;
// if (m12 < h12)
// {
// m12 = h12;
// }
// }
// if (m13 < f13)
// {
// m13 = f13;
// if (m13 < h13)
// {
// m13 = h13;
// }
// }
// if (m15 < f15)
// {
// m15 = f15;
// if (m15 < h15)
// {
// m15 = h15;
// }
// }
// _curCalibTimes++;
//}
//else
//{
// //Debug.LogError("<EFBFBD><EFBFBD>̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
// //Debug.LogError($"{_deviceName}:{m4},{m5},{m6},{m7},{m8},{m9},{m10},{m11},{m12},{m13},{m14},{m15}");
// // f4<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m4 < f4)
// {
// UpdateQueue(f4Queue, f4);
// if (f4Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f4Queue) < 10)
// {
// dot4 = f4 - m4;
// m4 = f4;
// n4 += dot4;
// h4 += dot4;
// }
// }
// // f5<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m5 < f5)
// {
// UpdateQueue(f5Queue, f5);
// if (f5Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f5Queue) < 10)
// {
// dot5 = f5 - m5;
// m5 = f5;
// n5 += dot5;
// h5 += dot5;
// }
// }
// // f6<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m6 < f6)
// {
// UpdateQueue(f6Queue, f6);
// if (f6Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f6Queue) < 10)
// {
// dot6 = f6 - m6;
// m6 = f6;
// n6 += dot6;
// h6 += dot6;
// }
// }
// // f7<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m7 < f7)
// {
// UpdateQueue(f7Queue, f7);
// if (f7Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f7Queue) < 10)
// {
// dot7 = f7 - m7;
// m7 = f7;
// n7 += dot7;
// h7 += dot7;
// }
// }
// // f9<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m9 < f9)
// {
// UpdateQueue(f9Queue, f9);
// if (f9Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f9Queue) < 10)
// {
// dot9 = f9 - m9;
// m9 = f9;
// n9 += dot9;
// h9 += dot9;
// }
// }
// // f10<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m10 < f10)
// {
// UpdateQueue(f10Queue, f10);
// if (f10Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f10Queue) < 10)
// {
// dot10 = f10 - m10;
// m10 = f10;
// n10 += dot10;
// h10 += dot10;
// }
// }
// // f12<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m12 < f12)
// {
// UpdateQueue(f12Queue, f12);
// if (f12Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f12Queue) < 10)
// {
// dot12 = f12 - m12;
// m12 = f12;
// n12 += dot12;
// h12 += dot12;
// }
// }
// // f13<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m13 < f13)
// {
// UpdateQueue(f13Queue, f13);
// if (f13Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f13Queue) < 10)
// {
// dot13 = f13 - m13;
// m13 = f13;
// n13 += dot13;
// h13 += dot13;
// }
// }
// // f15<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if (m15 < f15)
// {
// UpdateQueue(f15Queue, f15);
// if (f15Queue.Count == QUEUE_MAX_SIZE && CalculateVariance(f15Queue) < 10)
// {
// dot15 = f15 - m15;
// m15 = f15;
// n15 += dot15;
// h15 += dot15;
// }
// }
//}
#endregion
if (mCalibrationType == CalibrationType.Completed)
{
if (SaveCalibrationDataPermission)
{
//<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD>α궨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼һ<EFBFBD><EFBFBD>
SaveCalibrationDataPermission = false;
PlayerPrefs.SetInt(DeviceName, 1);
string DataSet = n4 + "," + n5 + "," + n6 + "," + n7 + "," + n8 + "," + n9 + "," + n10 + "," + n11 + "," + n12 + "," + n13 + "," + n14 + "," + n15 + ",";
DataSet += h4 + "," + h5 + "," + h6 + "," + h7 + "," + h8 + "," + h9 + "," + h10 + "," + h11 + "," + h12 + "," + h13 + "," + h14 + "," + h15;
PlayerPrefs.SetString(DeviceName + "_CalibDT", DataSet);
//Debug.Log("<EFBFBD>Ѽ<EFBFBD>¼<EFBFBD>±궨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
double[] org_f = new double[12] { f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15 };
double[] org_n = new double[12] { n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15 };
double[] org_h = new double[12] { h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, h14, h15 };
float nn = 100;
double[] org_a = Auto_Cali.AutoCali(org_f, org_n, org_h, nn);
a4 = Convert.ToSingle(org_a[0]);
a5 = Convert.ToSingle(org_a[1]);
a6 = Convert.ToSingle(org_a[2]);
a7 = Convert.ToSingle(org_a[3]);
a8 = Convert.ToSingle(org_a[4]);
a9 = Convert.ToSingle(org_a[5]);
a10 = Convert.ToSingle(org_a[6]);
a11 = Convert.ToSingle(org_a[7]);
a12 = Convert.ToSingle(org_a[8]);
a13 = Convert.ToSingle(org_a[9]);
a14 = Convert.ToSingle(org_a[10]);
a15 = Convert.ToSingle(org_a[11]);
double[][] Y = new double[12][];
for (int i = 0; i < 12; i++)
{
Y[i] = new double[1];
}
Y[0][0] = Convert.ToDouble(a4);
Y[1][0] = Convert.ToDouble(a5);
Y[2][0] = Convert.ToDouble(a6);
Y[3][0] = Convert.ToDouble(a7);
Y[4][0] = Convert.ToDouble(a8);
Y[5][0] = Convert.ToDouble(a9);
Y[6][0] = Convert.ToDouble(a10);
Y[7][0] = Convert.ToDouble(a11);
Y[8][0] = Convert.ToDouble(a12);
Y[9][0] = Convert.ToDouble(a13);
Y[10][0] = Convert.ToDouble(a14);
Y[11][0] = Convert.ToDouble(a15);
double[] b = new double[12];
b[0] = Convert.ToDouble(a4);
b[1] = Convert.ToDouble(a5);
b[2] = Convert.ToDouble(a6);
b[3] = Convert.ToDouble(a7);
b[4] = Convert.ToDouble(a8);
b[5] = Convert.ToDouble(a9);
b[6] = Convert.ToDouble(a10);
b[7] = Convert.ToDouble(a11);
b[8] = Convert.ToDouble(a12);
b[9] = Convert.ToDouble(a13);
b[10] = Convert.ToDouble(a14);
b[11] = Convert.ToDouble(a15);
if (pre_sensor_data == null)
{
pre_sensor_data = new double[12];
pre_sensor_data[0] = Convert.ToDouble(a4);
pre_sensor_data[1] = Convert.ToDouble(a5);
pre_sensor_data[2] = Convert.ToDouble(a6);
pre_sensor_data[3] = Convert.ToDouble(a7);
pre_sensor_data[4] = Convert.ToDouble(a8);
pre_sensor_data[5] = Convert.ToDouble(a9);
pre_sensor_data[6] = Convert.ToDouble(a10);
pre_sensor_data[7] = Convert.ToDouble(a11);
pre_sensor_data[8] = Convert.ToDouble(a12);
pre_sensor_data[9] = Convert.ToDouble(a13);
pre_sensor_data[10] = Convert.ToDouble(a14);
pre_sensor_data[11] = Convert.ToDouble(a15);
return;
}
double[] result = new double[26];
if (string.IsNullOrEmpty(DeviceName))
{
result = AR1_linear_AE.CallStatic<double[]>("Senser2Angle", b, pre_sensor_data);
Version = AR1_linear_AE.GetStatic<string>("Version");
}
else if (DeviceName[5] == 'A')
{
result = AR1_linear_AA.CallStatic<double[]>("Senser2Angle", b, pre_sensor_data);
Version = AR1_linear_AA.GetStatic<string>("Version");
}
else if (DeviceName[5] == 'B')
{
result = AR1_linear_AD.CallStatic<double[]>("Senser2Angle", b, pre_sensor_data);
Version = AR1_linear_AD.GetStatic<string>("Version");
}
else if (DeviceName[5] == 'C' || DeviceName[5] == 'D')
{
result = AR1_linear_AE.CallStatic<double[]>("Senser2Angle", b, pre_sensor_data);
Version = AR1_linear_AE.GetStatic<string>("Version");
}
else if (DeviceName[5] == 'E' || DeviceName[5] == 'F')
{
result = AR1_linear_AG.CallStatic<double[]>("Senser2Angle", b, pre_sensor_data);
Version = AR1_linear_AG.GetStatic<string>("Version");
}
if (DeviceName.Contains('L'))
{
string str = string.Empty;
for (int i = 0; i < result.Length; i++)
{
str += result[i] + ",";
}
Debug.LogError("Left Res: " + str);
}
Array.Copy(b, pre_sensor_data, pre_sensor_data.Length);
angle_data = new List<double>(result);
//Debug.Log("Debug " + angle_data.ToArray().ToString());
if (Math.Abs(result[5]) >= trigger_value * 100)
{
input.trgButton = true;
input.trgValue = (float)((Math.Abs(result[5]) - trigger_value * 100) / 65);
}
if (Math.Abs(result[9]) >= grab_value * 100 && Math.Abs(result[13]) >= grab_value * 100)
input.grab = true;
if (Math.Abs(result[0]) >= trackpad_value * 60)
{
input.trackpad_touch = true;
}
}
}
private float CalculateVariance(Queue<float> queue)
{
if (queue.Count == 0) return 0;
float mean = queue.Average();
return queue.Sum(x => (x - mean) * (x - mean)) / queue.Count;
}
void UpdateQueue(Queue<float> queue, float value)
{
if (queue.Count >= QUEUE_MAX_SIZE)
{
queue.Dequeue();
}
queue.Enqueue(value);
}
public bool StartCalibration(CalibrationType calibrationType)
{
if (isCalibration)
{
return false;
}
isCalibration = true;
mCalibrationType = calibrationType;
return true;
}
public bool StopCalibration(CalibrationType calibrationType)
{
//line = UDE_API.GetDeviceDataByName(DeviceName);
if (string.IsNullOrEmpty(line))
{
return false;
}
if (!isCalibration)
{
return false;
}
//Debug.Log(line);
//var data = line.Split(',');
//f4 = Convert.ToSingle(data[0]);
//f5 = Convert.ToSingle(data[1]);
//f6 = Convert.ToSingle(data[2]);
//f7 = Convert.ToSingle(data[3]);
//f8 = Convert.ToSingle(data[4]);
//f9 = Convert.ToSingle(data[5]);
//f10 = Convert.ToSingle(data[6]);
//f11 = Convert.ToSingle(data[7]);
//f12 = Convert.ToSingle(data[8]);
//f13 = Convert.ToSingle(data[9]);
//f14 = Convert.ToSingle(data[10]);
//f15 = Convert.ToSingle(data[11]);
//if (data.Length > 12 && data.Length <= 16)
//{
// f16 = Convert.ToSingle(data[12]);
// f17 = Convert.ToSingle(data[13]);
// f18 = Convert.ToSingle(data[14]);
//}
//else if (data.Length > 16)
//{
// f16 = Convert.ToSingle(data[16]);
// f17 = Convert.ToSingle(data[17]);
// f18 = Convert.ToSingle(data[18]);
//}
switch (calibrationType)
{
case CalibrationType.Fist:
h4 = f4;
h5 = f5;
h6 = f6;
h7 = f7;
h9 = f9;
h10 = f10;
h12 = f12;
h13 = f13;
h15 = f15;
isCalibration = false;
mCalibrationType = CalibrationType.FistFin;
SaveCalibrationDataPermission = true;
break;
case CalibrationType.Adduct:
n4 = f4;
n5 = f5;
n6 = f6;
n7 = f7;
n8 = f8;
n9 = f9;
n10 = f10;
n11 = f11;
n12 = f12;
n13 = f13;
n14 = f14;
n15 = f15;
isCalibration = false;
mCalibrationType = CalibrationType.AdductFin;
break;
case CalibrationType.Stretch:
h8 = f8;
h11 = f11;
h14 = f14;
isCalibration = false;
mCalibrationType = CalibrationType.Completed;
break;
}
return true;
}
public CalibrationType GetCalibrationType()
{
return mCalibrationType;
}
public List<double> GetAngleData()
{
return angle_data;
}
public List<double> GetRawData()
{
return raw_data;
}
public void CalibrationCenterData()
{
centerCalib = true;
ReadControllerSavedData = true;
}
public void StartCalibrationRangeData()
{
rangeCalib = true;
}
public void StopCalibrationRangeData()
{
PlayerPrefs.SetFloat($"{DeviceName}_X_MAX", x_max_data);
PlayerPrefs.SetFloat($"{DeviceName}_X_MIN", x_min_data);
PlayerPrefs.SetFloat($"{DeviceName}_Y_MAX", y_max_data);
PlayerPrefs.SetFloat($"{DeviceName}_Y_MIN", y_min_data);
ReadControllerSavedData = true;
rangeCalib = false;
}
public InputData GetInputData()
{
return input;
}
public void SetDeadZone(float dead_zone)
{
this.dead_zone = dead_zone;
PlayerPrefs.SetFloat($"{DeviceName}_DeadZone", dead_zone);
}
public float GetDeadZone()
{
return dead_zone;
}
public void SetTriggerValue(float trigger_value)
{
this.trigger_value = trigger_value;
PlayerPrefs.SetFloat($"{DeviceName}_TriggerValue", trigger_value);
}
public float GetTriggerValue()
{
return trigger_value;
}
public void SetGrabValue(float grab_value)
{
this.grab_value = grab_value;
PlayerPrefs.SetFloat($"{DeviceName}_GrabValue", grab_value);
}
public float GetGrabValue()
{
return grab_value;
}
public void SetTrackpadValue(float trackpad_value)
{
this.trackpad_value = trackpad_value;
PlayerPrefs.SetFloat($"{DeviceName}_TrackpadValue", trackpad_value);
}
public float GetTrackpadValue()
{
return trackpad_value;
}
public double[] GetCalibrationInfoOffset()
{
double[] calibration_info = new double[12];
double[] org_n = new double[12] { n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15 };
double[] org_h = new double[12] { h4, h5, h6, h7, h8, h9, h10, h11, h12, h13, h14, h15 };
for (int i = 0; i < 12; i++)
{
calibration_info[i] = Mathf.Abs((float)(org_n[i] - org_h[i]));
}
return calibration_info;
}
public string GetAlgorithmVerName()
{
return Version;
}
}