def getToonPullingLeverInterval(self, toon):
     walkTime = 0.2
     reach = ActorInterval(toon, 'leverReach', playRate=2.0)
     pull = ActorInterval(toon, 'leverPull', startFrame=6)
     origPos = toon.getPos(render)
     origHpr = toon.getHpr(render)
     newPos = self.lever.getPos(render)
     newHpr = self.lever.getHpr(render)
     origHpr.setX(PythonUtil.fitSrcAngle2Dest(origHpr[0], newHpr[0]))
     toon.setPosHpr(origPos, origHpr)
     reachAndPull = Sequence(
         ActorInterval(toon,
                       'walk',
                       loop=True,
                       duration=walkTime - reach.getDuration()), reach,
         pull)
     leverSeq = Sequence(
         Wait(walkTime + reach.getDuration() - 0.1),
         self.stick.hprInterval(0.55, Point3(0.0, 25.0, 0.0),
                                Point3(0.0, 0.0, 0.0)), Wait(0.3),
         self.stick.hprInterval(0.4, Point3(0.0, 0.0, 0.0),
                                Point3(0.0, 25.0, 0.0)))
     returnSeq = Sequence(
         Parallel(toon.posInterval(walkTime, newPos, origPos),
                  toon.hprInterval(walkTime, newHpr, origHpr), leverSeq,
                  reachAndPull))
     return returnSeq
 def makeToonGrabInterval(self, toon):
     origPos = toon.getPos(self.root)
     origHpr = toon.getHpr(self.root)
     a = self.accomodateToon(toon)
     newPos = toon.getPos()
     newHpr = toon.getHpr()
     origHpr.setX(PythonUtil.fitSrcAngle2Dest(origHpr[0], newHpr[0]))
     self.notify.debug('toon.setPosHpr %s %s' % (origPos, origHpr))
     toon.setPosHpr(origPos, origHpr)
     walkTime = 0.2
     reach = Sequence()
     if reach.getDuration() < walkTime:
         reach = Sequence(
             ActorInterval(toon,
                           'walk',
                           loop=1,
                           duration=walkTime - reach.getDuration()), reach)
     i = Sequence(
         Parallel(toon.posInterval(walkTime, newPos, origPos),
                  toon.hprInterval(walkTime, newHpr, origHpr), reach),
         Func(toon.stopLookAround))
     if toon == base.localAvatar:
         i.append(Func(self.switchToAnimState, 'GolfPuttLoop'))
     i.append(Func(self.startAdjustClubTask))
     i = Parallel(i, a)
     return i
示例#3
0
 def setHeading(self, finalPos, initPos):
     diffX = finalPos.getX() - initPos.getX()
     angle = -90 * diffX / math.fabs(diffX)
     startAngle = self.suit.getH()
     startAngle = PythonUtil.fitSrcAngle2Dest(startAngle, angle)
     dur = 0.1 * abs(startAngle - angle) / 90
     self.suitTurnIval = LerpHprInterval(self.suit,
                                         dur,
                                         Point3(angle, 0, 0),
                                         startHpr=Point3(startAngle, 0, 0),
                                         name='SuitLerpHpr')
     self.suitTurnIval.start()
 def makeToonGrabInterval(self, toon):
     origPos = toon.getPos()
     origHpr = toon.getHpr()
     a = self.accomodateToon(toon)
     newPos = toon.getPos()
     newHpr = toon.getHpr()
     origHpr.setX(PythonUtil.fitSrcAngle2Dest(origHpr[0], newHpr[0]))
     toon.setPosHpr(origPos, origHpr)
     walkTime = 0.2
     reach = ActorInterval(toon, 'leverReach')
     if reach.getDuration() < walkTime:
         reach = Sequence(ActorInterval(toon, 'walk', loop=1, duration=walkTime - reach.getDuration()), reach)
     i = Sequence(Parallel(toon.posInterval(walkTime, newPos, origPos), toon.hprInterval(walkTime, newHpr, origHpr), reach), Func(self.startWatchJoystick, toon))
     i = Parallel(i, a)
     return i
 def takePhoneInterval(self, toon):
     torso = TextEncoder.upper(toon.style.torso[0])
     legs = TextEncoder.upper(toon.style.legs[0])
     phoneOutAnim = '%s%s_phoneOut' % (torso, legs)
     takePhoneAnim = '%s%s_takePhone' % (torso, legs)
     phoneNeutralAnim = '%s%s_phoneNeutral' % (torso, legs)
     self.toonScale = toon.getGeomNode().getChild(0).getScale(
         self.getParent())
     walkTime = 1.0
     scaleTime = 1.0
     origScale = self.getScale()
     origToonPos = toon.getPos()
     origToonHpr = toon.getHpr()
     self.origToonHpr = origToonHpr
     self.setScale(self.toonScale)
     toon.setPosHpr(self, 0, -4.5, 0, 0, 0, 0)
     destToonPos = toon.getPos()
     destToonHpr = toon.getHpr()
     destToonHpr = VBase3(
         PythonUtil.fitSrcAngle2Dest(destToonHpr[0], origToonHpr[0]),
         destToonHpr[1], destToonHpr[2])
     self.setScale(origScale)
     toon.setPos(origToonPos)
     toon.setHpr(origToonHpr)
     walkToPhone = Sequence(
         Func(toon.stopSmooth), Func(toon.loop, 'walk'),
         Func(base.playSfx, base.localAvatar.soundWalk),
         toon.posHprInterval(walkTime,
                             destToonPos,
                             destToonHpr,
                             blendType='easeInOut'),
         Func(toon.loop, 'neutral'), Func(toon.startSmooth))
     interval = Sequence(
         Parallel(
             walkToPhone, ActorInterval(self.model, phoneOutAnim),
             self.scaleInterval(scaleTime,
                                self.toonScale,
                                blendType='easeInOut')),
         Parallel(
             ActorInterval(self.model, takePhoneAnim),
             ActorInterval(toon, 'takePhone'),
             Sequence(Wait(0.625), Func(base.playSfx, self.pickUpSfx),
                      Func(self.__receiverToHand, toon), Wait(1),
                      Func(base.playSfx, self.handleSfx))),
         Func(self.model.loop, phoneNeutralAnim),
         Func(toon.loop, 'phoneNeutral'), Func(base.playSfx, self.ringSfx))
     return interval