Esempio n. 1
0
    def makeToonGrabInterval(self, toon):
        # Generates an interval showing the crane controls scaling to
        # match the toon and the toon simultaneously reaching to grab
        # the controls.  Thenceforth, the toon will animate with the
        # controls.
        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
Esempio n. 2
0
 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
Esempio n. 3
0
 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
Esempio n. 4
0
    def makeToonGrabInterval(self, toon):
        # Generates an interval showing the crane controls scaling to
        # match the toon and the toon simultaneously reaching to grab
        # the controls.  Thenceforth, the toon will animate with the
        # controls.
        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()  #ActorInterval(toon, 'GolfPuttLoop')
        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)
            Func(toon.stopLookAround),
        )
        if toon == base.localAvatar:
            i.append(Func(self.switchToAnimState, 'GolfPuttLoop'))
        i.append(Func(self.startAdjustClubTask))
        i = Parallel(i, a)

        return i
 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()
Esempio n. 6
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()
Esempio n. 7
0
 def transitionSunAngle(self, newHpr, duration = 10.0, fade = 0, sunDirLast = None):
     if sunDirLast != None:
         sunVecCurrent = sunDirLast
     else:
         sunVecCurrent = Vec3(self.sunWheelHeading.getH(), self.sunWheelPitch.getP(), self.sunWheelRoll.getR())
     aH = PythonUtil.fitSrcAngle2Dest(self.sunWheelHeading.getH(), newHpr[0])
     aP = PythonUtil.fitSrcAngle2Dest(self.sunWheelPitch.getP(), newHpr[1])
     aR = PythonUtil.fitSrcAngle2Dest(self.sunWheelRoll.getR(), newHpr[2])
     self.sunWheelHeading.setH(aH)
     self.sunWheelPitch.setP(aP)
     self.sunWheelRoll.setR(aR)
     sunVecFitted = Vec3(aH, aP, aR)
     if fade:
         ival = Sequence(LerpColorScaleInterval(self.sunTrack, duration * 0.29999999999999999, Vec4(1, 1, 1, 0)), LerpFunctionInterval(self.setSunTrueAngle, duration * 0.40000000000000002, fromData = sunVecFitted, toData = newHpr), LerpColorScaleInterval(self.sunTrack, duration * 0.29999999999999999, Vec4(1, 1, 1, 1)))
         return ival
     else:
         return LerpFunctionInterval(self.setSunTrueAngle, duration, fromData = sunVecFitted, toData = newHpr)
Esempio n. 8
0
 def transitionSunAngle(self, newHpr, duration=10.0, fade=0, sunDirLast=None):
     if sunDirLast != None:
         sunVecCurrent = sunDirLast
     else:
         sunVecCurrent = Vec3(self.sunWheelHeading.getH(), self.sunWheelPitch.getP(), self.sunWheelRoll.getR())
     aH = PythonUtil.fitSrcAngle2Dest(self.sunWheelHeading.getH(), newHpr[0])
     aP = PythonUtil.fitSrcAngle2Dest(self.sunWheelPitch.getP(), newHpr[1])
     aR = PythonUtil.fitSrcAngle2Dest(self.sunWheelRoll.getR(), newHpr[2])
     self.sunWheelHeading.setH(aH)
     self.sunWheelPitch.setP(aP)
     self.sunWheelRoll.setR(aR)
     sunVecFitted = Vec3(aH, aP, aR)
     if fade:
         ival = Sequence(LerpColorScaleInterval(self.sunTrack, duration * 0.3, Vec4(1, 1, 1, 0)), LerpFunctionInterval(self.setSunTrueAngle, duration * 0.4, fromData=sunVecFitted, toData=newHpr), LerpColorScaleInterval(self.sunTrack, duration * 0.3, Vec4(1, 1, 1, 1)))
         return ival
     else:
         return LerpFunctionInterval(self.setSunTrueAngle, duration, fromData=sunVecFitted, toData=newHpr)
     return
 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
 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
Esempio n. 11
0
 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
Esempio n. 12
0
 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
Esempio n. 13
0
 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
 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
Esempio n. 15
0
    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)

        # Get the toon's net scale from the node below the geom node,
        # which will also include cheesy effect scaling.
        self.toonScale = toon.getGeomNode().getChild(0).getScale(self.getParent())

        walkTime = 1.0
        scaleTime = 1.0

        # Temporarily set the scale to the target scale, and the
        # toon's pos to the target pos, so we can get the final
        # position to walk the toon to.  We don't want to do this as a
        # relative lerp interval, since that would be affected by the
        # dynamic scaling of the phone.

        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])

        # Restore the phone's scale and toon's pos.
        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