Example #1
0
    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
Example #2
0
    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
Example #3
0
    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 )
Example #4
0
    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)