better handling of wasd to turn switching

This commit is contained in:
Joe Shochet 2007-08-03 04:04:23 +00:00
parent d772b9a321
commit 9b911db541
2 changed files with 33 additions and 16 deletions

View File

@ -52,8 +52,8 @@ class ControlManager:
ist.append(inputState.watchWithModifiers("forward", "w", 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
self.WASDTurnTokens = ()
@ -262,29 +262,38 @@ class ControlManager:
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:
token.release()
if turn:
self.WASDTurnTokens = (
inputState.watchWithModifiers("turnLeft", "a", 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:
self.WASDTurnTokens = (
inputState.watchWithModifiers("slideLeft", "a", 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)

View File

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