using UnityEngine;
using UnityEngine.UI;
using SmartBowSDK;
using SmartBowSDK.CMD;
public class DemoStarter : MonoBehaviour
{
[SerializeField] Toggle _DetectingMacToggle;
[SerializeField] Button _btnConnect;
[SerializeField] Toggle _CMDToggle;
[SerializeField] Button _btnClearDeviceInfo;
[SerializeField] Text textMacAddress;
[SerializeField] Text textBattery;
[SerializeField] Button _btnCalibrateGyr;
[SerializeField] Button _btnCalibrateMag;
[SerializeField] Button _btnResetAim;
[SerializeField] Button _btnStartRotationSensor;
[SerializeField] Button _btnStopRotationSensor;
[SerializeField] Button _btnStartShootingSensor;
[SerializeField] Button _btnStopShootingSensor;
[SerializeField] InputField _inputFieldGameID;
[SerializeField] InputField _inputFieldChannelID;
[SerializeField] InputField _inputFieldUsername;
[SerializeField] InputField _inputFieldPassword;
[SerializeField] Button _btnLogin;
[SerializeField] Button _btnLogout;
[SerializeField] Button _btnGetUserInfo;
[SerializeField] Image _imgAvatar;
[SerializeField] Text _textNickname;
[SerializeField] Text _textGender;
//数据存储标识
string userTags = "DemoStarter-Test";
//建立的设备信息id.
int deviceId = 1;
void Awake()
{
#if UNITY_ANDROID
_CMDToggle.onValueChanged.AddListener((bool isValue)=>{
BluetoothStatusEnum bluetoothStatus = SmartBowHelper.GetInstance().GetBluetoothStatus();
if (bluetoothStatus == BluetoothStatusEnum.None)
{
SmartBowHelper.GetInstance().UseCompanionDeviceManager(isValue);
}
else
{
TipText.Show("断开连接再切换!");
}
});
#else
_CMDToggle.gameObject.SetActive(false);
#endif
_btnConnect.onClick.AddListener(() => {
OnClick_Connect();
});
_btnClearDeviceInfo.onClick.AddListener(OnClick_ClearDeviceInfo);
_btnCalibrateGyr.onClick.AddListener(OnClick_CalibrateGyr);
_btnCalibrateMag.onClick.AddListener(OnClick_CalibrateMag);
_btnResetAim.onClick.AddListener(OnClick_ResetAim);
_btnStartRotationSensor.onClick.AddListener(OnClick_StartRotationSensor);
_btnStopRotationSensor.onClick.AddListener(OnClick_StopRotationSensor);
_btnStartShootingSensor.onClick.AddListener(OnClick_StartShootingSensor);
_btnStopShootingSensor.onClick.AddListener(OnClick_StopShootingSensor);
_btnLogin.onClick.AddListener(OnClick_Login);
_btnLogout.onClick.AddListener(OnClick_Logout);
_btnGetUserInfo.onClick.AddListener(OnClick_GetUserInfo);
UpdateLoginUI(0);
}
void Start()
{
SmartBowLogger.isDebug = true;
#if UNITY_ANDROID
//使用CMD API连接,这个只支持Android
SmartBowHelper.GetInstance().UseCompanionDeviceManager(true);
//这个状态是cmd扫描
SmartBowHelper.GetInstance().OnCMDState += OnCMDScanState;
#endif
SmartBowHelper.GetInstance().OnBluetoothStatusChanged += OnBluetoothStatusChanged;
//这里是传统蓝牙
SmartBowHelper.GetInstance().OnBluetoothError += OnBluetoothError;
SmartBowHelper.GetInstance().OnBluetoothModuleInited += OnBluetoothModuleInited;
SmartBowHelper.GetInstance().OnRotationUpdate += OnRotationUpdate;
SmartBowHelper.GetInstance().OnShooting += OnShooting;
SmartBowHelper.GetInstance().OnFunctionKeyPress += OnFunctionKeyPress;
SmartBowHelper.GetInstance().OnFunctionKeyLongPress += OnFunctionKeyLongPress;
}
void OnBluetoothStatusChanged(BluetoothStatusEnum oldStatus, BluetoothStatusEnum newStatus)
{
}
///
/// cmd扫描状态
///
///
///
void OnCMDScanState(CMDScanState state, string message)
{
Debug.Log("CMDScanState:" + state);
if (state == CMDScanState.TIMEOUT)
{
TipText.Show("连接失败,未发现目标设备!");
return;
}
TipText.Show(message);
}
///
/// cmd没有通过这里扫描
///
///
///
void OnBluetoothError(BluetoothError error, string message)
{
Debug.Log("OnBluetoothError:" + error);
if (error == BluetoothError.ScanNotFoundTargetDevice)
{
TipText.Show("连接失败,未发现目标设备!");
return;
}
TipText.Show(message);
}
void OnBluetoothModuleInited()
{
SmartBowHelper.GetInstance().StartRotationSensor();
SmartBowHelper.GetInstance().StartShootingSensor();
}
void OnRotationUpdate(Quaternion rotation)
{
//Debug.Log($"Rotation update: {rotation}");
Bow.Instance.transform.eulerAngles = rotation.eulerAngles;
}
void OnShooting(float speed)
{
Bow.Instance.Shoot();
}
void OnFunctionKeyPress()
{
Debug.Log("功能键短按");
OnClick_ResetAim();
}
void OnFunctionKeyLongPress()
{
Debug.Log("功能键长按");
}
void Update()
{
//更新显示蓝牙状态
BluetoothStatusEnum bluetoothStatus = SmartBowHelper.GetInstance().GetBluetoothStatus();
Text btnConnectText = _btnConnect.GetComponentInChildren();
if (bluetoothStatus == BluetoothStatusEnum.None) btnConnectText.text = "未连接(点击连接)";
if (bluetoothStatus == BluetoothStatusEnum.Connecting) btnConnectText.text = "连接中";
if (bluetoothStatus == BluetoothStatusEnum.Connected)
{
if (SmartBowHelper.GetInstance().IsBluetoothModuleInited()) btnConnectText.text = "已连接(点击断开)";
else btnConnectText.text = "已连接(正在初始化)";
}
//更新显示电量
int battery = SmartBowHelper.GetInstance().GetBattery();
textBattery.text = battery > 0 ? $"电量值:{battery}" : "未获得电量值";
//更新显示Mac地址
string macAddress = SmartBowHelper.GetInstance().GetMacAddress();
textMacAddress.text = macAddress != null ? $"Mac地址:{macAddress}" : "未获得Mac地址";
//更新显示陀螺仪校准文本
UpdateCalibrateGyrText();
//更新显示地磁计校准文本
UpdateCalibrateMagText();
}
public void OnClick_Connect()
{
if (SmartBowHelper.GetInstance().GetBluetoothStatus() == BluetoothStatusEnum.Connecting) return;
if (SmartBowHelper.GetInstance().GetBluetoothStatus() == BluetoothStatusEnum.None)
{
AimDeviceInfo aimDeviceInfo = SmartBowHelper.GetInstance().GetDeviceInfo(userTags, deviceId);
bool bRecreateDeviceInfo = aimDeviceInfo == null;
if (aimDeviceInfo == null || !aimDeviceInfo.bInitMac)
{
Debug.Log(message: $"连接蓝牙-开始连接蓝牙:aimDeviceInfo:null,bRecreateDeviceInfo:{bRecreateDeviceInfo}");
SmartBowHelper.GetInstance().SetIsConnectName(true);
SmartBowHelper.GetInstance().Connect(userTags, deviceId, bRecreateDeviceInfo);
}
else
{
Debug.Log(message: $"连接蓝牙-开始连接蓝牙:aimDeviceInfo:mac:{aimDeviceInfo.mac} id:{aimDeviceInfo.id}");
SmartBowHelper.GetInstance().SetIsConnectName(false);
SmartBowHelper.GetInstance().SetConnectMacStr(aimDeviceInfo.mac);
SmartBowHelper.GetInstance().Connect(userTags, deviceId);
}
//默认需要检测mac,bRecreateDeviceInfo:false.如不需要:设置bRecreateDeviceInfo:true;
//bool bRecreateDeviceInfo = _DetectingMacToggle.isOn ? false : true;
//SmartBowHelper.GetInstance().Connect(userTags, deviceId, bRecreateDeviceInfo);
return;
}
if (SmartBowHelper.GetInstance().GetBluetoothStatus() == BluetoothStatusEnum.Connected)
{
SmartBowHelper.GetInstance().Disconnect();
return;
}
}
public void OnClick_ClearDeviceInfo() {
SmartBowHelper.GetInstance().ClearDeviceInfo(userTags , deviceId);
}
public void OnClick_ResetAim()
{
SmartBowHelper.GetInstance().ResetAim();
}
public void OnClick_CalibrateGyr()
{
if (SmartBowHelper.GetInstance().IsGyrCalibrating())
{
SmartBowHelper.GetInstance().StopGyrCalibration();
}
else
{
SmartBowHelper.GetInstance().StartGyrCalibration();
}
}
void UpdateCalibrateGyrText()
{
Text text = _btnCalibrateGyr.GetComponentInChildren();
int progress = (int)(SmartBowHelper.GetInstance().GetGyrProgress() * 100);
string act = SmartBowHelper.GetInstance().IsGyrCalibrating() ? "停止" : "开始";
text.text = $"点击{act}陀螺仪校准({progress}%)";
}
float _clickCalibrateMagTime = -100;
public void OnClick_CalibrateMag()
{
_clickCalibrateMagTime = Time.realtimeSinceStartup;
SmartBowHelper.GetInstance().StartMagCalibration();
}
void UpdateCalibrateMagText()
{
Text text = _btnCalibrateMag.GetComponentInChildren();
if (SmartBowHelper.GetInstance().IsMagCompleted())
{
text.text = $"地磁计校准完成(点击重置)";
}
else
{
string tip = Time.realtimeSinceStartup - _clickCalibrateMagTime < 2 ? "已重置" : "点击重置";
text.text = $"地磁计自动校准中({tip})";
}
}
public void OnClick_StartRotationSensor()
{
bool success = SmartBowHelper.GetInstance().StartRotationSensor();
if (!success) TipText.Show("开启九轴传感失败\n原因\n模块未连接或未初始化完成");
else TipText.Show("开启九轴传感\n指令发送成功");
}
public void OnClick_StopRotationSensor()
{
bool success = SmartBowHelper.GetInstance().StopRotationSensor();
if (!success) TipText.Show("停止九轴传感失败\n原因\n模块未连接或未初始化完成");
else TipText.Show("停止九轴传感\n指令发送成功");
}
public void OnClick_StartShootingSensor()
{
bool success = SmartBowHelper.GetInstance().StartShootingSensor();
if (!success) TipText.Show("开启射箭传感失败\n原因\n模块未连接或未初始化完成");
else TipText.Show("开启射箭传感\n指令发送成功");
}
public void OnClick_StopShootingSensor()
{
bool success = SmartBowHelper.GetInstance().StopShootingSensor();
if (!success) TipText.Show("停止射箭传感失败\n原因\n模块未连接或未初始化完成");
else TipText.Show("停止射箭传感\n指令发送成功");
}
public void OnClick_Login()
{
if (string.IsNullOrWhiteSpace(_inputFieldUsername.text) || string.IsNullOrWhiteSpace(_inputFieldPassword.text))
{
TipText.Show("请输入账号密码");
return;
}
SmartBowHelper.GetInstance().Login(
_inputFieldGameID.text,
_inputFieldChannelID.text,
_inputFieldUsername.text,
_inputFieldPassword.text,
(res) =>
{
if (res.success)
{
Debug.Log("登录成功");
UpdateLoginUI(1);
}
TipText.Show(res.message);
});
}
public void OnClick_Logout()
{
SmartBowHelper.GetInstance().Logout((success) =>
{
if (success)
{
TipText.Show($"登出成功");
UpdateLoginUI(0);
}
else TipText.Show($"登出失败");
});
}
public void OnClick_GetUserInfo()
{
SmartBowHelper.GetInstance().GetUserInfo((res) =>
{
if (res.success)
{
Debug.Log("获取用户信息成功");
// UserInfo userInfo = res.userInfo;
//Debug.Log(JsonConvert.SerializeObject(userInfo));
////渲染UI
//StartCoroutine(SmartBowNetwork.LoadSprite(userInfo.avatarUrl, (sprite) =>
//{
// _imgAvatar.sprite = sprite;
// _imgAvatar.enabled = true;
//}));
//_textNickname.text = userInfo.nickname;
//_textNickname.enabled = true;
//_textGender.text = userInfo.gender == 1 ? "男" : "女";
//_textGender.enabled = true;
}
TipText.Show(res.message);
});
}
void UpdateLoginUI(int step)
{
_inputFieldGameID.gameObject.SetActive(step == 0);
_inputFieldChannelID.gameObject.SetActive(step == 0);
_inputFieldUsername.gameObject.SetActive(step == 0);
_inputFieldPassword.gameObject.SetActive(step == 0);
_btnLogin.gameObject.SetActive(step == 0);
_btnLogout.gameObject.SetActive(step == 1);
_btnGetUserInfo.gameObject.SetActive(step == 1);
_imgAvatar.gameObject.SetActive(step == 1);
_textNickname.gameObject.SetActive(step == 1);
_textGender.gameObject.SetActive(step == 1);
_imgAvatar.enabled = false;
_imgAvatar.sprite = null;
_textNickname.enabled = false;
_textGender.enabled = false;
}
}