diff --git a/coreAPI/src/java/net/java/games/input/AbstractComponent.java b/coreAPI/src/java/net/java/games/input/AbstractComponent.java index 40a1750..c521276 100644 --- a/coreAPI/src/java/net/java/games/input/AbstractComponent.java +++ b/coreAPI/src/java/net/java/games/input/AbstractComponent.java @@ -52,6 +52,7 @@ public abstract class AbstractComponent implements Component { private final Identifier id; + private boolean has_polled; private float value; private float event_value; @@ -98,9 +99,21 @@ public abstract class AbstractComponent implements Component { * @return 0.0f by default, can be overridden */ public final float getPollData() { + if (!has_polled && !isRelative()) { + has_polled = true; + try { + setPollData(poll()); + } catch (IOException e) { + ControllerEnvironment.log("Failed to poll component: " + e); + } + } return value; } + final void resetHasPolled() { + has_polled = false; + } + final void setPollData(float value) { this.value = value; } diff --git a/coreAPI/src/java/net/java/games/input/AbstractController.java b/coreAPI/src/java/net/java/games/input/AbstractController.java index 266a303..02233df 100644 --- a/coreAPI/src/java/net/java/games/input/AbstractController.java +++ b/coreAPI/src/java/net/java/games/input/AbstractController.java @@ -212,8 +212,8 @@ public abstract class AbstractController implements Controller { if (component.isRelative()) { component.setPollData(0); } else { - float value = component.poll(); - component.setPollData(value); + // Let the component poll itself lazily + component.resetHasPolled(); } } while (getNextDeviceEvent(event)) {