Advertisement
infinite_ammo

Input8.cs

Sep 20th, 2013
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 8.83 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class Input8 : MonoBehaviour
  5. {
  6.     public enum ButtonCode
  7.     {
  8.         Face1,
  9.         Face2,
  10.         Face3,
  11.         Face4,
  12.         LeftBumper,
  13.         RightBumper,
  14.         LeftStickButton,
  15.         RightStickButton,
  16.     }
  17.  
  18.     public enum AxisCode
  19.     {
  20.         LeftStickX,
  21.         LeftStickY,
  22.         RightStickX,
  23.         RightStickY,
  24.         LeftTrigger,
  25.         RightTrigger,
  26.     }
  27.  
  28.     [System.Serializable]
  29.     public class ButtonEntry
  30.     {
  31.         public string name;
  32.         public ButtonCode[] buttonCodes;
  33.         public KeyCode[] keyCodes;
  34.     }
  35.  
  36.     [System.Serializable]
  37.     public class AxisEntry
  38.     {
  39.         public string name;
  40.         public AxisCode[] axisCodes;
  41.         public KeyCode[] keyCodes;
  42.     }
  43.  
  44.     public bool invertY;
  45.     public float deadZone;
  46.     public ButtonEntry[] buttonEntries;
  47.     public AxisEntry[] axisEntries;
  48.  
  49.  
  50.     static Input8 instance;
  51.  
  52.     enum Platform
  53.     {
  54.         Unknown,
  55.         Windows,
  56.         Mac,
  57.     }
  58.  
  59.     static Platform platform;
  60.     static KeyCode face1KeyCode;
  61.     static KeyCode face2KeyCode;
  62.     static KeyCode face3KeyCode;
  63.     static KeyCode face4KeyCode;
  64.     static KeyCode leftBumperKeyCode;
  65.     static KeyCode rightBumperKeyCode;
  66.     static KeyCode leftStickButtonKeyCode;
  67.     static KeyCode rightStickButtonKeyCode;
  68.  
  69.     static string leftStickXName;
  70.     static string leftStickYName;
  71.     static string rightStickXName;
  72.     static string rightStickYName;
  73.     static string triggerLeftName;
  74.     static string triggerRightName;
  75.  
  76.     void Awake()
  77.     {
  78.         if (instance)
  79.         {
  80.             Destroy(gameObject);
  81.             return;
  82.         }
  83.         instance = this;
  84.  
  85.         if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer)
  86.         {
  87.             platform = Platform.Mac;
  88.  
  89.             face1KeyCode = KeyCode.JoystickButton16;
  90.             face2KeyCode = KeyCode.JoystickButton17;
  91.             face3KeyCode = KeyCode.JoystickButton18;
  92.             face4KeyCode = KeyCode.JoystickButton19;
  93.             leftBumperKeyCode = KeyCode.JoystickButton13;
  94.             rightBumperKeyCode = KeyCode.JoystickButton14;
  95.             leftStickButtonKeyCode = KeyCode.JoystickButton11;
  96.             rightStickButtonKeyCode = KeyCode.JoystickButton12;
  97.  
  98.             leftStickXName = "joystick 1 analog 0";
  99.             leftStickYName = "joystick 1 analog 1";
  100.             rightStickXName = "joystick 1 analog 2";
  101.             rightStickYName = "joystick 1 analog 3";
  102.             triggerLeftName = "joystick 1 analog 4";
  103.             triggerRightName = "joystick 1 analog 5";
  104.         }
  105.         else if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
  106.         {
  107.             platform = Platform.Windows;
  108.  
  109.             face1KeyCode = KeyCode.JoystickButton0;
  110.             face2KeyCode = KeyCode.JoystickButton1;
  111.             face3KeyCode = KeyCode.JoystickButton2;
  112.             face4KeyCode = KeyCode.JoystickButton3;
  113.             leftBumperKeyCode = KeyCode.JoystickButton4;
  114.             rightBumperKeyCode = KeyCode.JoystickButton5;
  115.             leftStickButtonKeyCode = KeyCode.JoystickButton8;
  116.             rightStickButtonKeyCode = KeyCode.JoystickButton9;
  117.  
  118.             leftStickXName = "joystick 1 analog 0";
  119.             leftStickYName = "joystick 1 analog 1";
  120.             rightStickXName = "joystick 1 analog 3";
  121.             rightStickYName = "joystick 1 analog 4";
  122.             triggerLeftName = "joystick 1 analog 2";
  123.             triggerRightName = "joystick 1 analog 2";
  124.         }
  125.     }
  126.  
  127.     public static bool GetButton(ButtonCode buttonCode)
  128.     {
  129.         switch (buttonCode)
  130.         {
  131.             case ButtonCode.Face1:
  132.                 return Input.GetKey(face1KeyCode);
  133.             case ButtonCode.Face2:
  134.                 return Input.GetKey(face2KeyCode);
  135.             case ButtonCode.Face3:
  136.                 return Input.GetKey(face3KeyCode);
  137.             case ButtonCode.Face4:
  138.                 return Input.GetKey(face4KeyCode);
  139.             case ButtonCode.LeftBumper:
  140.                 return Input.GetKey(leftBumperKeyCode);
  141.             case ButtonCode.RightBumper:
  142.                 return Input.GetKey(rightBumperKeyCode);
  143.             case ButtonCode.LeftStickButton:
  144.                 return Input.GetKey(leftStickButtonKeyCode);
  145.             case ButtonCode.RightStickButton:
  146.                 return Input.GetKey(rightStickButtonKeyCode);
  147.         }
  148.         return false;
  149.     }
  150.  
  151.     public static bool GetButtonDown(ButtonCode buttonCode)
  152.     {
  153.         switch (buttonCode)
  154.         {
  155.             case ButtonCode.Face1:
  156.                 return Input.GetKeyDown(face1KeyCode);
  157.             case ButtonCode.Face2:
  158.                 return Input.GetKeyDown(face2KeyCode);
  159.             case ButtonCode.Face3:
  160.                 return Input.GetKeyDown(face3KeyCode);
  161.             case ButtonCode.Face4:
  162.                 return Input.GetKeyDown(face4KeyCode);
  163.             case ButtonCode.LeftBumper:
  164.                 return Input.GetKeyDown(leftBumperKeyCode);
  165.             case ButtonCode.RightBumper:
  166.                 return Input.GetKeyDown(rightBumperKeyCode);
  167.             case ButtonCode.LeftStickButton:
  168.                 return Input.GetKeyDown(leftStickButtonKeyCode);
  169.             case ButtonCode.RightStickButton:
  170.                 return Input.GetKeyDown(rightStickButtonKeyCode);
  171.         }
  172.         return false;
  173.     }
  174.  
  175.     public static bool GetButtonUp(ButtonCode buttonCode)
  176.     {
  177.         switch (buttonCode)
  178.         {
  179.             case ButtonCode.Face1:
  180.                 return Input.GetKeyUp(face1KeyCode);
  181.             case ButtonCode.Face2:
  182.                 return Input.GetKeyUp(face2KeyCode);
  183.             case ButtonCode.Face3:
  184.                 return Input.GetKeyUp(face3KeyCode);
  185.             case ButtonCode.Face4:
  186.                 return Input.GetKeyUp(face4KeyCode);
  187.             case ButtonCode.LeftBumper:
  188.                 return Input.GetKeyUp(leftBumperKeyCode);
  189.             case ButtonCode.RightBumper:
  190.                 return Input.GetKeyUp(rightBumperKeyCode);
  191.             case ButtonCode.LeftStickButton:
  192.                 return Input.GetKeyUp(leftStickButtonKeyCode);
  193.             case ButtonCode.RightStickButton:
  194.                 return Input.GetKeyUp(rightStickButtonKeyCode);
  195.         }
  196.         return false;
  197.     }
  198.  
  199.     public static float GetAxis(AxisCode axisCode)
  200.     {
  201.         switch (axisCode)
  202.         {
  203.             case AxisCode.LeftStickX:
  204.                 return Input.GetAxis(leftStickXName);
  205.             case AxisCode.LeftStickY:
  206.                 return Input.GetAxis(leftStickYName) * (instance.invertY?-1f:1f);
  207.             case AxisCode.RightStickX:
  208.                 return Input.GetAxis(rightStickXName);
  209.             case AxisCode.RightStickY:
  210.                 return Input.GetAxis(rightStickYName) * (instance.invertY?-1f:1f);
  211.             case AxisCode.LeftTrigger:
  212.             {
  213.                 if (platform == Platform.Mac)
  214.                     return (Input.GetAxis(triggerLeftName) + 1f) / 2f;
  215.                 else if (platform == Platform.Windows)
  216.                 {
  217.                     float v = Input.GetAxis(triggerLeftName);
  218.                     if (v > 0f)
  219.                         return v;
  220.                 }  
  221.                 else
  222.                     return Input.GetAxis(triggerLeftName);
  223.             }
  224.             break;
  225.             case AxisCode.RightTrigger:
  226.             {
  227.                 if (platform == Platform.Mac)
  228.                     return (Input.GetAxis(triggerRightName) + 1f) / 2f;
  229.                 else if (platform == Platform.Windows)
  230.                 {
  231.                     float v = Input.GetAxis(triggerRightName);
  232.                     if (v < 0f)
  233.                         return -v;
  234.                 }          
  235.                 else
  236.                     return Input.GetAxis(triggerRightName);
  237.             }
  238.             break;
  239.         }
  240.         return 0f;
  241.     }
  242.  
  243.     public static bool GetButtonDown(string buttonName)
  244.     {
  245.         ButtonEntry buttonEntry = instance.GetButtonEntryByName(buttonName);
  246.         if (buttonEntry != null)
  247.         {
  248.             foreach (KeyCode keyCode in buttonEntry.keyCodes)
  249.             {
  250.                 if (Input.GetKeyDown(keyCode))
  251.                 {
  252.                     return true;
  253.                 }
  254.             }
  255.  
  256.             foreach (ButtonCode buttonCode in buttonEntry.buttonCodes)
  257.             {
  258.                 if (GetButtonDown(buttonCode))
  259.                 {
  260.                     return true;
  261.                 }
  262.             }
  263.         }
  264.         return false;
  265.     }
  266.  
  267.     public static bool GetButtonUp(string buttonName)
  268.     {
  269.         ButtonEntry buttonEntry = instance.GetButtonEntryByName(buttonName);
  270.         if (buttonEntry != null)
  271.         {
  272.             foreach (KeyCode keyCode in buttonEntry.keyCodes)
  273.             {
  274.                 if (Input.GetKeyUp(keyCode))
  275.                 {
  276.                     return true;
  277.                 }
  278.             }
  279.  
  280.             foreach (ButtonCode buttonCode in buttonEntry.buttonCodes)
  281.             {
  282.                 if (GetButtonUp(buttonCode))
  283.                 {
  284.                     return true;
  285.                 }
  286.             }
  287.         }
  288.         return false;
  289.     }
  290.  
  291.     public static bool GetButton(string buttonName)
  292.     {
  293.         ButtonEntry buttonEntry = instance.GetButtonEntryByName(buttonName);
  294.         if (buttonEntry != null)
  295.         {
  296.             foreach (KeyCode keyCode in buttonEntry.keyCodes)
  297.             {
  298.                 if (Input.GetKey(keyCode))
  299.                 {
  300.                     return true;
  301.                 }
  302.             }
  303.  
  304.             foreach (ButtonCode buttonCode in buttonEntry.buttonCodes)
  305.             {
  306.                 if (GetButton(buttonCode))
  307.                 {
  308.                     return true;
  309.                 }
  310.             }
  311.         }
  312.         return false;
  313.     }
  314.  
  315.     public static float GetAxis(string axisName)
  316.     {
  317.         float axisValue = 0f;
  318.         AxisEntry axisEntry = instance.GetAxisEntryByName(axisName);
  319.         if (axisEntry != null)
  320.         {
  321.            
  322.             foreach (AxisCode axisCode in axisEntry.axisCodes)
  323.             {
  324.                 axisValue += GetAxis(axisCode);
  325.             }
  326.  
  327.             for (int i = 0; i < axisEntry.keyCodes.Length; i++)
  328.             {
  329.                 if (Input.GetKey(axisEntry.keyCodes[i]))
  330.                 {
  331.                     axisValue += ((i % 2 == 0)?-1f:1f);
  332.                 }
  333.             }
  334.         }
  335.         if (Mathf.Abs(axisValue) < instance.deadZone)
  336.         {
  337.             axisValue = 0f;
  338.         }
  339.         return axisValue;
  340.     }
  341.  
  342.     public static float GetAxisRaw(string axisName)
  343.     {
  344.         return GetAxis(axisName);
  345.     }
  346.  
  347.     ButtonEntry GetButtonEntryByName(string name)
  348.     {
  349.         foreach (ButtonEntry buttonEntry in buttonEntries)
  350.         {
  351.             if (buttonEntry.name == name)
  352.             {
  353.                 return buttonEntry;
  354.             }
  355.         }
  356.         Debug.Log("Could not find ButtonEntry named: " + name);
  357.         return null;
  358.     }
  359.  
  360.     AxisEntry GetAxisEntryByName(string name)
  361.     {
  362.         foreach (AxisEntry axisEntry in axisEntries)
  363.         {
  364.             if (axisEntry.name == name)
  365.             {
  366.                 return axisEntry;
  367.             }
  368.         }
  369.         Debug.Log("Could not find AxisEntry named: " + name);
  370.         return null;
  371.     }
  372. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement