This is my player method where I use another class called input manager to handle key accepts.
player.py
def playerControl(self, task):
dt = globalClock.getDt()
if( dt > .20):
return task.cont
if(self.inputManager.keyMap["escape"] == True):
return sys.exit #quit game
if(self.inputManager.keyMap["w"] == True):
self.pitch("up", dt)
elif(self.inputManager.keyMap["s"] == True):
self.pitch("down", dt)
elif(self.inputManager.keyMap["w"] == False):
self.camera.setP(0)
elif(self.inputManager.keyMap["s"] == False):
self.camera.setP(0)
if(self.inputManager.keyMap["arrow_down"] == True):
self.adjustThrottle("down", dt)
elif(self.inputManager.keyMap["arrow_up"] == True):
self.adjustThrottle("up", dt)
if(self.inputManager.keyMap["0"] == True):
self.throttleStop("stop", dt)
if(self.inputManager.keyMap["arrow_right"] == True):
self.turn("r", dt)
elif(self.inputManager.keyMap["arrow_left"] == True):
self.turn("l", dt)
if(self.inputManager.keyMap["arrow_right"] == False):
self.camera.setR(0)
elif(self.inputManager.keyMap["arrow_left"] == False):
self.camera.setR(0)
if(self.inputManager.keyMap["a"] == True):
self.yaw("r", dt)
elif(self.inputManager.keyMap["d"] == True):
self.yaw("l", dt)
elif(self.inputManager.keyMap["a"] == False):
self.camera.setH(0)
elif(self.inputManager.keyMap["d"] == False):
self.camera.setH(0)
if(self.inputManager.keyMap["wheel-in"] == True):
self.cameraZoom("in", dt)
elif(self.inputManager.keyMap["wheel-out"] == True):
self.cameraZoom("out", dt)
if(self.inputManager.keyMap["i"] == True):
self.viewImage("in", dt)
elif(self.inputManager.keyMap["o"] == True):
self.viewImage("out", dt)
if(self.inputManager.keyMap["lalt"] == True):
if(base.mouseWatcherNode.hasMouse() == True):
mpos = base.mouseWatcherNode.getMouse()
self.camera.setP(mpos.getY() * 180)
self.camera.setH(mpos.getX() * -180)
self.speedCheck(dt)
self.move(dt)
return task.cont
inputManager.py
from direct.showbase.DirectObject import DirectObject
class InputManager(DirectObject):
def __init__(self):
self.keyMap = {"w" : False,
"s" : False,
"a" : False,
"d" : False,
"wheel-in" : False,
"wheel-out" : False,
"+" : False,
"-" : False,
"0" : False,
"i" : False,
"o" : False,
"arrow_left" : False,
"arrow_right" : False,
"arrow_up" : False,
"arrow_down" : False,
"escape" : False,
"lalt" : False}
self.accept("w", self.setKey, ["w", True])
self.accept("s", self.setKey, ["s", True])
self.accept("a", self.setKey, ["a", True])
self.accept("d", self.setKey, ["d", True])
self.accept("wheel_up", self.setKey, ["wheel-in", True])
self.accept("wheel_down", self.setKey, ["wheel-out", True])
self.accept("+", self.setKey, ["+", True])
self.accept("-", self.setKey, ["-", True])
self.accept("0", self.setKey, ["0", True])
self.accept("i", self.setKey, ["i", True])
self.accept("o", self.setKey, ["o", True])
self.accept("arrow_left", self.setKey, ["arrow_left", True])
self.accept("arrow_right", self.setKey, ["arrow_right", True])
self.accept("arrow_up", self.setKey, ["arrow_up", True])
self.accept("arrow_down", self.setKey, ["arrow_down", True])
self.accept("escape", self.setKey, ["escape", True])
self.accept("lalt", self.setKey, ["lalt", True])
self.accept("w-up", self.setKey, ["w", False])
self.accept("s-up", self.setKey, ["s", False])
self.accept("a-up", self.setKey, ["a", False])
self.accept("d-up", self.setKey, ["d", False])
self.accept("+-up", self.setKey, ["+", False])
self.accept("--up", self.setKey, ["-", False])
self.accept("0-up", self.setKey, ["0", False])
self.accept("i-up", self.setKey, ["i", False])
self.accept("o-up", self.setKey, ["o", False])
self.accept("arrow_left-up", self.setKey, ["arrow_left", False])
self.accept("arrow_right-up", self.setKey, ["arrow_right", False])
self.accept("arrow_up-up", self.setKey, ["arrow_up", False])
self.accept("arrow_down-up", self.setKey, ["arrow_down", False])
self.accept("escape-up", self.setKey, ["escape", False])
self.accept("lalt-up", self.setKey, ["lalt", False])
def setKey(self, key, value):
self.keyMap[key] = value
Pitch Method
def pitch(self, dir, dt):
turnRate = self.handling * (2 -
(self.speed / self.maxSpeed))
if(dir == "up"):
self.playerModel.play("up")
self.playerModel.setP(self.playerModel, turnRate * dt)
elif(dir == "down"):
turnRate = -turnRate
self.playerModel.play("down")
self.playerModel.setP(self.playerModel, turnRate * dt)
Thanks for looking at this for me.