using System; using FlaxEngine; namespace FlaxEditor.CustomEditors.Editors { /// /// Custom editor for . /// Allows capturing gamepad buttons and assigning them /// to the edited value. /// [CustomEditor(typeof(GamepadButton))] public class GamepadButtonEditor : BindableButtonEditor { /// public override void Initialize(LayoutElementsContainer layout) { base.Initialize(layout); FlaxEngine.Scripting.Update += OnUpdate; } /// protected override void Deinitialize() { FlaxEngine.Scripting.Update -= OnUpdate; base.Deinitialize(); } private void OnUpdate() { if (!IsListeningForInput) return; // Since there is no way to get an event about // which gamepad pressed what button, we have // to poll all gamepads and buttons manually. for (var i = 0; i < Input.GamepadsCount; i++) { var pad = Input.Gamepads[i]; foreach (var btn in Enum.GetValues()) { if (pad.GetButtonUp(btn)) { IsListeningForInput = false; SetValue(btn); return; } } } } } }