Browse Source

better handling of wasd to turn switching

Joe Shochet 18 years ago
parent
commit
9b911db541
2 changed files with 33 additions and 16 deletions
  1. 23 14
      direct/src/controls/ControlManager.py
  2. 10 2
      direct/src/controls/InputState.py

+ 23 - 14
direct/src/controls/ControlManager.py

@@ -52,8 +52,8 @@ class ControlManager:
             ist.append(inputState.watchWithModifiers("forward", "w", inputSource=inputState.WASD))
             ist.append(inputState.watchWithModifiers("forward", "w", inputSource=inputState.WASD))
             ist.append(inputState.watchWithModifiers("reverse", "s", inputSource=inputState.WASD))
             ist.append(inputState.watchWithModifiers("reverse", "s", inputSource=inputState.WASD))
 
 
-            ist.append(inputState.watchWithModifiers("slideLeft", "q", inputSource=inputState.WASD))
-            ist.append(inputState.watchWithModifiers("slideRight", "e", inputSource=inputState.WASD))
+            ist.append(inputState.watchWithModifiers("slideLeft", "q", inputSource=inputState.QE))
+            ist.append(inputState.watchWithModifiers("slideRight", "e", inputSource=inputState.QE))
 
 
             # Used to switch between strafe and turn. We will default to turn
             # Used to switch between strafe and turn. We will default to turn
             self.WASDTurnTokens = ()
             self.WASDTurnTokens = ()
@@ -262,29 +262,38 @@ class ControlManager:
 
 
 
 
     def setWASDTurn(self, turn):
     def setWASDTurn(self, turn):
-        turnLeftSet = inputState.isSet("turnLeft")
-        turnRightSet = inputState.isSet("turnRight")
-        slideLeftSet = inputState.isSet("slideLeft")
-        slideRightSet = inputState.isSet("slideRight")
+        turnLeftWASDSet = inputState.isSet("turnLeft", inputSource=inputState.WASD)
+        turnRightWASDSet = inputState.isSet("turnRight", inputSource=inputState.WASD)
+        slideLeftWASDSet = inputState.isSet("slideLeft", inputSource=inputState.WASD)
+        slideRightWASDSet = inputState.isSet("slideRight", inputSource=inputState.WASD)
 
 
         for token in self.WASDTurnTokens:
         for token in self.WASDTurnTokens:
             token.release()
             token.release()
+
         if turn:
         if turn:
             self.WASDTurnTokens = (
             self.WASDTurnTokens = (
                 inputState.watchWithModifiers("turnLeft", "a", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("turnLeft", "a", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("turnRight", "d", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("turnRight", "d", inputSource=inputState.WASD),
                 )
                 )
+
+            if slideLeftWASDSet:
+                inputState.set("turnLeft", True, inputSource=inputState.WASD)
+            if slideRightWASDSet:
+                inputState.set("turnRight", True, inputSource=inputState.WASD)
+
+            inputState.set("slideLeft", False, inputSource=inputState.WASD)
+            inputState.set("slideRight", False, inputSource=inputState.WASD)
+
         else:
         else:
             self.WASDTurnTokens = (
             self.WASDTurnTokens = (
                 inputState.watchWithModifiers("slideLeft", "a", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("slideLeft", "a", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("slideRight", "d", inputSource=inputState.WASD),
                 inputState.watchWithModifiers("slideRight", "d", inputSource=inputState.WASD),
                 )
                 )
-
-        """
-        inputState.set("turnLeft", turnLeftSet, inputSource=inputState.WASD)
-        inputState.set("turnRight", turnRightSet, inputSource=inputState.WASD)
-        inputState.set("slideLeft", slideLeftSet, inputSource=inputState.WASD)
-        inputState.set("slideRight", slideRightSet, inputSource=inputState.WASD)
-        """
-        
+            if turnLeftWASDSet:
+                inputState.set("slideLeft", True, inputSource=inputState.WASD)
+            if turnRightWASDSet:
+                inputState.set("slideRight", True, inputSource=inputState.WASD)
+                
+            inputState.set("turnLeft", False, inputSource=inputState.WASD)
+            inputState.set("turnRight", False, inputSource=inputState.WASD)
                 
                 

+ 10 - 2
direct/src/controls/InputState.py

@@ -53,6 +53,7 @@ class InputState(DirectObject.DirectObject):
 
 
     # standard input sources
     # standard input sources
     WASD = 'WASD'
     WASD = 'WASD'
+    QE = 'QE'
     ArrowKeys = 'ArrowKeys'
     ArrowKeys = 'ArrowKeys'
     Keyboard = 'Keyboard'
     Keyboard = 'Keyboard'
     Mouse = 'Mouse'
     Mouse = 'Mouse'
@@ -80,7 +81,7 @@ class InputState(DirectObject.DirectObject):
         del self._state
         del self._state
         self.ignoreAll()
         self.ignoreAll()
 
 
-    def isSet(self, name):
+    def isSet(self, name, inputSource=None):
         """
         """
         returns True/False
         returns True/False
         """
         """
@@ -89,7 +90,14 @@ class InputState(DirectObject.DirectObject):
             return True
             return True
         elif name in self._forcingOff:
         elif name in self._forcingOff:
             return False
             return False
-        return name in self._state
+        if inputSource:
+            s = self._state.get(name)
+            if s:
+                return inputSource in s
+            else:
+                return False
+        else:
+            return name in self._state
 
 
     def set(self, name, isActive, inputSource=None):
     def set(self, name, isActive, inputSource=None):
         assert self.debugPrint("set(name=%s, isActive=%s, inputSource=%s)"%(name, isActive, inputSource))
         assert self.debugPrint("set(name=%s, isActive=%s, inputSource=%s)"%(name, isActive, inputSource))