using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; using XboxCtrlrInput; namespace PlayerInput { public class XboxControllerInputSource<TTarget> : InputSource<TTarget> where TTarget : MonoBehaviour { private static List<XboxController> allControllers; public static IEnumerable<XboxController> AllControllers { get { return allControllers; } } static XboxControllerInputSource() { allControllers = new List<XboxController>() { XboxController.First, XboxController.Second, XboxController.Third, XboxController.Fourth, }; } private Dictionary<InputButton, XboxButton> buttonMapping; private Dictionary<InputAxis, XboxAxis> axisMapping; private XboxController controller; public XboxController Controller { get { return controller; } } public XboxControllerInputSource(XboxController controller) { this.controller = controller; buttonMapping = new Dictionary<InputButton, XboxButton>() { { InputButton.MenuSelect, XboxButton.A }, { InputButton.MenuCancel, XboxButton.B }, //{ InputButton.UseItem, XboxButton.A }, //{ InputButton.PickA, XboxButton.LeftBumper }, //{ InputButton.PickB, XboxButton.RightBumper }, //{ InputButton.AnimalSelector, XboxButton.LeftBumper }, }; axisMapping = new Dictionary<InputAxis, XboxAxis>() { { InputAxis.MenuX, XboxAxis.LeftStickX }, { InputAxis.MenuY, XboxAxis.LeftStickY }, { InputAxis.RakeX, XboxAxis.RightStickX }, { InputAxis.RakeY, XboxAxis.RightStickY }, { InputAxis.MoveX, XboxAxis.LeftStickX }, { InputAxis.MoveY, XboxAxis.LeftStickY }, //{ InputAxis.Throttle, XboxAxis.RightTrigger }, //{ InputAxis.RevThrottle, XboxAxis.LeftTrigger }, }; } protected override void VibrateInternal(float left, float right) { XCI.SetVibration(controller, left, right); } public override bool ButtonPressedThisFrame(InputButton button) { return XCI.GetButtonDown(buttonMapping[button], controller); } public override bool ButtonReleasedThisFrame(InputButton button) { return XCI.GetButtonUp(buttonMapping[button], controller); } public override bool ButtonDown(InputButton button) { return XCI.GetButton(buttonMapping[button], controller); } public override float Axis(InputAxis axis) { return XCI.GetAxis(axisMapping[axis], controller); } } }