diff --git a/samples/gamepad/main.py b/samples/gamepad/gamepad.py similarity index 73% rename from samples/gamepad/main.py rename to samples/gamepad/gamepad.py index 189c4e0f16..fe6cbd296f 100644 --- a/samples/gamepad/main.py +++ b/samples/gamepad/gamepad.py @@ -56,6 +56,16 @@ class App(ShowBase): # movements by ourself self.disableMouse() + # set the center position of the control sticks + # NOTE: here we assume, that the wheel is centered when the application get started. + # In real world applications, you should notice the user and give him enough time + # to center the wheel until you store the center position of the controler! + gamepads = base.devices.getDevices(InputDevice.DC_gamepad) + self.lxcenter = gamepads[0].findControl(InputDevice.C_left_x).state + self.lycenter = gamepads[0].findControl(InputDevice.C_left_y).state + self.rxcenter = gamepads[0].findControl(InputDevice.C_right_x).state + self.rycenter = gamepads[0].findControl(InputDevice.C_right_y).state + self.taskMgr.add(self.moveTask, "movement update task") def connect(self, device): @@ -95,16 +105,14 @@ class App(ShowBase): return task.cont # we will use the first found gamepad - for i in range(gamepads[0].getNumControls()): - if gamepads[0].getControlMap(i) == InputDevice.C_left_x: - movementVec.setX(gamepads[0].getControlState(i)) - elif gamepads[0].getControlMap(i) == InputDevice.C_left_y: - movementVec.setY(gamepads[0].getControlState(i)) - - if gamepads[0].getControlMap(i) == InputDevice.C_right_x: - base.camera.setH(base.camera, 100 * dt * (gamepads[0].getControlState(i))) - elif gamepads[0].getControlMap(i) == InputDevice.C_right_y: - base.camera.setP(base.camera, 100 * dt * (gamepads[0].getControlState(i))) + # Move the camera left/right + movementVec.setX(gamepads[0].findControl(InputDevice.C_left_x).state - self.lxcenter) + # Move the camera forward/backward + movementVec.setY(gamepads[0].findControl(InputDevice.C_left_y).state - self.lycenter) + # Control the cameras heading + base.camera.setH(base.camera, 100 * dt * (gamepads[0].findControl(InputDevice.C_right_x).state - self.rxcenter)) + # Control the cameras pitch + base.camera.setP(base.camera, 100 * dt * (gamepads[0].findControl(InputDevice.C_right_y).state - self.rycenter)) # calculate movement base.camera.setX(base.camera, 100 * dt * movementVec.getX())