예제 #1
0
 def unlockStateChangeMsg(self):
     if self.stateChangeMsgLocks <= 0:
         print PythonUtil.lineTag() + ': someone unlocked too many times'
         return
     self.stateChangeMsgLocks -= 1
     if self.stateChangeMsgLocks == 0 and self.stateHasChanged:
         messenger.send(self.EmoteEnableStateChanged)
         self.stateHasChanged = 0
 def serverTime(self, context, timestamp, timeOfDay):
     end = globalClock.getRealTime()
     aiTimeSkew = timeOfDay - self.cr.getServerTimeOfDay()
     if context != self.thisContext:
         self.notify.info('Ignoring TimeManager response for old context %d' % context)
         return
     elapsed = end - self.start
     self.attemptCount += 1
     self.notify.info('Clock sync roundtrip took %0.3f ms' % (elapsed * 1000.0))
     self.notify.info('AI time delta is %s from server delta' % PythonUtil.formatElapsedSeconds(aiTimeSkew))
     average = (self.start + end) / 2.0 - self.extraSkew
     uncertainty = (end - self.start) / 2.0 + abs(self.extraSkew)
     globalClockDelta.resynchronize(average, timestamp, uncertainty)
     self.notify.info('Local clock uncertainty +/- %.3f s' % globalClockDelta.getUncertainty())
     if globalClockDelta.getUncertainty() > self.maxUncertainty:
         if self.attemptCount < self.maxAttempts:
             self.notify.info('Uncertainty is too high, trying again.')
             self.start = globalClock.getRealTime()
             self.sendUpdate('requestServerTime', [self.thisContext])
             return
         self.notify.info('Giving up on uncertainty requirement.')
     if self.talkResult:
         base.localAvatar.setChatAbsolute('latency %0.0f ms, sync \xc2\xb1%0.0f ms' % (elapsed * 1000.0, globalClockDelta.getUncertainty() * 1000.0), CFSpeech | CFTimeout)
     self._gotFirstTimeSync = True
     messenger.send('gotTimeSync')
     toontownTimeManager = getattr(base.cr, 'toontownTimeManager', None)
     if toontownTimeManager:
         toontownTimeManager.updateLoginTimes(timeOfDay, int(time.time()), globalClock.getRealTime())
예제 #3
0
 def generateToonMoveTrack(self, toon):
     node = NodePath('tempNode')
     displacement = Vec3(toon.getPos(render) - self.getPos(render))
     displacement.setZ(0)
     displacement.normalize()
     movieDistance = self.movieNode.getDistance(self.rotateNode)
     displacement *= movieDistance
     node.reparentTo(render)
     node.setPos(displacement + self.getPos(render))
     node.lookAt(self)
     heading = PythonUtil.fitDestAngle2Src(toon.getH(render),
                                           node.getH(render))
     hpr = toon.getHpr(render)
     hpr.setX(heading)
     finalX = node.getX(render)
     finalY = node.getY(render)
     finalZ = node.getZ(render)
     node.removeNode()
     toonTrack = Sequence(
         Parallel(
             ActorInterval(toon, 'walk', loop=True, duration=1),
             Parallel(
                 LerpPosInterval(toon,
                                 1.0,
                                 Point3(finalX, finalY, toon.getZ(render)),
                                 fluid=True,
                                 bakeInStart=False)),
             LerpHprInterval(toon, 1.0, hpr=hpr)),
         Func(toon.loop, 'neutral'))
     return toonTrack
예제 #4
0
 def fillSlot(self, index, avId):
     self.notify.debug('%s.fillSlot(%s, %s, ...)' % (self.doId, index, avId))
     request = self.toonRequests.get(index)
     if request:
         self.cr.relatedObjectMgr.abortRequest(request)
         del self.toonRequests[index]
     if avId == 0:
         pass
     elif avId not in self.cr.doId2do:
         func = PythonUtil.Functor(self.gotToon, index, avId)
         self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects([avId], allCallback=func)
     elif not self.isSetup:
         self.deferredSlots.append((index, avId))
     else:
         if avId == base.localAvatar.getDoId():
             self.localToonOnBoard = 1
             elevator = self.getPlaceElevator()
             elevator.fsm.request('boarding', [self.getElevatorModel()])
             elevator.fsm.request('boarded')
         toon = self.cr.doId2do[avId]
         toon.stopSmooth()
         toon.setZ(self.getElevatorModel(), self.getScaledPoint(index)[2])
         toon.setShadowHeight(0)
         if toon.isDisguised:
             toon.suit.loop('walk')
             animFunc = Func(toon.suit.loop, 'neutral')
         else:
             toon.setAnimState('run', 1.0)
             animFunc = Func(toon.setAnimState, 'neutral', 1.0)
         toon.headsUp(self.getElevatorModel(), apply(Point3, self.getScaledPoint(index)))
         track = Sequence(LerpPosInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.75, apply(Point3, self.getScaledPoint(index)), other=self.getElevatorModel()), LerpHprInterval(toon, TOON_BOARD_ELEVATOR_TIME * 0.25, Point3(180, 0, 0), other=self.getElevatorModel()), animFunc, name=toon.uniqueName('fillElevator'), autoPause=1)
         track.start()
         self.boardedAvIds[avId] = index
예제 #5
0
 def dispatch(self, request):
     if not isinstance(request.method, basestring) or not isinstance(
             request.params, (tuple, list, dict)):
         request.error(-32600, 'Invalid Request')
         return
     method = getattr(self.handler, 'rpc_' + request.method, None)
     if method is None:
         request.error(-32601, 'Method not found')
         return
     token = None
     if isinstance(request.params, dict):
         token = request.params.get('token')
         del request.params['token']
     elif len(request.params) > 0:
         token = request.params[0]
         params = request.params[1:]
     if not isinstance(token, basestring):
         request.error(-32000, 'No token provided')
         return
     error = self.handler.authenticate(token, method)
     if error is not None:
         request.error(*error)
         return
     try:
         if isinstance(params, dict):
             request.result(method(**params))
         else:
             request.result(method(*params))
     except:
         request.error(-32603, PythonUtil.describeException())
 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
 def fillSlot(self, index, avId, wantBoardingShow = 0):
     self.notify.debug('%s.fillSlot(%s, %s, ... %s)' % (self.doId,
      index,
      avId,
      globalClock.getRealTime()))
     request = self.toonRequests.get(index)
     if request:
         self.cr.relatedObjectMgr.abortRequest(request)
         del self.toonRequests[index]
     if avId == 0:
         pass
     elif avId not in self.cr.doId2do:
         func = PythonUtil.Functor(self.gotToon, index, avId)
         self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects([avId], allCallback=func)
     elif not self.isSetup:
         self.deferredSlots.append((index, avId, wantBoardingShow))
     else:
         if avId == base.localAvatar.getDoId():
             place = base.cr.playGame.getPlace()
             if not place:
                 return
             elevator = self.getPlaceElevator()
             if elevator == None:
                 place.fsm.request('elevator')
                 elevator = self.getPlaceElevator()
             if not elevator:
                 return
             self.localToonOnBoard = 1
             if hasattr(localAvatar, 'boardingParty') and localAvatar.boardingParty:
                 localAvatar.boardingParty.forceCleanupInviteePanel()
                 localAvatar.boardingParty.forceCleanupInviterPanels()
             if hasattr(base.localAvatar, 'elevatorNotifier'):
                 base.localAvatar.elevatorNotifier.cleanup()
             cameraTrack = Sequence()
             cameraTrack.append(Func(elevator.fsm.request, 'boarding', [self.getElevatorModel()]))
             cameraTrack.append(Func(elevator.fsm.request, 'boarded'))
         toon = self.cr.doId2do[avId]
         toon.stopSmooth()
         toon.wrtReparentTo(self.golfKart)
         sitStartDuration = toon.getDuration('sit-start')
         jumpTrack = self.generateToonJumpTrack(toon, index)
         track = Sequence(jumpTrack, Func(toon.setAnimState, 'Sit', 1.0), Func(self.clearToonTrack, avId), name=toon.uniqueName('fillElevator'), autoPause=1)
         if wantBoardingShow:
             boardingTrack, boardingTrackType = self.getBoardingTrack(toon, index, True)
             track = Sequence(boardingTrack, track)
             if avId == base.localAvatar.getDoId():
                 cameraWaitTime = 2.5
                 if boardingTrackType == BoardingGroupShow.TRACK_TYPE_RUN:
                     cameraWaitTime = 0.5
                 cameraTrack = Sequence(Wait(cameraWaitTime), cameraTrack)
         if self.canHideBoardingQuitBtn(avId):
             track = Sequence(Func(localAvatar.boardingParty.groupPanel.disableQuitButton), track)
         if avId == base.localAvatar.getDoId():
             track = Parallel(cameraTrack, track)
         track.delayDelete = DelayDelete.DelayDelete(toon, 'CogKart.fillSlot')
         self.storeToonTrack(avId, track)
         track.start()
         self.fillSlotTrack = track
         self.boardedAvIds[avId] = None
     return
예제 #9
0
 def enterBoarding(self, nodePath):
     camera.wrtReparentTo(nodePath)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(nodePath), 180)
     self.cameraBoardTrack = LerpPosHprInterval(camera, 1.5,
                                                Point3(0, 18, 8),
                                                Point3(heading, -10, 0))
     self.cameraBoardTrack.start()
예제 #10
0
 def fillSlot(self, index, avId):
     self.notify.debug('%s.fillSlot(%s, %s, ...)' %
                       (self.doId, index, avId))
     request = self.toonRequests.get(index)
     if request:
         self.cr.relatedObjectMgr.abortRequest(request)
         del self.toonRequests[index]
     if avId == 0:
         pass
     elif avId not in self.cr.doId2do:
         func = PythonUtil.Functor(self.gotToon, index, avId)
         self.toonRequests[index] = self.cr.relatedObjectMgr.requestObjects(
             [avId], allCallback=func)
     elif not self.isSetup:
         self.deferredSlots.append((index, avId))
     else:
         if avId == base.localAvatar.getDoId():
             self.localToonOnBoard = 1
             elevator = self.getPlaceElevator()
             elevator.fsm.request('boarding', [self.getElevatorModel()])
             elevator.fsm.request('boarded')
         toon = self.cr.doId2do[avId]
         toon.stopSmooth()
         toon.wrtReparentTo(self.golfKart)
         sitStartDuration = toon.getDuration('sit-start')
         jumpTrack = self.generateToonJumpTrack(toon, index)
         track = Sequence(jumpTrack,
                          Func(toon.setAnimState, 'Sit', 1.0),
                          Func(self.clearToonTrack, avId),
                          name=toon.uniqueName('fillElevator'),
                          autoPause=1)
         track.delayDelete = DelayDelete.DelayDelete(toon, 'fillSlot')
         self.storeToonTrack(avId, track)
         track.start()
         self.boardedAvIds[avId] = None
예제 #11
0
    def getIntroTrack(self):
        self.__cameraTask(None)
        origCamParent = camera.getParent()
        origCamPos = camera.getPos()
        origCamHpr = camera.getHpr()
        iCamParent = base.localAvatar.attachNewNode('iCamParent')
        iCamParent.setH(180)
        camera.reparentTo(iCamParent)
        toonHeight = base.localAvatar.getHeight()
        camera.setPos(0, -15, toonHeight * 3)
        camera.lookAt(0, 0, toonHeight / 2.0)
        iCamParent.wrtReparentTo(origCamParent)
        waitDur = 5.0
        lerpDur = 4.5
        lerpTrack = Parallel()
        startHpr = iCamParent.getHpr()
        startHpr.setX(PythonUtil.reduceAngle(startHpr[0]))
        lerpTrack.append(LerpPosHprInterval(iCamParent, lerpDur, pos=Point3(0, 0, 0), hpr=Point3(0, 0, 0), startHpr=startHpr, name=self.uniqueName('introLerpParent')))
        lerpTrack.append(LerpPosHprInterval(camera, lerpDur, pos=origCamPos, hpr=origCamHpr, blendType='easeInOut', name=self.uniqueName('introLerpCameraPos')))
        base.localAvatar.startLookAround()

        def cleanup(origCamParent = origCamParent, origCamPos = origCamPos, origCamHpr = origCamHpr, iCamParent = iCamParent):
            camera.reparentTo(origCamParent)
            camera.setPos(origCamPos)
            camera.setHpr(origCamHpr)
            iCamParent.removeNode()
            del iCamParent
            base.localAvatar.stopLookAround()

        return Sequence(Wait(waitDur),
                        lerpTrack,
                        Func(cleanup))
예제 #12
0
 def rollBossToPoint(self, fromPos, fromHpr, toPos, toHpr, reverse):
     vector = Vec3(toPos - fromPos)
     distance = vector.length()
     if toHpr == None:
         mat = Mat3(0, 0, 0, 0, 0, 0, 0, 0, 0)
         headsUp(mat, vector, CSDefault)
         scale = VBase3(0, 0, 0)
         shear = VBase3(0, 0, 0)
         toHpr = VBase3(0, 0, 0)
         decomposeMatrix(mat, scale, shear, toHpr, CSDefault)
     if fromHpr:
         newH = PythonUtil.fitDestAngle2Src(fromHpr[0], toHpr[0])
         toHpr = VBase3(newH, 0, 0)
     else:
         fromHpr = toHpr
     turnTime = abs(toHpr[0] - fromHpr[0]) / ToontownGlobals.BossCogTurnSpeed
     if toHpr[0] < fromHpr[0]:
         leftRate = ToontownGlobals.BossCogTreadSpeed
     else:
         leftRate = -ToontownGlobals.BossCogTreadSpeed
     if reverse:
         rollTreadRate = -ToontownGlobals.BossCogTreadSpeed
     else:
         rollTreadRate = ToontownGlobals.BossCogTreadSpeed
     rollTime = distance / ToontownGlobals.BossCogRollSpeed
     deltaPos = toPos - fromPos
     track = Sequence(Func(self.setPos, fromPos), Func(self.headsUp, toPos), Parallel(self.hprInterval(turnTime, toHpr, fromHpr), self.rollLeftTreads(turnTime, leftRate), self.rollRightTreads(turnTime, -leftRate)), Parallel(LerpFunctionInterval(self.rollBoss, duration=rollTime, extraArgs=[fromPos, deltaPos]), self.rollLeftTreads(rollTime, rollTreadRate), self.rollRightTreads(rollTime, rollTreadRate)))
     return (track, toHpr)
예제 #13
0
 def enterBoarding(self, nodePath, side):
     camera.wrtReparentTo(nodePath)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(nodePath), 90 * side)
     self.cameraBoardTrack = LerpPosHprInterval(
         camera, 1.5, Point3(14.4072 * side, 0, 3.8667),
         Point3(heading, -15, 0))
     self.cameraBoardTrack.start()
     return None
 def enterBoarding(self, nodePath):
     camera.wrtReparentTo(nodePath)
     if self.reverseBoardingCamera:
         heading = PythonUtil.fitDestAngle2Src(camera.getH(nodePath), 180)
         self.cameraBoardTrack = camera.posHprInterval(1.5, Point3(0, 18, 8), Point3(heading, -10, 0), blendType = 'easeInOut')
     else:
         self.cameraBoardTrack = camera.posHprInterval(1.5, Point3(0, -16, 5.5), Point3(0, 0, 0), blendType = 'easeInOut')
         
     self.cameraBoardTrack.start()
    def move(self, dt = -1, profile = 0):
        if Mover.Profile and not profile:

            def func(doMove = self.move):
                for i in xrange(10000):
                    doMove(dt, profile=1)

            __builtin__.func = func
            PythonUtil.startProfile(cmd='func()', filename='profile', sorts=['cumulative'], callInfo=0)
            del __builtin__.func
            return

        if Mover.Pstats:
            self.pscPy.start()
        for impulse in self.impulses.values():
            impulse._process(self.getDt())
        if Mover.Pstats:
            self.pscPy.stop()
def getPetInfoFromSeed(seed, safezoneId):
    S = random.getstate()
    random.seed(seed)
    dnaArray = PetDNA.getRandomPetDNA(safezoneId)
    gender = PetDNA.getGender(dnaArray)
    nameString = PetNameGenerator.PetNameGenerator().randomName(gender=gender, seed=seed + safezoneId)
    traitSeed = PythonUtil.randUint31()
    random.setstate(S)
    return (nameString, dnaArray, traitSeed)
예제 #17
0
    def __hoverCallback(self, inside, hoodIndex, pos):
        alpha = PythonUtil.choice(inside, 0.25, 1.0)
        try:
            clouds = self.clouds[hoodIndex]
        except ValueError:
            clouds = []

        for cloud in clouds:
            cloud.setColor((1, 1, 1, alpha))
예제 #18
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 __chooseTarget(self, extraDelay=0):
     direction = self.__chooseDirection()
     if direction == None:
         self.target = None
         self.arrivalTime = None
         self.b_destroyGoon()
         return
     heading, dist = direction
     dist = min(dist, self.legLength)
     targetH = PythonUtil.reduceAngle(self.getH() + heading)
     origH = self.getH()
     h = PythonUtil.fitDestAngle2Src(origH, targetH)
     delta = abs(h - origH)
     turnTime = delta / (self.velocity * 5)
     walkTime = dist / self.velocity
     self.setH(targetH)
     self.target = self.boss.scene.getRelativePoint(self,
                                                    Point3(0, dist, 0))
     self.departureTime = globalClock.getFrameTime()
     self.arrivalTime = self.departureTime + turnTime + walkTime + extraDelay
     self.d_setTarget(self.target[0], self.target[1], h,
                      globalClockDelta.localToNetworkTime(self.arrivalTime))
예제 #20
0
 def getJumpHpr(av = av, node = self.golfKart):
     hpr = Point3(0, 0, 0)
     if hasattr(self, 'golfKart') and self.golfKart:
         hpr = self.golfKart.getHpr(av.getParent())
         if seatIndex < 2:
             hpr.setX(hpr.getX() + 180)
         else:
             hpr.setX(hpr.getX())
         angle = PythonUtil.fitDestAngle2Src(av.getH(), hpr.getX())
         hpr.setX(angle)
     else:
         self.notify.warning('getJumpHpr invalid golfKart, returning (0,0,0)')
     return hpr
 def process(self, invoker, target, incantation):
     self.currentInvoker = invoker
     self.currentTarget = target
     word, args = (incantation.split(' ', 1) + [''])[:2]
     try:
         return self.doWord(word, args)
     except MagicError as e:
         return e.message
     except Exception:
         return PythonUtil.describeException(backTrace=1)
     finally:
         self.currentInvoker = None
         self.currentTarget = None
    def doDirectedAttack(self, avId, attackCode):
        toon = base.cr.doId2do.get(avId)
        if toon:
            gearRoot = self.rotateNode.attachNewNode('gearRoot')
            gearRoot.setZ(10)
            gearRoot.setTag('attackCode', str(attackCode))
            gearModel = self.getGearFrisbee()
            gearModel.setScale(0.2)
            gearRoot.headsUp(toon)
            toToonH = PythonUtil.fitDestAngle2Src(0, gearRoot.getH() + 180)
            gearRoot.lookAt(toon)
            neutral = 'Fb_neutral'
            if not self.twoFaced:
                neutral = 'Ff_neutral'
            gearTrack = Parallel()
            for i in xrange(4):
                node = gearRoot.attachNewNode(str(i))
                node.hide()
                node.setPos(0, 5.85, 4.0)
                gear = gearModel.instanceTo(node)
                x = random.uniform(-5, 5)
                z = random.uniform(-3, 3)
                h = random.uniform(-720, 720)
                gearTrack.append(
                    Sequence(
                        Wait(i * 0.15), Func(node.show),
                        Parallel(
                            node.posInterval(1, Point3(x, 50, z), fluid=1),
                            node.hprInterval(1, VBase3(h, 0, 0), fluid=1)),
                        Func(node.detachNode)))

            if not self.raised:
                neutral1Anim = self.getAnim('down2Up')
                self.raised = 1
            else:
                neutral1Anim = ActorInterval(self, neutral, startFrame=48)
            throwAnim = self.getAnim('throw')
            neutral2Anim = ActorInterval(self, neutral)
            extraAnim = Sequence()
            if attackCode == ToontownGlobals.BossCogSlowDirectedAttack:
                extraAnim = ActorInterval(self, neutral)
            seq = Sequence(
                ParallelEndTogether(
                    self.pelvis.hprInterval(1, VBase3(toToonH, 0, 0)),
                    neutral1Anim), extraAnim,
                Parallel(
                    Sequence(Wait(0.19), gearTrack, Func(gearRoot.detachNode),
                             self.pelvis.hprInterval(0.2, VBase3(0, 0, 0))),
                    Sequence(throwAnim, neutral2Anim)))
            self.doAnimate(seq, now=1, raised=1)
예제 #23
0
    def requestPurchase(self, phone, callback):
        from toontown.toontowngui import TTDialog
        avatar = base.localAvatar
        clothesOnOrder = 0
        for item in avatar.onOrder + avatar.mailboxContents:
            if item.storedInCloset():
                clothesOnOrder += 1

        if avatar.isClosetFull(clothesOnOrder):
            self.requestPurchaseCleanup()
            buttonCallback = PythonUtil.Functor(self.__handleFullPurchaseDialog, phone, callback)
            self.dialog = TTDialog.TTDialog(style=TTDialog.YesNo, text=TTLocalizer.CatalogPurchaseClosetFull, text_wordwrap=15, command=buttonCallback)
            self.dialog.show()
        else:
            CatalogItem.CatalogItem.requestPurchase(self, phone, callback)
 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 generateToonMoveTrack(self):
     hpr = self.movieNode.getHpr(render)
     heading = PythonUtil.fitDestAngle2Src(self.av.getH(render), hpr[0])
     hpr.setX(heading)
     self.av.setAnimState('run', 1.0)
     toonTrack = Sequence(
         Wait(0.5),
         Parallel(
             LerpPosInterval(
                 self.av, 1.0,
                 Point3(self.movieNode.getX(self.avParent),
                        self.movieNode.getY(self.avParent), 0)),
             LerpHprInterval(self.av, 1.0, hpr=hpr, other=render)),
         Func(self.av.loop, 'neutral'))
     return toonTrack
 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 moveCamera(self, seatIndex):
     self.oldCameraPos = camera.getPos()
     self.oldCameraHpr = camera.getHpr()
     camera.wrtReparentTo(self.picnicTable)
     heading = PythonUtil.fitDestAngle2Src(camera.getH(), 90)
     if seatIndex < 3:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0,
                                                    Point3(0, 0, 17),
                                                    Point3(0, -90, 0))
     elif camera.getH() < 0:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0,
                                                    Point3(0, 0, 17),
                                                    Point3(-180, -90, 0))
     else:
         self.cameraBoardTrack = LerpPosHprInterval(camera, 2.0,
                                                    Point3(0, 0, 17),
                                                    Point3(180, -90, 0))
     self.cameraBoardTrack.start()
예제 #28
0
class KartGlobals:
    ENTER_MOVIE = 1
    EXIT_MOVIE = 2
    COUNTDOWN_TIME = 30
    BOARDING_TIME = 10.0
    ENTER_RACE_TIME = 6.0
    ERROR_CODE = PythonUtil.Enum(
        'success, eGeneric, eTickets, eBoardOver, eNoKart, eOccupied, eTrackClosed, eTooLate, eUnpaid'
    )
    FRONT_LEFT_SPOT = 0
    FRONT_RIGHT_SPOT = 1
    REAR_LEFT_SPOT = 2
    REAR_RIGHT_SPOT = 3
    PAD_GROUP_NUM = 4

    def getPadLocation(padId):
        return padId % KartGlobals.PAD_GROUP_NUM

    getPadLocation = staticmethod(getPadLocation)
 def checkHealTrapLure(self):
     self.notify.debug('numToons: %s, numCogs: %s, lured: %s, trapped: %s' % (self.numToons,
      self.numCogs,
      self.luredIndices,
      self.trappedIndices))
     if len(PythonUtil.union(self.trappedIndices, self.luredIndices)) == self.numCogs:
         canTrap = 0
     else:
         canTrap = 1
     if len(self.luredIndices) == self.numCogs:
         canLure = 0
         canTrap = 0
     else:
         canLure = 1
     if self.numToons == 1:
         canHeal = 0
     else:
         canHeal = 1
     return (canHeal, canTrap, canLure)
예제 #30
0
    def dispatch(self, request):
        """
        Handle a JSON-RPC 2.0 request.
        """
        if (not isinstance(request.method, basestring)) or \
           (not isinstance(request.params, (tuple, list, dict))):
            request.error(-32600, 'Invalid Request')
            return

        # Grab the method from the handler:
        method = getattr(self.handler, 'rpc_' + request.method, None)
        if method is None:
            request.error(-32601, 'Method not found')
            return

        # Find the token in the params, authenticate it, and then remove it
        # from the params:
        token = None
        if isinstance(request.params, dict):
            token = request.params.get('token')
            del request.params['token']
        elif len(request.params) > 0:
            token = request.params[0]
            params = request.params[1:]
        if not isinstance(token, basestring):
            request.error(-32000, 'No token provided')
            return
        error = self.handler.authenticate(token, method)
        if error is not None:
            # Authentication wasn't successful. Send the error:
            request.error(*error)
            return

        # Finally, attempt to call the method:
        try:
            if isinstance(params, dict):
                request.result(method(**params))
            else:
                request.result(method(*params))
        except:
            request.error(-32603, PythonUtil.describeException())