コード例 #1
0
 def onCenterTrackball(self, evt = None):
   """Center the trackball, like 'c' does in pview."""
   gbv = render.getBounds();
   # Determine the bounding sphere around the object.
   if gbv.isInfinite(): return
   if gbv.isEmpty(): return
   
   # The BoundingVolume might be a sphere (it's likely), but since it
   # might not, we'll take no chances and make our own sphere.
   sphere = BoundingSphere(gbv.getApproxCenter(), 0.0)
   if (not sphere.extendBy(gbv)): return
   
   radius = 50.0
   
   # Loop through the windows/viewports
   for w in WindowManager.windows:
     # Choose a suitable distance to view the whole volume in our frame.
     # This is based on the camera lens in use.
     fov = w.camLens.getFov();
     distance = radius / tan(deg2Rad(min(fov[0], fov[1]) / 2.0));
     
     # Ensure the far plane is far enough back to see the entire object.
     idealFarPlane = distance + radius * 1.5;
     w.camLens.setFar(max(w.camLens.getDefaultFar(), idealFarPlane));
     
     # And that the near plane is far enough forward.
     w.camLens.setNear(min(w.camLens.getDefaultNear(), radius - sphere.getRadius()))
     
     w.trackball.node().setOrigin(sphere.getCenter())
     w.trackball.node().setPos(Vec3.forward() * distance)
     
     # Also set the movement scale on the trackball to be consistent
     # with the size of the model and the lens field-of-view.
     w.trackball.node().setForwardScale(distance * 0.006)
コード例 #2
0
ファイル: DistributedCogKart.py プロジェクト: GangStarrG/src
 def announceGenerate(self):
     DistributedElevatorExt.DistributedElevatorExt.announceGenerate(self)
     angle = self.startingHpr[0]
     angle -= 90
     radAngle = deg2Rad(angle)
     unitVec = Vec3(math.cos(radAngle), math.sin(radAngle), 0)
     unitVec *= 45.0
     self.endPos = self.startingPos + unitVec
     self.endPos.setZ(0.5)
     dist = Vec3(self.endPos - self.enteringPos).length()
     wheelAngle = dist / (4.8 * 1.4 * math.pi) * 360
     self.kartEnterAnimateInterval = Parallel(
         LerpHprInterval(self.wheels[0], 5.0, Vec3(self.wheels[0].getH(), wheelAngle, self.wheels[0].getR())),
         LerpHprInterval(self.wheels[1], 5.0, Vec3(self.wheels[1].getH(), wheelAngle, self.wheels[1].getR())),
         LerpHprInterval(self.wheels[2], 5.0, Vec3(self.wheels[2].getH(), wheelAngle, self.wheels[2].getR())),
         LerpHprInterval(self.wheels[3], 5.0, Vec3(self.wheels[3].getH(), wheelAngle, self.wheels[3].getR())),
         name="CogKartAnimate",
     )
     trolleyExitTrack1 = Parallel(
         LerpPosInterval(self.golfKart, 5.0, self.endPos), self.kartEnterAnimateInterval, name="CogKartExitTrack"
     )
     self.trolleyExitTrack = Sequence(trolleyExitTrack1)
     self.trolleyEnterTrack = Sequence(
         LerpPosInterval(self.golfKart, 5.0, self.startingPos, startPos=self.enteringPos)
     )
     self.closeDoors = Sequence(self.trolleyExitTrack, Func(self.onDoorCloseFinish))
     self.openDoors = Sequence(self.trolleyEnterTrack)
コード例 #3
0
    def onCenterTrackball(self, evt=None):
        """Center the trackball, like 'c' does in pview."""
        gbv = render.getBounds()
        # Determine the bounding sphere around the object.
        if gbv.isInfinite(): return
        if gbv.isEmpty(): return

        # The BoundingVolume might be a sphere (it's likely), but since it
        # might not, we'll take no chances and make our own sphere.
        sphere = BoundingSphere(gbv.getApproxCenter(), 0.0)
        if (not sphere.extendBy(gbv)): return

        radius = 50.0

        # Loop through the windows/viewports
        for w in WindowManager.windows:
            # Choose a suitable distance to view the whole volume in our frame.
            # This is based on the camera lens in use.
            fov = w.camLens.getFov()
            distance = radius / tan(deg2Rad(min(fov[0], fov[1]) / 2.0))

            # Ensure the far plane is far enough back to see the entire object.
            idealFarPlane = distance + radius * 1.5
            w.camLens.setFar(max(w.camLens.getDefaultFar(), idealFarPlane))

            # And that the near plane is far enough forward.
            w.camLens.setNear(
                min(w.camLens.getDefaultNear(), radius - sphere.getRadius()))

            w.trackball.node().setOrigin(sphere.getCenter())
            w.trackball.node().setPos(Vec3.forward() * distance)

            # Also set the movement scale on the trackball to be consistent
            # with the size of the model and the lens field-of-view.
            w.trackball.node().setForwardScale(distance * 0.006)
コード例 #4
0
    def enterMoveTires(self):
        for key in self.tireDict:
            body = self.tireDict[key]["tireBody"]
            body.setAngularVel(0, 0, 0)
            body.setLinearVel(0, 0, 0)

        for index in xrange(len(self.allTireInputs)):
            input = self.allTireInputs[index]
            avId = self.avIdList[index]
            body = self.getTireBody(avId)
            degs = input[1] + 90
            tireNp = self.getTireNp(avId)
            tireH = tireNp.getH()
            self.notify.debug("tireH = %s" % tireH)
            radAngle = deg2Rad(degs)
            foo = NodePath("foo")
            dirVector = Vec3(math.cos(radAngle), math.sin(radAngle), 0)
            self.notify.debug("dirVector is now=%s" % dirVector)
            inputForce = input[0]
            inputForce /= self.MaxLocalForce
            inputForce *= self.MaxPhysicsForce
            force = dirVector * inputForce
            self.notify.debug("adding force %s to %d" % (force, avId))
            body.addForce(force)

        self.enableAllTireBodies()
        self.totalPhysicsSteps = 0
        self.startSim()
        taskMgr.add(self.__moveTiresTask, self.uniqueName("moveTiresTtask"))
コード例 #5
0
    def enterMoveTires(self):
        for key in self.tireDict:
            body = self.tireDict[key]['tireBody']
            body.setAngularVel(0, 0, 0)
            body.setLinearVel(0, 0, 0)

        for index in xrange(len(self.allTireInputs)):
            input = self.allTireInputs[index]
            avId = self.avIdList[index]
            body = self.getTireBody(avId)
            degs = input[1] + 90
            tireNp = self.getTireNp(avId)
            tireH = tireNp.getH()
            self.notify.debug('tireH = %s' % tireH)
            radAngle = deg2Rad(degs)
            foo = NodePath('foo')
            dirVector = Vec3(math.cos(radAngle), math.sin(radAngle), 0)
            self.notify.debug('dirVector is now=%s' % dirVector)
            inputForce = input[0]
            inputForce /= self.MaxLocalForce
            inputForce *= self.MaxPhysicsForce
            force = dirVector * inputForce
            self.notify.debug('adding force %s to %d' % (force, avId))
            body.addForce(force)

        self.enableAllTireBodies()
        self.totalPhysicsSteps = 0
        self.startSim()
        taskMgr.add(self._DistributedIceGame__moveTiresTask,
                    self.uniqueName('moveTiresTtask'))
コード例 #6
0
    def rotate(self, rotationAngle):
        """Return this vector rotated by 'rotationAngle' degrees. The returned
        vector will have the same length as this vector, but a different
        direction."""

        angle = atan2(self.getY(), self.getX())
        angle += deg2Rad(rotationAngle)
        x = cos(angle)
        y = sin(angle)
        return SteerVec(x, y)
コード例 #7
0
ファイル: steerVec.py プロジェクト: kengleason/PandaSteer
 def rotate(self,rotationAngle):
     """Return this vector rotated by 'rotationAngle' degrees. The returned
     vector will have the same length as this vector, but a different
     direction."""
 
     angle = atan2(self.getY(), self.getX())
     angle += deg2Rad(rotationAngle)
     x = cos(angle)
     y = sin(angle)
     return SteerVec(x,y)
コード例 #8
0
    def announceGenerate(self):
        """Setup other fields dependent on the required fields."""
        DistributedElevatorExt.DistributedElevatorExt.announceGenerate(self)

        angle = self.startingHpr[0]
        angle -= 90
        radAngle = deg2Rad(angle)
        unitVec = Vec3(math.cos(radAngle), math.sin(radAngle), 0)
        unitVec *= 45.0
        self.endPos = self.startingPos + unitVec
        self.endPos.setZ(0.5)

        dist = Vec3(self.endPos - self.enteringPos).length()
        wheelAngle = (dist / (4.8 * 1.4 * math.pi)) * 360

        self.kartEnterAnimateInterval = Parallel(
            # start a lerp HPR for each wheel
            LerpHprInterval(
                self.wheels[0], 5.0,
                Vec3(self.wheels[0].getH(), wheelAngle,
                     self.wheels[0].getR())),
            LerpHprInterval(
                self.wheels[1], 5.0,
                Vec3(self.wheels[1].getH(), wheelAngle,
                     self.wheels[1].getR())),
            LerpHprInterval(
                self.wheels[2], 5.0,
                Vec3(self.wheels[2].getH(), wheelAngle,
                     self.wheels[2].getR())),
            LerpHprInterval(
                self.wheels[3], 5.0,
                Vec3(self.wheels[3].getH(), wheelAngle,
                     self.wheels[3].getR())),
            name="CogKartAnimate")

        trolleyExitTrack1 = Parallel(LerpPosInterval(self.golfKart, 5.0,
                                                     self.endPos),
                                     self.kartEnterAnimateInterval,
                                     name="CogKartExitTrack")
        self.trolleyExitTrack = Sequence(
            trolleyExitTrack1,
            # Func(self.hideSittingToons), # we may not need this
        )

        self.trolleyEnterTrack = Sequence(
            LerpPosInterval(self.golfKart,
                            5.0,
                            self.startingPos,
                            startPos=self.enteringPos))

        self.closeDoors = Sequence(self.trolleyExitTrack,
                                   Func(self.onDoorCloseFinish))
        self.openDoors = Sequence(self.trolleyEnterTrack)
コード例 #9
0
ファイル: ball.py プロジェクト: MattMcMullan/GdProj3
 def throw(self, task):
     if self.keymap["m1"] == 1:
         print "throw!"
         self.keymap["m1"] = 0
         dt = task.time-self.prevTime
         self.prevTime = self.prevTime - task.time
         direction = -1
         velocity = 150 * self.parent.overlay.momPercent * .01
         pos = self.parent.player.getPos()
         h = deg2Rad(camera.getH())
         p = deg2Rad(camera.getP())
         dir = (-cos(p)*sin(h)*direction, cos(p)*cos(h)*direction, sin(p)*direction)
         dx = sin(h+math.pi/2)
         dy = cos(h+math.pi/2)
         #get the velocity
         vel = (dir[0]*velocity,dir[1]*velocity,dir[2]*velocity)
         #get displacement
         dis = (vel[0]*dt,vel[1]*dt,vel[2]*dt)
         #set the new position
         self.parent.player.setPos(pos[0]+dis[0],pos[1]+dis[1],pos[2]+dis[2])
         #self.parent.player.setPos(10,10,10)
         
     return task.cont
コード例 #10
0
def makeArc(color, angle_degrees = 360, numsteps = 16, horizon_plane = 0,): 
    ls = LineSegs() 
    ls.setColor(color)
    angleRadians = deg2Rad(angle_degrees) 

    for i in xrange(numsteps + 1): 
        a = angleRadians * i / numsteps 
        y = math.sin(a) 
        x = math.cos(a) 

        ls.drawTo(x, y, horizon_plane)
        ls.setThickness(2.0)
        ls.setColor(color)
    node = ls.create() 
    return NodePath(node)
コード例 #11
0
def makeArc(initial_x, initial_y, angleDegrees=360, numSteps=16):
    ls = LineSegs()

    angleRadians = deg2Rad(angleDegrees)

    for i in range(numSteps + 1):
        a = angleRadians * i / numSteps
        y = initial_y + 0.01 * math.sin(a)
        x = initial_x + 0.01 * math.cos(a)
        ls.setThickness(3)
        ls.setColor(0, 0, 0, 1)
        ls.drawTo(x, 0, y)

    node = ls.create()
    return NodePath(node)
コード例 #12
0
def makeArc(initial_x, initial_y, angleDegrees = 360, numSteps = 16):
    ls = LineSegs()

    angleRadians = deg2Rad(angleDegrees)

    for i in range(numSteps + 1):
        a = angleRadians * i / numSteps
        y = initial_y + 0.01*math.sin(a)
        x = initial_x + 0.01*math.cos(a)
	ls.setThickness(3)
	ls.setColor(0, 0, 0, 1)
        ls.drawTo(x, 0, y)

    node = ls.create()
    return NodePath(node)	
コード例 #13
0
    def _DistributedBanquetTable__endFireWater(self):
        if self.aimStart == None:
            return None

        if not self.state == "Controlled":
            return None

        if not self.avId == localAvatar.doId:
            return None

        taskMgr.remove(self.waterPowerTaskName)
        messenger.send("wakeup")
        self.aimStart = None
        origin = self.nozzle.getPos(render)
        target = self.boss.getPos(render)
        angle = deg2Rad(self.waterPitcherNode.getH() + 90)
        x = math.cos(angle)
        y = math.sin(angle)
        fireVector = Point3(x, y, 0)
        if self.power < 0.001:
            self.power = 0.001

        self.lastPowerFired = self.power
        fireVector *= self.fireLength * self.power
        target = origin + fireVector
        segment = CollisionSegment(origin[0], origin[1], origin[2], target[0], target[1], target[2])
        fromObject = render.attachNewNode(CollisionNode("pitcherColNode"))
        fromObject.node().addSolid(segment)
        fromObject.node().setFromCollideMask(
            ToontownGlobals.PieBitmask | ToontownGlobals.CameraBitmask | ToontownGlobals.FloorBitmask
        )
        fromObject.node().setIntoCollideMask(BitMask32.allOff())
        queue = CollisionHandlerQueue()
        base.cTrav.addCollider(fromObject, queue)
        base.cTrav.traverse(render)
        queue.sortEntries()
        self.hitObject = None
        if queue.getNumEntries():
            entry = queue.getEntry(0)
            target = entry.getSurfacePoint(render)
            self.hitObject = entry.getIntoNodePath()

        base.cTrav.removeCollider(fromObject)
        fromObject.removeNode()
        self.d_firingWater(origin, target)
        self.fireWater(origin, target)
        self.resetPowerBar()
コード例 #14
0
    def selection_ring_create(self, segments = 16,size = 1.0):
        ls = LineSegs()
        ls.setThickness(2)
        ls.setColor(0.8,0.8,0.8)

        radians = deg2Rad(360)

        for i in range(segments+1):
            a = radians * i / segments
            y = math.sin(a)*size
            x = math.cos(a)*size

            ls.drawTo(x, y, 0.2)

        node = ls.create()

        return NodePath(node)
コード例 #15
0
    def selection_ring_create(self, segments=16, size=1.0):
        ls = LineSegs()
        ls.setThickness(2)
        ls.setColor(0.8, 0.8, 0.8)

        radians = deg2Rad(360)

        for i in range(segments + 1):
            a = radians * i / segments
            y = math.sin(a) * size
            x = math.cos(a) * size

            ls.drawTo(x, y, 0.2)

        node = ls.create()

        return NodePath(node)
 def announceGenerate(self):
     DistributedElevatorExt.DistributedElevatorExt.announceGenerate(self)
     angle = self.startingHpr[0]
     angle -= 90
     radAngle = deg2Rad(angle)
     unitVec = Vec3(math.cos(radAngle), math.sin(radAngle), 0)
     unitVec *= 45.0
     self.endPos = self.startingPos + unitVec
     self.endPos.setZ(0.5)
     dist = Vec3(self.endPos - self.enteringPos).length()
     wheelAngle = dist / (4.8 * 1.4 * math.pi) * 360
     self.kartEnterAnimateInterval = Parallel(LerpHprInterval(self.wheels[0], 5.0, Vec3(self.wheels[0].getH(), wheelAngle, self.wheels[0].getR())), LerpHprInterval(self.wheels[1], 5.0, Vec3(self.wheels[1].getH(), wheelAngle, self.wheels[1].getR())), LerpHprInterval(self.wheels[2], 5.0, Vec3(self.wheels[2].getH(), wheelAngle, self.wheels[2].getR())), LerpHprInterval(self.wheels[3], 5.0, Vec3(self.wheels[3].getH(), wheelAngle, self.wheels[3].getR())), name='CogKartAnimate')
     trolleyExitTrack1 = Parallel(LerpPosInterval(self.golfKart, 5.0, self.endPos), self.kartEnterAnimateInterval, name='CogKartExitTrack')
     self.trolleyExitTrack = Sequence(trolleyExitTrack1)
     self.trolleyEnterTrack = Sequence(LerpPosInterval(self.golfKart, 5.0, self.startingPos, startPos=self.enteringPos))
     self.closeDoors = Sequence(self.trolleyExitTrack, Func(self.onDoorCloseFinish))
     self.openDoors = Sequence(self.trolleyEnterTrack)
コード例 #17
0
 def __endFireWater(self):
     if self.aimStart == None:
         return
     if not self.state == 'Controlled':
         return
     if not self.avId == localAvatar.doId:
         return
     taskMgr.remove(self.waterPowerTaskName)
     messenger.send('wakeup')
     self.aimStart = None
     origin = self.nozzle.getPos(render)
     target = self.boss.getPos(render)
     angle = deg2Rad(self.waterPitcherNode.getH() + 90)
     x = math.cos(angle)
     y = math.sin(angle)
     fireVector = Point3(x, y, 0)
     if self.power < 0.001:
         self.power = 0.001
     self.lastPowerFired = self.power
     fireVector *= self.fireLength * self.power
     target = origin + fireVector
     segment = CollisionSegment(origin[0], origin[1], origin[2], target[0],
                                target[1], target[2])
     fromObject = render.attachNewNode(CollisionNode('pitcherColNode'))
     fromObject.node().addSolid(segment)
     fromObject.node().setFromCollideMask(ToontownGlobals.PieBitmask
                                          | ToontownGlobals.CameraBitmask
                                          | ToontownGlobals.FloorBitmask)
     fromObject.node().setIntoCollideMask(BitMask32.allOff())
     queue = CollisionHandlerQueue()
     base.cTrav.addCollider(fromObject, queue)
     base.cTrav.traverse(render)
     queue.sortEntries()
     self.hitObject = None
     if queue.getNumEntries():
         entry = queue.getEntry(0)
         target = entry.getSurfacePoint(render)
         self.hitObject = entry.getIntoNodePath()
     base.cTrav.removeCollider(fromObject)
     fromObject.removeNode()
     self.d_firingWater(origin, target)
     self.fireWater(origin, target)
     self.resetPowerBar()
     return