ict.shenzhi/Assets/ProfessionalAssets/DronePack/Scripts/cmpl/PA_DronePack/DroneAxisInput.cs

330 lines
10 KiB
C#

using System;
using System.Linq;
using UnityEngine;
using static System.Runtime.CompilerServices.RuntimeHelpers;
namespace PA_DronePack
{
public class DroneAxisInput : MonoBehaviour
{
public enum InputType
{
Desktop,
Gamepad,
OpenVR,
Custom
}
public InputType inputType;
private InputType? _inputType;
public string forwardBackward;
public string _forwardBackward;
public string strafeLeftRight;
public string _strafeLeftRight;
public string riseLower;
public string _riseLower;
public string turn;
public string _turn;
public string toggleMotor;
public string _toggleMotor;
public string toggleCameraMode;
public string _toggleCameraMode;
public string toggleCameraGyro;
public string _toggleCameraGyro;
public string toggleFollowMode;
public string _toggleFollowMode;
public string toggleHeadless;
public string _toggleHeadless;
public string cameraRiseLower;
public string _cameraRiseLower;
public string cameraTurn;
public string _cameraTurn;
public string cameraFreeLook;
public string _cameraFreeLook;
public DroneController dcoScript;
//public UAVController dcoScript;
public DroneCamera dcScript;
private bool toggleMotorIsKey;
private bool toggleCameraModeIsKey;
private bool toggleCameraGyroIsKey;
private bool toggleFollowModeIsKey;
private bool cameraFreeLookIsKey;
private bool toggleHeadlessLookIsKey;
private string[] keys = new string[77]
{
"f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10",
"f11", "f12", "f13", "f14", "f15", "0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "a", "b", "c", "d", "e",
"f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y",
"z", "backspace", "delete", "tab", "clear", "return", "pause", "escape", "space", "up",
"down", "right", "left", "insert", "home", "end", "pageup", "pagedown", "numlock", "capslock",
"scroll ock", "rightshift", "leftshift", "rightctrl", "leftctrl", "rightalt", "leftalt"
};
private void Awake()
{
dcoScript = GetComponent<DroneController>();
//dcoScript = GetComponent<UAVController>();
dcScript = UnityEngine.Object.FindObjectOfType<DroneCamera>();
UpdateInput();
}
private void Update()
{
if (_inputType != inputType)
{
UpdateInput();
_inputType = inputType;
}
if (forwardBackward != "")
{
dcoScript.DriveInput(Input.GetAxisRaw(forwardBackward));
}
if (strafeLeftRight != "")
{
dcoScript.StrafeInput(Input.GetAxisRaw(strafeLeftRight));
}
if (riseLower != "")
{
dcoScript.LiftInput(Input.GetAxisRaw(riseLower));
}
if (turn != "")
{
dcoScript.TurnInput(Input.GetAxisRaw(turn));
}
if (cameraRiseLower != "" && (bool)dcScript)
{
dcScript.LiftInput(Input.GetAxisRaw(cameraRiseLower));
}
if (cameraTurn != "" && (bool)dcScript)
{
dcScript.TurnInput(Input.GetAxisRaw(cameraTurn));
}
if (toggleMotor != "")
{
if (toggleMotorIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), toggleMotor)))
{
dcoScript.ToggleMotor();
}
}
else if (Input.GetButtonDown(toggleMotor))
{
dcoScript.ToggleMotor();
}
}
if (toggleHeadless != "")
{
if (toggleHeadlessLookIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), toggleHeadless)))
{
dcoScript.ToggleHeadless();
}
}
else if (Input.GetButtonDown(toggleHeadless))
{
dcoScript.ToggleHeadless();
}
}
if (toggleCameraMode != "" && (bool)dcScript)
{
if (toggleCameraModeIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), toggleCameraMode)))
{
dcScript.ChangeCameraMode();
}
}
else if (Input.GetButtonDown(toggleCameraMode))
{
dcScript.ChangeCameraMode();
}
}
if (toggleCameraGyro != "" && (bool)dcScript)
{
if (toggleCameraGyroIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), toggleCameraGyro)))
{
dcScript.ChangeGyroscope();
}
}
else if (Input.GetButtonDown(toggleCameraGyro))
{
dcScript.ChangeGyroscope();
}
}
if (toggleFollowMode != "" && (bool)dcScript)
{
if (toggleFollowModeIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), toggleFollowMode)))
{
dcScript.ChangeFollowMode();
}
}
else if (Input.GetButtonDown(toggleFollowMode))
{
dcScript.ChangeFollowMode();
}
}
if (!(cameraFreeLook != "") || !dcScript)
{
return;
}
if (cameraFreeLookIsKey)
{
if (Input.GetKeyDown((KeyCode)Enum.Parse(typeof(KeyCode), cameraFreeLook)))
{
dcScript.CanFreeLook(state: true);
}
if (Input.GetKeyUp((KeyCode)Enum.Parse(typeof(KeyCode), cameraFreeLook)))
{
dcScript.CanFreeLook(state: false);
}
}
else
{
if (Input.GetButtonDown(cameraFreeLook))
{
dcScript.CanFreeLook(state: true);
}
if (Input.GetButtonUp(cameraFreeLook))
{
dcScript.CanFreeLook(state: false);
}
}
}
private void ParseKeys()
{
toggleMotorIsKey = keys.Contains(toggleMotor.ToLower());
toggleCameraModeIsKey = keys.Contains(toggleCameraMode.ToLower());
toggleCameraGyroIsKey = keys.Contains(toggleCameraGyro.ToLower());
toggleFollowModeIsKey = keys.Contains(toggleFollowMode.ToLower());
cameraFreeLookIsKey = keys.Contains(cameraFreeLook.ToLower());
toggleHeadlessLookIsKey = keys.Contains(toggleHeadless.ToLower());
}
public void UpdateInput()
{
if (inputType == InputType.Desktop)
{
forwardBackward = "Vertical";
strafeLeftRight = "Horizontal";
riseLower = "Lift";
turn = "Mouse X";
cameraRiseLower = "Mouse Y";
cameraTurn = "Mouse X";
toggleMotor = "Z";
toggleCameraMode = "C";
toggleCameraGyro = "G";
toggleFollowMode = "F";
cameraFreeLook = "LeftAlt";
toggleHeadless = "H";
}
if (inputType == InputType.Gamepad)
{
forwardBackward = "GP SecondaryJoystick Y";
strafeLeftRight = "GP SecondaryJoystick X";
riseLower = "GP PrimaryJoystick Y";
turn = "GP PrimaryJoystick X";
cameraRiseLower = "GP DPad Y";
cameraTurn = "GP PrimaryJoystick X";
toggleMotor = "GP Button 0";
toggleCameraMode = "GP Button 1";
toggleCameraGyro = "GP Button 2";
toggleFollowMode = "GP Button 3";
cameraFreeLook = "GP Button 5";
toggleHeadless = "GP Button 6";
}
if (inputType == InputType.OpenVR)
{
forwardBackward = "OVR RightJoystick Y";
strafeLeftRight = "OVR RightJoystick X";
riseLower = "OVR LeftJoystick Y";
turn = "OVR LeftJoystick X";
cameraRiseLower = "";
cameraTurn = "OVR LeftJoystick X";
toggleMotor = "OVR RightButton 0";
toggleCameraMode = "C";
toggleCameraGyro = "G";
toggleFollowMode = "F";
cameraFreeLook = "OVR RightTrigger";
toggleHeadless = "OVR RightGrip";
}
if (inputType == InputType.Custom)
{
forwardBackward = _forwardBackward;
strafeLeftRight = _strafeLeftRight;
riseLower = _riseLower;
turn = _turn;
toggleMotor = _toggleMotor;
toggleCameraMode = _toggleCameraMode;
toggleCameraGyro = _toggleCameraGyro;
toggleFollowMode = _toggleFollowMode;
cameraRiseLower = _cameraRiseLower;
cameraTurn = _cameraTurn;
cameraFreeLook = _cameraFreeLook;
toggleHeadless = _toggleHeadless;
}
ParseKeys();
}
}
}