You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
318 lines
6.1 KiB
318 lines
6.1 KiB
using System; |
|
using UnityEngine; |
|
using UnityStandardAssets.CrossPlatformInput.PlatformSpecific; |
|
|
|
namespace UnityStandardAssets.CrossPlatformInput |
|
{ |
|
public static class CrossPlatformInputManager |
|
{ |
|
public enum ActiveInputMethod |
|
{ |
|
Hardware, |
|
Touch |
|
} |
|
|
|
|
|
private static VirtualInput activeInput; |
|
|
|
private static VirtualInput s_TouchInput; |
|
private static VirtualInput s_HardwareInput; |
|
|
|
|
|
static CrossPlatformInputManager() |
|
{ |
|
s_TouchInput = new MobileInput(); |
|
s_HardwareInput = new StandaloneInput(); |
|
#if MOBILE_INPUT |
|
activeInput = s_TouchInput; |
|
#else |
|
activeInput = s_HardwareInput; |
|
#endif |
|
} |
|
|
|
public static void SwitchActiveInputMethod(ActiveInputMethod activeInputMethod) |
|
{ |
|
switch (activeInputMethod) |
|
{ |
|
case ActiveInputMethod.Hardware: |
|
activeInput = s_HardwareInput; |
|
break; |
|
|
|
case ActiveInputMethod.Touch: |
|
activeInput = s_TouchInput; |
|
break; |
|
} |
|
} |
|
|
|
public static bool AxisExists(string name) |
|
{ |
|
return activeInput.AxisExists(name); |
|
} |
|
|
|
public static bool ButtonExists(string name) |
|
{ |
|
return activeInput.ButtonExists(name); |
|
} |
|
|
|
public static void RegisterVirtualAxis(VirtualAxis axis) |
|
{ |
|
activeInput.RegisterVirtualAxis(axis); |
|
} |
|
|
|
|
|
public static void RegisterVirtualButton(VirtualButton button) |
|
{ |
|
activeInput.RegisterVirtualButton(button); |
|
} |
|
|
|
|
|
public static void UnRegisterVirtualAxis(string name) |
|
{ |
|
if (name == null) |
|
{ |
|
throw new ArgumentNullException("name"); |
|
} |
|
activeInput.UnRegisterVirtualAxis(name); |
|
} |
|
|
|
|
|
public static void UnRegisterVirtualButton(string name) |
|
{ |
|
activeInput.UnRegisterVirtualButton(name); |
|
} |
|
|
|
|
|
// returns a reference to a named virtual axis if it exists otherwise null |
|
public static VirtualAxis VirtualAxisReference(string name) |
|
{ |
|
return activeInput.VirtualAxisReference(name); |
|
} |
|
|
|
|
|
// returns the platform appropriate axis for the given name |
|
public static float GetAxis(string name) |
|
{ |
|
return GetAxis(name, false); |
|
} |
|
|
|
|
|
public static float GetAxisRaw(string name) |
|
{ |
|
return GetAxis(name, true); |
|
} |
|
|
|
|
|
// private function handles both types of axis (raw and not raw) |
|
private static float GetAxis(string name, bool raw) |
|
{ |
|
return activeInput.GetAxis(name, raw); |
|
} |
|
|
|
|
|
// -- Button handling -- |
|
public static bool GetButton(string name) |
|
{ |
|
return activeInput.GetButton(name); |
|
} |
|
|
|
|
|
public static bool GetButtonDown(string name) |
|
{ |
|
return activeInput.GetButtonDown(name); |
|
} |
|
|
|
|
|
public static bool GetButtonUp(string name) |
|
{ |
|
return activeInput.GetButtonUp(name); |
|
} |
|
|
|
|
|
public static void SetButtonDown(string name) |
|
{ |
|
activeInput.SetButtonDown(name); |
|
} |
|
|
|
|
|
public static void SetButtonUp(string name) |
|
{ |
|
activeInput.SetButtonUp(name); |
|
} |
|
|
|
|
|
public static void SetAxisPositive(string name) |
|
{ |
|
activeInput.SetAxisPositive(name); |
|
} |
|
|
|
|
|
public static void SetAxisNegative(string name) |
|
{ |
|
activeInput.SetAxisNegative(name); |
|
} |
|
|
|
|
|
public static void SetAxisZero(string name) |
|
{ |
|
activeInput.SetAxisZero(name); |
|
} |
|
|
|
|
|
public static void SetAxis(string name, float value) |
|
{ |
|
activeInput.SetAxis(name, value); |
|
} |
|
|
|
|
|
public static Vector3 mousePosition |
|
{ |
|
get { return activeInput.MousePosition(); } |
|
} |
|
|
|
|
|
public static void SetVirtualMousePositionX(float f) |
|
{ |
|
activeInput.SetVirtualMousePositionX(f); |
|
} |
|
|
|
|
|
public static void SetVirtualMousePositionY(float f) |
|
{ |
|
activeInput.SetVirtualMousePositionY(f); |
|
} |
|
|
|
|
|
public static void SetVirtualMousePositionZ(float f) |
|
{ |
|
activeInput.SetVirtualMousePositionZ(f); |
|
} |
|
|
|
|
|
// virtual axis and button classes - applies to mobile input |
|
// Can be mapped to touch joysticks, tilt, gyro, etc, depending on desired implementation. |
|
// Could also be implemented by other input devices - kinect, electronic sensors, etc |
|
public class VirtualAxis |
|
{ |
|
public string name { get; private set; } |
|
private float m_Value; |
|
public bool matchWithInputManager { get; private set; } |
|
|
|
|
|
public VirtualAxis(string name) |
|
: this(name, true) |
|
{ |
|
} |
|
|
|
|
|
public VirtualAxis(string name, bool matchToInputSettings) |
|
{ |
|
this.name = name; |
|
matchWithInputManager = matchToInputSettings; |
|
} |
|
|
|
|
|
// removes an axes from the cross platform input system |
|
public void Remove() |
|
{ |
|
UnRegisterVirtualAxis(name); |
|
} |
|
|
|
|
|
// a controller gameobject (eg. a virtual thumbstick) should update this class |
|
public void Update(float value) |
|
{ |
|
m_Value = value; |
|
} |
|
|
|
|
|
public float GetValue |
|
{ |
|
get { return m_Value; } |
|
} |
|
|
|
|
|
public float GetValueRaw |
|
{ |
|
get { return m_Value; } |
|
} |
|
} |
|
|
|
// a controller gameobject (eg. a virtual GUI button) should call the |
|
// 'pressed' function of this class. Other objects can then read the |
|
// Get/Down/Up state of this button. |
|
public class VirtualButton |
|
{ |
|
public string name { get; private set; } |
|
public bool matchWithInputManager { get; private set; } |
|
|
|
private int m_LastPressedFrame = -5; |
|
private int m_ReleasedFrame = -5; |
|
private bool m_Pressed; |
|
|
|
|
|
public VirtualButton(string name) |
|
: this(name, true) |
|
{ |
|
} |
|
|
|
|
|
public VirtualButton(string name, bool matchToInputSettings) |
|
{ |
|
this.name = name; |
|
matchWithInputManager = matchToInputSettings; |
|
} |
|
|
|
|
|
// A controller gameobject should call this function when the button is pressed down |
|
public void Pressed() |
|
{ |
|
if (m_Pressed) |
|
{ |
|
return; |
|
} |
|
m_Pressed = true; |
|
m_LastPressedFrame = Time.frameCount; |
|
} |
|
|
|
|
|
// A controller gameobject should call this function when the button is released |
|
public void Released() |
|
{ |
|
m_Pressed = false; |
|
m_ReleasedFrame = Time.frameCount; |
|
} |
|
|
|
|
|
// the controller gameobject should call Remove when the button is destroyed or disabled |
|
public void Remove() |
|
{ |
|
UnRegisterVirtualButton(name); |
|
} |
|
|
|
|
|
// these are the states of the button which can be read via the cross platform input system |
|
public bool GetButton |
|
{ |
|
get { return m_Pressed; } |
|
} |
|
|
|
|
|
public bool GetButtonDown |
|
{ |
|
get |
|
{ |
|
return m_LastPressedFrame - Time.frameCount == -1; |
|
} |
|
} |
|
|
|
|
|
public bool GetButtonUp |
|
{ |
|
get |
|
{ |
|
return (m_ReleasedFrame == Time.frameCount - 1); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|