using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading.Tasks;
using ModbusManager;
using UnityEngine;
using UnityEngine.UI; // 如果您使用的是UGUI
public class SteeringWheelController : MonoBehaviour
{
public static SteeringWheelController Instance;
public Button[] buttons;
private int selectedButtonIndex = 0; // 当前选中的按钮索引
private bool hasSelected = false; // 是否已经进行了选择
// 硬件获取的方向盘角度
private float steeringWheelAngle;
// 方向盘选择角度阈值和中立阈值
public float selectionAngleThreshold = 30.0f; // 例如,30度
public float neutralAngleThreshold = 5.0f; // 方向盘接近中立位置的阈值
public float testFloatV;
float minValue = -300f; // 范围的最小值
float maxValue = 300; // 范围的最大值
private int NewValue = -1;
private void Awake()
{
Instance = this;
}
private void Start()
{
ModBusQueue();
}
// void Update()
// {
// // 更新方向盘角度
// // UpdateSteeringWheelAngle();
//
// // 检查方向盘角度并更新选中的按钮
// CheckSteeringWheelAngle();
// }
public void SSSS()
{
testFloatV = 45;
}
public void AAAA()
{
testFloatV = 0;
}
public void BBB()
{
testFloatV = -45;
}
async Task ModBusQueue()
{
while (true)
{
// Debug.Log(client.modbusQueue.Count);
if (ModbusTcpClient.modbusTcpClient.modbusQueue.Count > 0)
{
CarStatusData carData = ModbusTcpClient.modbusTcpClient.modbusQueue.Dequeue();
if (carData.ClutchPedalPosition > 30)
{
SelectButton();
}
if (NewValue != carData.ButtonData)
{
NewValue = carData.ButtonData;
}
else
{
continue;
}
CheckSteeringWheelAngle(NewValue);
}
await Task.Delay(TimeSpan.FromSeconds(.1));
}
}
// ///
// /// 更新方向盘角度
// ///
// private void UpdateSteeringWheelAngle()
// {
// // 这里需要替换成获取硬件方向盘角度的代码
// steeringWheelAngle = testFloatV;
// }
///
/// 判断方向盘左边还是右边 //上1,右2,下3,左4
///
private void CheckSteeringWheelAngle(int btvalue)
{
if (btvalue > 0)
{
if (btvalue == 4)
{
SelectPreviousButton();
}
else if (btvalue == 2)
{
SelectNextButton();
}
}
// if (Mathf.Abs(steeringWheelAngle) < neutralAngleThreshold)
// {
// hasSelected = false;
// return;
// }
// if (!hasSelected)
// {
// if (steeringWheelAngle > selectionAngleThreshold)
// {
// // 向右转动
// SelectNextButton();
// hasSelected = true;
// }
// else if (steeringWheelAngle < -selectionAngleThreshold)
// {
// // 向左转动
// SelectPreviousButton();
// hasSelected = true;
// }
// }
}
///
/// 下一个按钮
///
private void SelectNextButton()
{
selectedButtonIndex = (selectedButtonIndex + 1) % buttons.Length;
// Debug.Log("前进" + selectedButtonIndex);
HighlightButton(selectedButtonIndex);
}
///
/// 上一个按钮
///
private void SelectPreviousButton()
{
if (selectedButtonIndex == 0)
selectedButtonIndex = buttons.Length - 1;
else
selectedButtonIndex--;
// Debug.Log("后退" + selectedButtonIndex);
HighlightButton(selectedButtonIndex);
}
///
/// 选择按钮变换
///
///
public void HighlightButton(int index)
{
for (int i = 0; i < buttons.Length; i++)
{
if (buttons[i].name == buttons[index].name)
{
buttons[i].GetComponent().OnClickSprite();
}
else
{
buttons[i].GetComponent().OnCancel();
}
}
}
// public void SelectButtonSprite( string btName)
// {
// for (int i = 0; i < buttons.Length; i++)
// {
// if (buttons[i].name == btName)
// {
// buttons[i].GetComponent().ClickSp();
// }
// else
// {
// buttons[i].GetComponent().Cancel();
// }
// }
// }
public void SelectButton()
{
buttons[selectedButtonIndex].GetComponent