Need help using the gamepad stick with a bullet vehicle

As promised: a working gamepad task routine. Trying to change the distance interfered with the tracking function. It was easier to decide I don’t need it. Let me know if anyone has suggestions.

Gamepad control for the vehicle

def GamePadInput(self, dt):
## Respond to gamepad #############
if not self.gamepad:
return 0

engineForce = 0.0
brakeForce = 0.0

## Listen to Gamepad Input
gpstart = self.gamepad.findButton("start")
gpback = self.gamepad.findButton("back")
lshoulder = self.gamepad.findButton("lshoulder")
rshoulder = self.gamepad.findButton("rshoulder")
left_x = self.gamepad.findAxis(InputDevice.Axis.left_x)
left_y = self.gamepad.findAxis(InputDevice.Axis.left_y)
right_x = self.gamepad.findAxis(InputDevice.Axis.right_x)
right_y = self.gamepad.findAxis(InputDevice.Axis.right_y)

#Accept button events of the first connected gamepad
if gpback.pressed:
  self.doExit()
if gpstart.pressed:
  self.doReset()

##### Camera Follow Player Controls ###############
camvec = self.yugoNP.getPos(render) - self.camera.getPos()
camvec.setZ(0)
camdist = camvec.length()
camvec.normalize()
if camdist > self.camY: # + 0.2:
  self.camera.setPos(self.camera.getPos() + camvec * (camdist - self.camY))

# Rotate camera around the car in a arc
if right_x.value > 0.02:  # move cam right
  self.camera.setX(self.camera, +20 * dt)
if right_x.value < -0.02:   # move cam left
  self.camera.setX(self.camera, -20 * dt)
if right_y.value > 0.02:  # move cam up
  self.camera.setZ(self.camera, +20 * dt)
if right_y.value < -0.02:   # move cam down
  self.camera.setZ(self.camera, -20 * dt)

### Vehicle Control #####
if left_y.value > 0.01:  # go forward
  engineForce = left_y.value * 1600
  brakeForce = 0.0
if left_y.value < -0.01:   # go backwards
  engineForce = left_y.value * 400
  brakeForce = 0.0

if rshoulder.pressed:   # slow down
  engineForce = 0.0
  brakeForce = 40
if lshoulder.pressed:   # apply brakes
  engineForce = 0.0
  brakeForce = 100

if left_x.value < -0.01:   # turn left
  self.steering = left_x.value * -5
  self.steering = min(self.steering, self.steeringClamp)
if left_x.value > 0.01:   # turn right
  self.steering = left_x.value * -5
  self.steering = max(self.steering, -self.steeringClamp)

### Calibrate Drifting Toggles #######
if left_x.value < 0.01 and left_x.value > -0.01:  # straight ahead
  self.steering = 0.0
if left_y.value < 0.01 and left_y.value > -0.01:  # sit still
  self.engineForce = 0.0

# Apply steering to front wheels
self.vehicle.setSteeringValue(self.steering, 0);
self.vehicle.setSteeringValue(self.steering, 1);

# Apply force to back wheels
self.vehicle.applyEngineForce(engineForce, 2);
self.vehicle.applyEngineForce(engineForce, 3);
self.vehicle.setBrake(brakeForce, 2);
self.vehicle.setBrake(brakeForce, 3);
1 Like