H_SafeExperienceDrivingSystem/U3D_DrivingSystem/Assets/Plugin/Standard Assets/Logitech SDK/Script Sample/LogitechSteeringWheel.cs

355 lines
14 KiB
C#
Raw Blame History

using UnityEngine;
using System.Collections;
using System.Text;
public class LogitechSteeringWheel : MonoBehaviour
{
LogitechGSDK.LogiControllerPropertiesData properties;
private string actualState;
private string activeForces;
private string propertiesEdit;
private string buttonStatus;
private string forcesLabel;
string[] activeForceAndEffect;
public float deg;
// Use this for initialization
void Start()
{
activeForces = "";
propertiesEdit = "";
actualState = "";
buttonStatus = "";
forcesLabel = "Press the following keys to activate forces and effects on the steering wheel / gaming controller \n";
forcesLabel += "Spring force : S\n";
forcesLabel += "Constant force : C\n";
forcesLabel += "Damper force : D\n";
forcesLabel += "Side collision : Left or Right Arrow\n";
forcesLabel += "Front collision : Up arrow\n";
forcesLabel += "Dirt road effect : I\n";
forcesLabel += "Bumpy road effect : B\n";
forcesLabel += "Slippery road effect : L\n";
forcesLabel += "Surface effect : U\n";
forcesLabel += "Car Airborne effect : A\n";
forcesLabel += "Soft Stop Force : O\n";
forcesLabel += "Set example controller properties : PageUp\n";
forcesLabel += "Play Leds : P\n";
activeForceAndEffect = new string[9];
Debug.Log("SteeringInit:" + LogitechGSDK.LogiSteeringInitialize(false));
}
void OnApplicationQuit()
{
Debug.Log("SteeringShutdown:" + LogitechGSDK.LogiSteeringShutdown());
}
//void OnGUI()
//{
// activeForces = GUI.TextArea(new Rect(10, 10, 180, 200), activeForces, 400);
// propertiesEdit = GUI.TextArea(new Rect(200, 10, 200, 200), propertiesEdit, 400);
// actualState = GUI.TextArea(new Rect(410, 10, 300, 200), actualState, 1000);
// buttonStatus = GUI.TextArea(new Rect(720, 10, 300, 200), buttonStatus, 1000);
// GUI.Label(new Rect(10, 400, 800, 400), forcesLabel);
//}
// Update is called once per frame
void Update()
{
//All the test functions are called on the first device plugged in(index = 0)
if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0))
{
//CONTROLLER PROPERTIES
StringBuilder deviceName = new StringBuilder(256);
LogitechGSDK.LogiGetFriendlyProductName(0, deviceName, 256);
propertiesEdit = "Current Controller : " + deviceName + "\n";
propertiesEdit += "Current controller properties : \n\n";
LogitechGSDK.LogiControllerPropertiesData actualProperties = new LogitechGSDK.LogiControllerPropertiesData();
LogitechGSDK.LogiGetCurrentControllerProperties(0, ref actualProperties);
propertiesEdit += "forceEnable = " + actualProperties.forceEnable + "\n";
propertiesEdit += "overallGain = " + actualProperties.overallGain + "\n";
propertiesEdit += "springGain = " + actualProperties.springGain + "\n";
propertiesEdit += "damperGain = " + actualProperties.damperGain + "\n";
propertiesEdit += "defaultSpringEnabled = " + actualProperties.defaultSpringEnabled + "\n";
propertiesEdit += "combinePedals = " + actualProperties.combinePedals + "\n";
propertiesEdit += "wheelRange = " + actualProperties.wheelRange + "\n";
propertiesEdit += "gameSettingsEnabled = " + actualProperties.gameSettingsEnabled + "\n";
propertiesEdit += "allowGameSettings = " + actualProperties.allowGameSettings + "\n";
//CONTROLLER STATE
actualState = "Steering wheel current state : \n\n";
LogitechGSDK.DIJOYSTATE2ENGINES rec;
rec = LogitechGSDK.LogiGetStateUnity(0);
actualState += "x-axis position :" + rec.lX + "\n";
int dir = rec.lX == 0 ? 0 : rec.lX < 0 ? -1 : 1;
float percent = Mathf.Abs(rec.lX) / 32768f;
deg = percent * 450f * dir;
actualState += "<22>Ƕ<EFBFBD> :" + deg + "\n";
actualState += "y-axis position :" + rec.lY + "\n";
actualState += "z-axis position :" + rec.lZ + "\n";
actualState += "x-axis rotation :" + rec.lRx + "\n";
actualState += "y-axis rotation :" + rec.lRy + "\n";
actualState += "z-axis rotation :" + rec.lRz + "\n";
actualState += "extra axes positions 1 :" + rec.rglSlider[0] + "\n";
actualState += "extra axes positions 2 :" + rec.rglSlider[1] + "\n";
switch (rec.rgdwPOV[0])
{
case (0): actualState += "POV : UP\n"; break;
case (4500): actualState += "POV : UP-RIGHT\n"; break;
case (9000): actualState += "POV : RIGHT\n"; break;
case (13500): actualState += "POV : DOWN-RIGHT\n"; break;
case (18000): actualState += "POV : DOWN\n"; break;
case (22500): actualState += "POV : DOWN-LEFT\n"; break;
case (27000): actualState += "POV : LEFT\n"; break;
case (31500): actualState += "POV : UP-LEFT\n"; break;
default: actualState += "POV : CENTER\n"; break;
}
//Button status :
buttonStatus = "Button pressed : \n\n";
for (int i = 0; i < 128; i++)
{
if (rec.rgbButtons[i] == 128)
{
buttonStatus += "Button " + i + " pressed\n";
}
}
/* THIS AXIS ARE NEVER REPORTED BY LOGITECH CONTROLLERS
*
* actualState += "x-axis velocity :" + rec.lVX + "\n";
* actualState += "y-axis velocity :" + rec.lVY + "\n";
* actualState += "z-axis velocity :" + rec.lVZ + "\n";
* actualState += "x-axis angular velocity :" + rec.lVRx + "\n";
* actualState += "y-axis angular velocity :" + rec.lVRy + "\n";
* actualState += "z-axis angular velocity :" + rec.lVRz + "\n";
* actualState += "extra axes velocities 1 :" + rec.rglVSlider[0] + "\n";
* actualState += "extra axes velocities 2 :" + rec.rglVSlider[1] + "\n";
* actualState += "x-axis acceleration :" + rec.lAX + "\n";
* actualState += "y-axis acceleration :" + rec.lAY + "\n";
* actualState += "z-axis acceleration :" + rec.lAZ + "\n";
* actualState += "x-axis angular acceleration :" + rec.lARx + "\n";
* actualState += "y-axis angular acceleration :" + rec.lARy + "\n";
* actualState += "z-axis angular acceleration :" + rec.lARz + "\n";
* actualState += "extra axes accelerations 1 :" + rec.rglASlider[0] + "\n";
* actualState += "extra axes accelerations 2 :" + rec.rglASlider[1] + "\n";
* actualState += "x-axis force :" + rec.lFX + "\n";
* actualState += "y-axis force :" + rec.lFY + "\n";
* actualState += "z-axis force :" + rec.lFZ + "\n";
* actualState += "x-axis torque :" + rec.lFRx + "\n";
* actualState += "y-axis torque :" + rec.lFRy + "\n";
* actualState += "z-axis torque :" + rec.lFRz + "\n";
* actualState += "extra axes forces 1 :" + rec.rglFSlider[0] + "\n";
* actualState += "extra axes forces 2 :" + rec.rglFSlider[1] + "\n";
*/
int shifterTipe = LogitechGSDK.LogiGetShifterMode(0);
string shifterString = "";
if (shifterTipe == 1) shifterString = "Gated";
else if (shifterTipe == 0) shifterString = "Sequential";
else shifterString = "Unknown";
actualState += "\nSHIFTER MODE:" + shifterString;
// FORCES AND EFFECTS
activeForces = "Active forces and effects :\n";
//Spring Force -> S
//if (Input.GetKeyUp(KeyCode.S))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_SPRING))
// {
// LogitechGSDK.LogiStopSpringForce(0);
// activeForceAndEffect[0] = "";
// }
// else
// {
// LogitechGSDK.LogiPlaySpringForce(0, 50, 50, 50);
// activeForceAndEffect[0] = "Spring Force\n ";
// }
//}
////Constant Force -> C
//if (Input.GetKeyUp(KeyCode.C))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_CONSTANT))
// {
// LogitechGSDK.LogiStopConstantForce(0);
// activeForceAndEffect[1] = "";
// }
// else
// {
// LogitechGSDK.LogiPlayConstantForce(0, 50);
// activeForceAndEffect[1] = "Constant Force\n ";
// }
//}
////Damper Force -> D
//if (Input.GetKeyUp(KeyCode.D))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_DAMPER))
// {
// LogitechGSDK.LogiStopDamperForce(0);
// activeForceAndEffect[2] = "";
// }
// else
// {
// LogitechGSDK.LogiPlayDamperForce(0, 50);
// activeForceAndEffect[2] = "Damper Force\n ";
// }
//}
////Side Collision Force -> left or right arrow
//if (Input.GetKeyUp(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
//{
// LogitechGSDK.LogiPlaySideCollisionForce(0, 60);
//}
////Front Collision Force -> up arrow
//if (Input.GetKeyUp(KeyCode.UpArrow))
//{
// LogitechGSDK.LogiPlayFrontalCollisionForce(0, 60);
//}
////Dirt Road Effect-> I
//if (Input.GetKeyUp(KeyCode.I))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_DIRT_ROAD))
// {
// LogitechGSDK.LogiStopDirtRoadEffect(0);
// activeForceAndEffect[3] = "";
// }
// else
// {
// LogitechGSDK.LogiPlayDirtRoadEffect(0, 50);
// activeForceAndEffect[3] = "Dirt Road Effect\n ";
// }
//}
////Bumpy Road Effect-> B
//if (Input.GetKeyUp(KeyCode.B))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_BUMPY_ROAD))
// {
// LogitechGSDK.LogiStopBumpyRoadEffect(0);
// activeForceAndEffect[4] = "";
// }
// else
// {
// LogitechGSDK.LogiPlayBumpyRoadEffect(0, 50);
// activeForceAndEffect[4] = "Bumpy Road Effect\n";
// }
//}
////Slippery Road Effect-> L
//if (Input.GetKeyUp(KeyCode.L))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_SLIPPERY_ROAD))
// {
// LogitechGSDK.LogiStopSlipperyRoadEffect(0);
// activeForceAndEffect[5] = "";
// }
// else
// {
// LogitechGSDK.LogiPlaySlipperyRoadEffect(0, 50);
// activeForceAndEffect[5] = "Slippery Road Effect\n ";
// }
//}
////Surface Effect-> U
//if (Input.GetKeyUp(KeyCode.U))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_SURFACE_EFFECT))
// {
// LogitechGSDK.LogiStopSurfaceEffect(0);
// activeForceAndEffect[6] = "";
// }
// else
// {
// LogitechGSDK.LogiPlaySurfaceEffect(0, LogitechGSDK.LOGI_PERIODICTYPE_SQUARE, 50, 1000);
// activeForceAndEffect[6] = "Surface Effect\n";
// }
//}
////Car Airborne -> A
//if (Input.GetKeyUp(KeyCode.A))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_CAR_AIRBORNE))
// {
// LogitechGSDK.LogiStopCarAirborne(0);
// activeForceAndEffect[7] = "";
// }
// else
// {
// LogitechGSDK.LogiPlayCarAirborne(0);
// activeForceAndEffect[7] = "Car Airborne\n ";
// }
//}
////Soft Stop Force -> O
//if (Input.GetKeyUp(KeyCode.O))
//{
// if (LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_SOFTSTOP))
// {
// LogitechGSDK.LogiStopSoftstopForce(0);
// activeForceAndEffect[8] = "";
// }
// else
// {
// LogitechGSDK.LogiPlaySoftstopForce(0, 20);
// activeForceAndEffect[8] = "Soft Stop Force\n";
// }
//}
////Set preferred controller properties -> PageUp
//if (Input.GetKeyUp(KeyCode.PageUp))
//{
// //Setting example values
// properties.wheelRange = 90;
// properties.forceEnable = true;
// properties.overallGain = 80;
// properties.springGain = 80;
// properties.damperGain = 80;
// properties.allowGameSettings = true;
// properties.combinePedals = false;
// properties.defaultSpringEnabled = true;
// properties.defaultSpringGain = 80;
// LogitechGSDK.LogiSetPreferredControllerProperties(properties);
//}
//Play leds -> P
//if (Input.GetKeyUp(KeyCode.P))
//{
// LogitechGSDK.LogiPlayLeds(0, 20, 20, 20);
//}
for (int i = 0; i < 9; i++)
{
activeForces += activeForceAndEffect[i];
}
}
else if (!LogitechGSDK.LogiIsConnected(0))
{
actualState = "PLEASE PLUG IN A STEERING WHEEL OR A FORCE FEEDBACK CONTROLLER";
}
else
{
actualState = "THIS WINDOW NEEDS TO BE IN FOREGROUND IN ORDER FOR THE SDK TO WORK PROPERLY";
}
}
}