View Single Post
  #1  
Old 02-03-2009, 03:21 AM
DrunkenBrit DrunkenBrit is offline
Member
 
Join Date: Dec 2008
Location: England
Posts: 25
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
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
Reply With Quote