def moveCamera( self, task ): is_down = base.mouseWatcherNode.is_button_down if base.mouseWatcherNode.hasMouse(): x = base.mouseWatcherNode.getMouseX() y = base.mouseWatcherNode.getMouseY() if is_down( MouseButton.two() ): dx = self.lastMousePos[0] - x self.ang -= dx #self.ang = max( 0, min( self.ang, math.pi*0.49 ) ) dy = self.lastMousePos[1] - y self.angY -= dy self.angY = max( 0.01, min( self.angY, math.pi ) ) self.lastMousePos = (x,y) speed = self.speed if is_down( self.bSpeed ): speed = speed*3 if self.attachmentNode and self.attached: self.focusPoint = self.attachmentNode.getPos() else: sideways = (is_down(self.bRight)-is_down(self.bLeft))*speed forward = (is_down(self.bForward)-is_down(self.bBackward))*speed quat = Quat() quat.setFromAxisAngle( -180*self.ang/math.pi, LVector3f.unitZ()) rotated = quat.xform( LVector3f( -forward, sideways, 0 )) self.focusPoint += rotated self.focusNode.setPos( self.focusPoint ) radius = self.zoom self.angY = max( 0, min( math.pi*0.4, self.angY ) ) rY = math.sin( self.angY ) self.nodePos = self.focusPoint + LVector3f( rY*math.cos(self.ang)*radius, -rY*math.sin(self.ang)*radius, radius*math.cos( self.angY) ) self.node.setPos( self.nodePos ) self.node.lookAt( self.focusNode, LVector3f.unitZ() ) return Task.cont
def moveCamera(self, task): is_down = base.mouseWatcherNode.is_button_down if base.mouseWatcherNode.hasMouse(): x = base.mouseWatcherNode.getMouseX() y = base.mouseWatcherNode.getMouseY() if is_down(MouseButton.two()): dx = self.lastMousePos[0] - x self.heading += dx * 25 #self.ang = max( 0, min( self.ang, math.pi*0.49 ) ) dy = self.lastMousePos[1] - y self.pitch -= dy * 25 self.pitch = max(self.pitch, -80) self.pitch = min(self.pitch, 80) #self.angY = max( 0.01, min( self.angY, math.pi ) ) self.lastMousePos = (x, y) speed = self.speed if is_down(self.bSpeed): speed = speed * 3 if not self.attached: forward = (is_down(self.bRight) - is_down(self.bLeft)) * speed sideways = -(is_down(self.bForward) - is_down(self.bBackward)) * speed quat = Quat() quat.setFromAxisAngle(self.heading, LVector3f.unitZ()) rotated = quat.xform(LVector3f(-forward, sideways, 0)) self.headingNode.setPos(self.headingNode.getPos() - rotated) #self.angY = max( 0, min( math.pi*0.4, self.angY ) ) #rY = math.sin( self.angY ) #self.nodePos = self.focusPoint + LVector3f( math.sin(self.angY)*math.cos(self.ang)*radius, -math.sin(self.ang)*radius, radius*math.cos( self.angY) ) self.node.lookAt(self.headingNode) self.node.setPos(0, -self.zoom, 0) self.pitchNode.setHpr(0, self.pitch, 0) self.headingNode.setHpr(self.heading, 0, 0) return Task.cont
def __init__( self, startPoint, endPoint, radius ): self.startPoint = startPoint self.endPoint = endPoint self.radius = radius self.centerPoint = (self.startPoint + self.endPoint)/2 self.boundSphereRadius = (self.startPoint - self.endPoint).length()/2 + self.radius self.boundSphereRadius2 = self.boundSphereRadius**2 #self. = self.endPoint - self.startPoint #self.segLen( (self.endPoint - self.startPoint).length() ) self.segDir = (self.endPoint - self.startPoint).normalized() tmp = self.segDir.cross( LVector3f.unitZ() ) self.floorNormal = tmp.cross( self.segDir ).normalized() self.floorPoint = self.startPoint - LVector3f( 0, 0, radius*0.5 )
def __init__(self, startPos, endPos, offsetDir=LVector3f.unitZ(), maxStepHeight=0.1, maxStepDist=0.4): self.startPos = startPos self.endPos = endPos self.stepDiff = (endPos - startPos) self.fullStepLength = self.stepDiff.length() self.curStepLength = 0 self.offsetDir = offsetDir self.curPos = self.startPos # Calculate the step height, depending on the distance of the step. If it's a very small # step (i.e. much smaller than the norm step dist "maxStepDist"), then also don't lift the # foot as high as you normally would: stepDist = (startPos - endPos).length() self.stepHeight = maxStepHeight * min(stepDist / maxStepDist, 1)