showbase: allow attaching default MouseWatcher in attachInputDevice

This makes it easier to control GUIs using a gamepad.
This commit is contained in:
rdb 2019-05-03 15:51:31 +02:00
parent ea0210640c
commit 541a2a73f0

View File

@ -1677,13 +1677,17 @@ class ShowBase(DirectObject.DirectObject):
return self.mouseWatcherNode.getModifierButtons().isDown(
KeyboardButton.meta())
def attachInputDevice(self, device, prefix=None):
def attachInputDevice(self, device, prefix=None, gui=False):
"""
This function attaches an input device to the data graph, which will
cause the device to be polled and generate events. If a prefix is
given and not None, it is used to prefix events generated by this
device, separated by a hyphen.
The gui argument can be set to True (as of Panda3D 1.10.3) to set up
the default MouseWatcher to receive inputs from this device, allowing
it to control user interfaces.
If you call this, you should consider calling detachInputDevice when
you are done with the device or when it is disconnected.
"""
@ -1694,13 +1698,17 @@ class ShowBase(DirectObject.DirectObject):
idn = self.dataRoot.attachNewNode(InputDeviceNode(device, device.name))
# Setup the button thrower to generate events for the device.
bt = idn.attachNewNode(ButtonThrower(device.name))
if prefix is not None:
bt.node().setPrefix(prefix + '-')
if prefix is not None or not gui:
bt = idn.attachNewNode(ButtonThrower(device.name))
if prefix is not None:
bt.node().setPrefix(prefix + '-')
self.deviceButtonThrowers.append(bt)
assert self.notify.debug("Attached input device {0} with prefix {1}".format(device, prefix))
self.__inputDeviceNodes[device] = idn
self.deviceButtonThrowers.append(bt)
if gui:
idn.node().addChild(self.mouseWatcherNode)
def detachInputDevice(self, device):
"""