diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandGenericHID.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandGenericHID.java index fadff922612..844f4bdce87 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandGenericHID.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandGenericHID.java @@ -7,6 +7,8 @@ import edu.wpi.first.wpilibj.GenericHID; import edu.wpi.first.wpilibj.event.EventLoop; import edu.wpi.first.wpilibj2.command.CommandScheduler; +import java.util.HashMap; +import java.util.Map; /** * A version of {@link GenericHID} with {@link Trigger} factories for command-based. @@ -15,6 +17,8 @@ */ public class CommandGenericHID { private final GenericHID m_hid; + private final Map> m_buttonCache = new HashMap<>(); + private final Map> m_povCache = new HashMap<>(); /** * Construct an instance of a device. @@ -54,7 +58,9 @@ public Trigger button(int button) { * @return an event instance representing the button's digital signal attached to the given loop. */ public Trigger button(int button, EventLoop loop) { - return new Trigger(loop, () -> m_hid.getRawButton(button)); + var cache = m_buttonCache.computeIfAbsent(loop, k -> new HashMap<>()); + return cache.computeIfAbsent(button, k -> + new Trigger(loop, () -> m_hid.getRawButton(k))); } /** @@ -85,7 +91,10 @@ public Trigger pov(int angle) { * @return a Trigger instance based around this angle of a POV on the HID. */ public Trigger pov(int pov, int angle, EventLoop loop) { - return new Trigger(loop, () -> m_hid.getPOV(pov) == angle); + var cache = m_povCache.computeIfAbsent(loop, k -> new HashMap<>()); + // angle can be -1, so use 3600 instead of 360 + return cache.computeIfAbsent(pov * 3600 + angle, k -> + new Trigger(loop, () -> m_hid.getPOV(pov) == angle)); } /** diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandJoystick.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandJoystick.java index f9936096c4d..647369f4018 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandJoystick.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandJoystick.java @@ -55,7 +55,7 @@ public Trigger trigger() { * given loop. */ public Trigger trigger(EventLoop loop) { - return m_hid.trigger(loop).castTo(Trigger::new); + return button(Joystick.ButtonType.kTrigger.value, loop); } /** @@ -77,7 +77,7 @@ public Trigger top() { * loop. */ public Trigger top(EventLoop loop) { - return m_hid.top(loop).castTo(Trigger::new); + return button(Joystick.ButtonType.kTop.value, loop); } /** diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS4Controller.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS4Controller.java index a7c0ac7c211..042b53243b7 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS4Controller.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS4Controller.java @@ -55,7 +55,7 @@ public Trigger L2() { * loop. */ public Trigger L2(EventLoop loop) { - return m_hid.L2(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kL2.value, loop); } /** @@ -76,7 +76,7 @@ public Trigger R2() { * loop. */ public Trigger R2(EventLoop loop) { - return m_hid.R2(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kR2.value, loop); } /** @@ -97,7 +97,7 @@ public Trigger L1() { * loop. */ public Trigger L1(EventLoop loop) { - return m_hid.L1(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kL1.value, loop); } /** @@ -118,7 +118,7 @@ public Trigger R1() { * loop. */ public Trigger R1(EventLoop loop) { - return m_hid.R1(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kR1.value, loop); } /** @@ -139,7 +139,7 @@ public Trigger L3() { * loop. */ public Trigger L3(EventLoop loop) { - return m_hid.L3(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kL3.value, loop); } /** @@ -160,7 +160,7 @@ public Trigger R3() { * loop. */ public Trigger R3(EventLoop loop) { - return m_hid.R3(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kR3.value, loop); } /** @@ -181,7 +181,7 @@ public Trigger square() { * loop. */ public Trigger square(EventLoop loop) { - return m_hid.square(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kSquare.value, loop); } /** @@ -202,7 +202,7 @@ public Trigger cross() { * loop. */ public Trigger cross(EventLoop loop) { - return m_hid.cross(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kCross.value, loop); } /** @@ -223,7 +223,7 @@ public Trigger triangle() { * given loop. */ public Trigger triangle(EventLoop loop) { - return m_hid.triangle(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kTriangle.value, loop); } /** @@ -244,7 +244,7 @@ public Trigger circle() { * loop. */ public Trigger circle(EventLoop loop) { - return m_hid.circle(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kCircle.value, loop); } /** @@ -265,7 +265,7 @@ public Trigger share() { * loop. */ public Trigger share(EventLoop loop) { - return m_hid.share(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kShare.value, loop); } /** @@ -286,7 +286,7 @@ public Trigger PS() { * loop. */ public Trigger PS(EventLoop loop) { - return m_hid.PS(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kPS.value, loop); } /** @@ -307,7 +307,7 @@ public Trigger options() { * given loop. */ public Trigger options(EventLoop loop) { - return m_hid.options(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kOptions.value, loop); } /** @@ -328,7 +328,7 @@ public Trigger touchpad() { * loop. */ public Trigger touchpad(EventLoop loop) { - return m_hid.touchpad(loop).castTo(Trigger::new); + return button(PS4Controller.Button.kTouchpad.value, loop); } /** diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS5Controller.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS5Controller.java index 6b149d62b4b..9ff0d70b3eb 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS5Controller.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandPS5Controller.java @@ -55,7 +55,7 @@ public Trigger L2() { * loop. */ public Trigger L2(EventLoop loop) { - return m_hid.L2(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kL2.value, loop); } /** @@ -76,7 +76,7 @@ public Trigger R2() { * loop. */ public Trigger R2(EventLoop loop) { - return m_hid.R2(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kR2.value, loop); } /** @@ -97,7 +97,7 @@ public Trigger L1() { * loop. */ public Trigger L1(EventLoop loop) { - return m_hid.L1(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kL1.value, loop); } /** @@ -118,7 +118,7 @@ public Trigger R1() { * loop. */ public Trigger R1(EventLoop loop) { - return m_hid.R1(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kR1.value, loop); } /** @@ -139,7 +139,7 @@ public Trigger L3() { * loop. */ public Trigger L3(EventLoop loop) { - return m_hid.L3(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kL3.value, loop); } /** @@ -160,7 +160,7 @@ public Trigger R3() { * loop. */ public Trigger R3(EventLoop loop) { - return m_hid.R3(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kR3.value, loop); } /** @@ -181,7 +181,7 @@ public Trigger square() { * loop. */ public Trigger square(EventLoop loop) { - return m_hid.square(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kSquare.value, loop); } /** @@ -202,7 +202,7 @@ public Trigger cross() { * loop. */ public Trigger cross(EventLoop loop) { - return m_hid.cross(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kCross.value, loop); } /** @@ -223,7 +223,7 @@ public Trigger triangle() { * given loop. */ public Trigger triangle(EventLoop loop) { - return m_hid.triangle(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kTriangle.value, loop); } /** @@ -244,7 +244,7 @@ public Trigger circle() { * loop. */ public Trigger circle(EventLoop loop) { - return m_hid.circle(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kCircle.value, loop); } /** @@ -265,7 +265,7 @@ public Trigger create() { * loop. */ public Trigger create(EventLoop loop) { - return m_hid.create(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kCreate.value, loop); } /** @@ -286,7 +286,7 @@ public Trigger PS() { * loop. */ public Trigger PS(EventLoop loop) { - return m_hid.PS(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kPS.value, loop); } /** @@ -307,7 +307,7 @@ public Trigger options() { * given loop. */ public Trigger options(EventLoop loop) { - return m_hid.options(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kOptions.value, loop); } /** @@ -328,7 +328,7 @@ public Trigger touchpad() { * loop. */ public Trigger touchpad(EventLoop loop) { - return m_hid.touchpad(loop).castTo(Trigger::new); + return button(PS5Controller.Button.kTouchpad.value, loop); } /** diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandStadiaController.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandStadiaController.java index 0d919e5caa9..053ebfae6d2 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandStadiaController.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandStadiaController.java @@ -56,7 +56,7 @@ public Trigger leftBumper() { * loop. */ public Trigger leftBumper(EventLoop loop) { - return m_hid.leftBumper(loop).castTo(Trigger::new); + return button(StadiaController.Button.kLeftBumper.value, loop); } /** @@ -78,7 +78,7 @@ public Trigger rightBumper() { * loop. */ public Trigger rightBumper(EventLoop loop) { - return m_hid.rightBumper(loop).castTo(Trigger::new); + return button(StadiaController.Button.kRightBumper.value, loop); } /** @@ -100,7 +100,7 @@ public Trigger leftStick() { * given loop. */ public Trigger leftStick(EventLoop loop) { - return m_hid.leftStick(loop).castTo(Trigger::new); + return button(StadiaController.Button.kLeftStick.value, loop); } /** @@ -122,7 +122,7 @@ public Trigger rightStick() { * given loop. */ public Trigger rightStick(EventLoop loop) { - return m_hid.rightStick(loop).castTo(Trigger::new); + return button(StadiaController.Button.kRightStick.value, loop); } /** @@ -144,7 +144,7 @@ public Trigger rightTrigger() { * the given loop. */ public Trigger rightTrigger(EventLoop loop) { - return m_hid.rightTrigger(loop).castTo(Trigger::new); + return button(StadiaController.Button.kRightTrigger.value, loop); } /** @@ -166,7 +166,7 @@ public Trigger leftTrigger() { * given loop. */ public Trigger leftTrigger(EventLoop loop) { - return m_hid.leftTrigger(loop).castTo(Trigger::new); + return button(StadiaController.Button.kLeftTrigger.value, loop); } /** @@ -188,7 +188,7 @@ public Trigger a() { * loop. */ public Trigger a(EventLoop loop) { - return m_hid.a(loop).castTo(Trigger::new); + return button(StadiaController.Button.kA.value, loop); } /** @@ -210,7 +210,7 @@ public Trigger b() { * loop. */ public Trigger b(EventLoop loop) { - return m_hid.b(loop).castTo(Trigger::new); + return button(StadiaController.Button.kB.value, loop); } /** @@ -232,7 +232,7 @@ public Trigger x() { * loop. */ public Trigger x(EventLoop loop) { - return m_hid.x(loop).castTo(Trigger::new); + return button(StadiaController.Button.kX.value, loop); } /** @@ -254,7 +254,7 @@ public Trigger y() { * loop. */ public Trigger y(EventLoop loop) { - return m_hid.y(loop).castTo(Trigger::new); + return button(StadiaController.Button.kY.value, loop); } /** @@ -276,7 +276,7 @@ public Trigger ellipses() { * given loop. */ public Trigger ellipses(EventLoop loop) { - return m_hid.ellipses(loop).castTo(Trigger::new); + return button(StadiaController.Button.kEllipses.value, loop); } /** @@ -298,7 +298,7 @@ public Trigger stadia() { * loop. */ public Trigger stadia(EventLoop loop) { - return m_hid.stadia(loop).castTo(Trigger::new); + return button(StadiaController.Button.kStadia.value, loop); } /** @@ -320,7 +320,7 @@ public Trigger google() { * loop. */ public Trigger google(EventLoop loop) { - return m_hid.google(loop).castTo(Trigger::new); + return button(StadiaController.Button.kGoogle.value, loop); } /** @@ -342,7 +342,7 @@ public Trigger frame() { * loop. */ public Trigger frame(EventLoop loop) { - return m_hid.frame(loop).castTo(Trigger::new); + return button(StadiaController.Button.kFrame.value, loop); } /** @@ -364,7 +364,7 @@ public Trigger hamburger() { * given loop. */ public Trigger hamburger(EventLoop loop) { - return m_hid.hamburger(loop).castTo(Trigger::new); + return button(StadiaController.Button.kHamburger.value, loop); } /** diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandXboxController.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandXboxController.java index 6969c984688..c7532f7a005 100644 --- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandXboxController.java +++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/CommandXboxController.java @@ -56,7 +56,7 @@ public Trigger leftBumper() { * loop. */ public Trigger leftBumper(EventLoop loop) { - return m_hid.leftBumper(loop).castTo(Trigger::new); + return button(XboxController.Button.kLeftBumper.value, loop); } /** @@ -78,7 +78,7 @@ public Trigger rightBumper() { * loop. */ public Trigger rightBumper(EventLoop loop) { - return m_hid.rightBumper(loop).castTo(Trigger::new); + return button(XboxController.Button.kRightBumper.value, loop); } /** @@ -100,7 +100,7 @@ public Trigger leftStick() { * given loop. */ public Trigger leftStick(EventLoop loop) { - return m_hid.leftStick(loop).castTo(Trigger::new); + return button(XboxController.Button.kLeftStick.value, loop); } /** @@ -122,7 +122,7 @@ public Trigger rightStick() { * given loop. */ public Trigger rightStick(EventLoop loop) { - return m_hid.rightStick(loop).castTo(Trigger::new); + return button(XboxController.Button.kRightStick.value, loop); } /** @@ -144,7 +144,7 @@ public Trigger a() { * loop. */ public Trigger a(EventLoop loop) { - return m_hid.a(loop).castTo(Trigger::new); + return button(XboxController.Button.kA.value, loop); } /** @@ -166,7 +166,7 @@ public Trigger b() { * loop. */ public Trigger b(EventLoop loop) { - return m_hid.b(loop).castTo(Trigger::new); + return button(XboxController.Button.kB.value, loop); } /** @@ -188,7 +188,7 @@ public Trigger x() { * loop. */ public Trigger x(EventLoop loop) { - return m_hid.x(loop).castTo(Trigger::new); + return button(XboxController.Button.kX.value, loop); } /** @@ -210,7 +210,7 @@ public Trigger y() { * loop. */ public Trigger y(EventLoop loop) { - return m_hid.y(loop).castTo(Trigger::new); + return button(XboxController.Button.kY.value, loop); } /** @@ -232,7 +232,7 @@ public Trigger start() { * loop. */ public Trigger start(EventLoop loop) { - return m_hid.start(loop).castTo(Trigger::new); + return button(XboxController.Button.kStart.value, loop); } /** @@ -254,7 +254,7 @@ public Trigger back() { * loop. */ public Trigger back(EventLoop loop) { - return m_hid.back(loop).castTo(Trigger::new); + return button(XboxController.Button.kBack.value, loop); } /**