|
#1
|
|||
|
|||
Inheritance ambiguities
Hi,
I've derived from the "FlyNavigate" class to implement my own camera class. I'm basically trying to split the "FlyNavigate::sensitivity" function up so that I can set move and turn speeds seperately. So far i've got: Code:
############# MyFlyNavigation Camera ########### import viz import vizcam class MyFlyNavigation(vizcam.FlyNavigate): MOUSE_LEFT_DOWN = False def __init__(self): # Default movement keys vizcam.FlyNavigate.__init__(self,'w','s','a','d') # Only update the mouse movement if the left mouse has been clicked def _camMouseMove(self,e): if self.MOUSE_LEFT_DOWN == True: vizcam.FlyNavigate._camMouseMove(self,e) def _camMouseDown(self,e): if e.button == viz.MOUSEBUTTON_LEFT: self.MOUSE_LEFT_DOWN = True def _camMouseUp(self,e): self.MOUSE_LEFT_DOWN = False # Overidden to add a bit of logic def _camUpdate(self,e): vizcam.FlyNavigate._camUpdate(self,e) mousePos = viz.mouse.getPosition(viz.WINDOW_PIXELS, True) windowSize = viz.window.getSize() # If the mouse cursor leaves the client window then # don't bother updating the _camMouseMove parent function if mousePos[0] <= 0: self.MOUSE_LEFT_DOWN = False elif mousePos[0] >= windowSize[0]: self.MOUSE_LEFT_DOWN = False elif mousePos[1] <= 0: self.MOUSE_LEFT_DOWN = False elif mousePos[1] >= windowSize[1]: self.MOUSE_LEFT_DOWN = False def setMoveSensitivity(self, moveScale): #vizcam.FlyNavigate.__moveScale = vizcam.FlyNavigate.MOVE_SPEED * moveScale #vizcam.FlyNavigate.sensitivity(self, moveScale, 1.0) self.__moveScale = self.MOVE_SPEED * moveScale def setLookSensitivity(self, turnScale): #vizcam.FlyNavigate.__turnScale = vizcam.FlyNavigate.MOVE_SPEED * turnScale #vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale) self.__turnScale = self.MOVE_SPEED * turnScale def getMoveSensitivity(self): #return vizcam.FlyNavigate.__moveScale return self.__moveScale def getLookSensitivity(self): #return vizcam.FlyNavigate.__turnScale return self.__turnScale Using "vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale)" works until "vizcam.FlyNavigate.sensitivity(self, moveScale, 1.0)" is invoked, and vice versa. I know this will be a simple mistake i'm doing for something so simple but can't seem to spot it... Thanks, DB |
#2
|
|||
|
|||
Sorry we have not had a chance to answer this yet. We'll get back to you early next week.
|
#3
|
|||
|
|||
That's ok, I gathered you guys are rather busy. Thanks for informing me.
|
#4
|
|||
|
|||
self.__moveScale and self.__turnScale are private to the FlyNavigate class and when you try to set those in your MyFlyNavigation class your are creating new instances of them and so the viewpoint is not affected.
When you call the sensitivity method it works Code:
vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale) keep track of both moveScale and turnScale in your class and then pass them both to FlyNavigate.sensitivity Code:
def __init__(self): # Default movement keys vizcam.FlyNavigate.__init__(self,'w','s','a','d') self.__moveScale = 1 self.__turnScale = 1 Code:
def setMoveSensitivity(self, moveScale): self.__moveScale = moveScale vizcam.FlyNavigate.sensitivity(self, self.__moveScale, self.__turnScale) def setLookSensitivity(self, turnScale): self.__turnScale = turnScale vizcam.FlyNavigate.sensitivity(self, self.__moveScale, self.__turnScale) |
#5
|
|||
|
|||
Thanks!
|
|
|