Created
November 11, 2015 23:57
-
-
Save sverrirs/0a0181fb17b29d070003 to your computer and use it in GitHub Desktop.
Revisions
-
sverrirs created this gist
Nov 11, 2015 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,124 @@ using System; using UnityEngine; using XboxBigButton; public class XboxBigButtonJoystick : MonoBehaviour { private XboxBigButtonDevice _device; private Buttons[] _state = new Buttons[4]; private static XboxBigButtonJoystick _instance; public static bool GetButton(Controller playerColor, Buttons button) { bool success = (_instance._state[(int)playerColor] & button ) == button; _instance._state[(int)playerColor] &= ~button; // Consume the button state return success; } public static bool GetPlayer(Controller playerColor) { return _instance._state[(int) playerColor] > 0; } private float _hor = 0f; private float _easeStrength = 0.5f; public static float GetAxis(Controller playerColor, string axisName ) { int amount = 0; if (axisName == "Horizontal") { if ((_instance._state[(int) playerColor] & Buttons.Right) == Buttons.Right) { amount += 1; _instance._state[(int)playerColor] &= ~Buttons.Right; } if ((_instance._state[(int) playerColor] & Buttons.Left) == Buttons.Left) { amount += -1; _instance._state[(int)playerColor] &= ~Buttons.Left; } } else if( axisName == "Vertical") { if ((_instance._state[(int)playerColor] & Buttons.Up) == Buttons.Up) { amount += 1; _instance._state[(int)playerColor] &= ~Buttons.Up; } if ((_instance._state[(int)playerColor] & Buttons.Down) == Buttons.Down) { amount += -1; _instance._state[(int)playerColor] &= ~Buttons.Down; } } if (amount == 0) return 0.0f; // Attempt to do some easing of the movement, yeah this doesn't really work that well float val = 1.0f * amount; _instance._hor = Mathf.Lerp(_instance._hor, val, _instance._easeStrength); return _instance._hor; } // Use this for initialization void Start () { // Must have a dummy line to instantiate Loom correctly (sets up the dummy game object that we will invoke everuthing on) var tmp = Loom.Current.GetComponent<Loom>(); // Store the singleton _instance = this; if (_device == null) { _state = new Buttons[4]; _device = new XboxBigButtonDevice(); _device.ButtonStateChanged += _device_ButtonStateChanged; _device.Connect(); } } private void CleanUpJoystickDevice() { if (_device != null) { _device.ButtonStateChanged -= _device_ButtonStateChanged; _device.Disconnect(); _device.Dispose(); _device = null; _state = null; } } void OnApplicationQuit() { CleanUpJoystickDevice(); } void OnDestroy() { CleanUpJoystickDevice(); } private void _device_ButtonStateChanged(object sender, XboxBigButtonDeviceEventArgs e) { var controller = e.Controller; var buttonState = e.ButtonState; Loom.QueueOnMainThread(() => { UpdateButtonStateDictionary(controller, buttonState); }); } private void UpdateButtonStateDictionary(Controller c, Buttons b) { _instance._state[(int) c] |= b; } }