PDA

View Full Version : Inheritance ambiguities


DrunkenBrit
02-03-2009, 03:21 AM
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:


############# 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


Neither functions appear to work regardless of what "scope" I try and give to "__moveScale" or "__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

Jeff
02-06-2009, 03:03 PM
Sorry we have not had a chance to answer this yet. We'll get back to you early next week.

DrunkenBrit
02-09-2009, 01:17 AM
That's ok, I gathered you guys are rather busy. Thanks for informing me.

Jeff
02-10-2009, 11:25 AM
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
vizcam.FlyNavigate.sensitivity(self, 1.0, turnScale)
but by passing in a 1 you are re-setting the moveScale valueback to its original value

keep track of both moveScale and turnScale in your class and then pass them both to FlyNavigate.sensitivity
def __init__(self):
# Default movement keys
vizcam.FlyNavigate.__init__(self,'w','s','a','d')
self.__moveScale = 1
self.__turnScale = 1
and then you can set each value individually and pass in the value set before
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)

DrunkenBrit
02-11-2009, 12:24 AM
Thanks! :)