Mercurial > hg > Game > Games
diff Orchestland/Assets/OVR/Scripts/Util/OVRGamepadController.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/OVR/Scripts/Util/OVRGamepadController.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,307 @@ +/************************************************************************************ + +Copyright : Copyright 2014 Oculus VR, LLC. All Rights reserved. + +Licensed under the Oculus VR Rift SDK License Version 3.2 (the "License"); +you may not use the Oculus VR Rift SDK except in compliance with the License, +which is provided at the time of installation or download, or which +otherwise accompanies this software in either electronic or hard copy form. + +You may obtain a copy of the License at + +http://www.oculusvr.com/licenses/LICENSE-3.2 + +Unless required by applicable law or agreed to in writing, the Oculus VR SDK +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +************************************************************************************/ + +using System; +using System.Runtime.InteropServices; +using UnityEngine; + +/// <summary> +/// OVRGamepadController is an interface class to a gamepad controller. +/// </summary> +public class OVRGamepadController : MonoBehaviour +{ + /// <summary> An axis on the gamepad. </summary> + public enum Axis + { + None = -1, + LeftXAxis = 0, + LeftYAxis, + RightXAxis, + RightYAxis, + LeftTrigger, + RightTrigger, + Max, + }; + + /// <summary> A button on the gamepad. </summary> + public enum Button + { + None = -1, + A = 0, + B, + X, + Y, + Up, + Down, + Left, + Right, + Start, + Back, + LStick, + RStick, + LeftShoulder, + RightShoulder, + Max + }; + + /// <summary> + /// The default Unity input name for each gamepad Axis. + /// </summary> + public static string[] DefaultAxisNames = new string[(int)Axis.Max] + { + "Left_X_Axis", + "Left_Y_Axis", + "Right_X_Axis", + "Right_Y_Axis", + "LeftTrigger", + "RightTrigger", + }; + + /// <summary> + /// The default Unity input name for each gamepad Button. + /// </summary> + public static string[] DefaultButtonNames = new string[(int)Button.Max] + { + "Button A", + "Button B", + "Button X", + "Button Y", + "Up", + "Down", + "Left", + "Right", + "Start", + "Back", + "LStick", + "RStick", + "LeftShoulder", + "RightShoulder", + }; + + public static int[] DefaultButtonIds = new int[(int)Button.Max] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 + }; + + /// <summary> + /// The current Unity input names for all gamepad axes. + /// </summary> + public static string[] AxisNames = null; + + /// <summary> + /// The current Unity input names for all gamepad buttons. + /// </summary> + public static string[] ButtonNames = null; + + static OVRGamepadController() + { + SetAxisNames(DefaultAxisNames); + SetButtonNames(DefaultButtonNames); + } + + /// <summary> + /// Sets the current names for all gamepad axes. + /// </summary> + public static void SetAxisNames(string[] axisNames) + { + AxisNames = axisNames; + } + + /// <summary> + /// Sets the current Unity input names for all gamepad buttons. + /// </summary> + /// <param name="buttonNames">Button names.</param> + public static void SetButtonNames(string[] buttonNames) + { + ButtonNames = buttonNames; + } + + /// <summary> Handles an axis read event. </summary> + public delegate float ReadAxisDelegate(Axis axis); + + /// <summary> Handles an button read event. </summary> + public delegate bool ReadButtonDelegate(Button button); + + /// <summary> Occurs when an axis has been read. </summary> + public static ReadAxisDelegate ReadAxis = DefaultReadAxis; + + /// <summary> Occurs when a button has been read. </summary> + public static ReadButtonDelegate ReadButton = DefaultReadButton; + +#if (!UNITY_ANDROID || UNITY_EDITOR) + private static bool GPC_Available = false; + + //------------------------- + // Public access to plugin functions + + /// <summary> + /// GPC_Initialize. + /// </summary> + /// <returns><c>true</c>, if c_ initialize was GPed, <c>false</c> otherwise.</returns> + public static bool GPC_Initialize() + { + if (!OVRManager.instance.isSupportedPlatform) + return false; + return OVR_GamepadController_Initialize(); + } + + /// <summary> + /// GPC_Destroy + /// </summary> + /// <returns><c>true</c>, if c_ destroy was GPed, <c>false</c> otherwise.</returns> + public static bool GPC_Destroy() + { + if (!OVRManager.instance.isSupportedPlatform) + return false; + return OVR_GamepadController_Destroy(); + } + + /// <summary> + /// GPC_Update + /// </summary> + /// <returns><c>true</c>, if c_ update was GPed, <c>false</c> otherwise.</returns> + public static bool GPC_Update() + { + if (!OVRManager.instance.isSupportedPlatform) + return false; + return OVR_GamepadController_Update(); + } +#endif + + /// <summary> + /// GPC_GetAxis + /// The default delegate for retrieving axis info. + /// </summary> + /// <returns>The current value of the axis.</returns> + /// <param name="axis">Axis.</param> + public static float DefaultReadAxis(Axis axis) + { +#if UNITY_ANDROID && !UNITY_EDITOR + return Input.GetAxis(AxisNames[(int)axis]); +#else + return OVR_GamepadController_GetAxis((int)axis); +#endif + } + + /// <summary> + /// Returns the current value of the given Axis. + /// </summary> + public static float GPC_GetAxis(Axis axis) + { + if (ReadAxis == null) + return 0f; + return ReadAxis(axis); + } + + public static void SetReadAxisDelegate(ReadAxisDelegate del) + { + ReadAxis = del; + } + + /// <summary> + /// Uses XInput to check if the given Button is down. + /// </summary> + public static bool DefaultReadButton(Button button) + { +#if UNITY_ANDROID && !UNITY_EDITOR + return Input.GetButton(ButtonNames[(int)button]); +#else + return OVR_GamepadController_GetButton((int)button); +#endif + } + + /// <summary> + /// Returns true if the given Button is down. + /// </summary> + public static bool GPC_GetButton(Button button) + { + if (ReadButton == null) + return false; + return ReadButton(button); + } + + public static void SetReadButtonDelegate(ReadButtonDelegate del) + { + ReadButton = del; + } + + /// <summary> + /// Returns true if the gamepad controller is available. + /// </summary> + public static bool GPC_IsAvailable() + { +#if !UNITY_ANDROID || UNITY_EDITOR + return GPC_Available; +#else + return true; +#endif + } + + void GPC_Test() + { + // Axis test + Debug.Log(string.Format("LT:{0:F3} RT:{1:F3} LX:{2:F3} LY:{3:F3} RX:{4:F3} RY:{5:F3}", + GPC_GetAxis(Axis.LeftTrigger), GPC_GetAxis(Axis.RightTrigger), + GPC_GetAxis(Axis.LeftXAxis), GPC_GetAxis(Axis.LeftYAxis), + GPC_GetAxis(Axis.RightXAxis), GPC_GetAxis(Axis.RightYAxis))); + + // Button test + Debug.Log(string.Format("A:{0} B:{1} X:{2} Y:{3} U:{4} D:{5} L:{6} R:{7} SRT:{8} BK:{9} LS:{10} RS:{11} L1:{12} R1:{13}", + GPC_GetButton(Button.A), GPC_GetButton(Button.B), + GPC_GetButton(Button.X), GPC_GetButton(Button.Y), + GPC_GetButton(Button.Up), GPC_GetButton(Button.Down), + GPC_GetButton(Button.Left), GPC_GetButton(Button.Right), + GPC_GetButton(Button.Start), GPC_GetButton(Button.Back), + GPC_GetButton(Button.LStick), GPC_GetButton(Button.RStick), + GPC_GetButton(Button.LeftShoulder), GPC_GetButton(Button.RightShoulder))); + } + +#if !UNITY_ANDROID || UNITY_EDITOR + void Start() + { + GPC_Available = GPC_Initialize(); + } + + void Update() + { + GPC_Available = GPC_Update(); + } + + void OnDestroy() + { + GPC_Destroy(); + GPC_Available = false; + } + + public const string LibOVR = "OculusPlugin"; + + [DllImport(LibOVR, CallingConvention = CallingConvention.Cdecl)] + public static extern bool OVR_GamepadController_Initialize(); + [DllImport(LibOVR, CallingConvention = CallingConvention.Cdecl)] + public static extern bool OVR_GamepadController_Destroy(); + [DllImport(LibOVR, CallingConvention = CallingConvention.Cdecl)] + public static extern bool OVR_GamepadController_Update(); + [DllImport(LibOVR, CallingConvention = CallingConvention.Cdecl)] + public static extern float OVR_GamepadController_GetAxis(int axis); + [DllImport(LibOVR, CallingConvention = CallingConvention.Cdecl)] + public static extern bool OVR_GamepadController_GetButton(int button); +#endif +}