Explorar o código

Renamed gamepad sample script to gamepad.py

Renamed gamepad sample script
Changed axis usage to the newly created functions and exposed classes
fireclawthefox %!s(int64=9) %!d(string=hai) anos
pai
achega
2565f4b423
Modificáronse 1 ficheiros con 18 adicións e 10 borrados
  1. 18 10
      samples/gamepad/gamepad.py

+ 18 - 10
samples/gamepad/main.py → 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())