Exemplo n.º 1
0
 def hasGag(self, toonId, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.hasGag(toonId, elapsedTime)
Exemplo n.º 2
0
    def startActive(self, showStartTimestamp):
        DistributedPartyFireworksActivity.notify.debug("startActive")
        messenger.send(FireworksStartedEvent)
        # if too much time has passed since the show started, don't bother
        # playing the rocket animation, just hide it
        timeSinceStart = globalClockDelta.localElapsedTime(showStartTimestamp)
        if timeSinceStart > self.rocketActor.getDuration("launch"):
            self.rocketActor.hide()
            self.startShow(self.eventId, self.showStyle, showStartTimestamp)
        else:
            self.rocketActor.play("launch")
            self.rocketParticleSeq = Sequence(Wait(RocketSoundDelay), \
                                                        Func(base.playSfx,self.launchSound), \
                                                        Func(self.rocketExplosionEffect.start), \
                                                        Wait(RocketDirectionDelay), \
                                                        LerpHprInterval(self.rocketActor, 4.0, Vec3(0, 0, -60)), \
                                                        Func(self.rocketExplosionEffect.end), \
                                                        Func(self.rocketActor.hide))
            self.rocketParticleSeq.start()

            # give rocket animation some time to play out before starting the show
            taskMgr.doMethodLater(
                FireworksPostLaunchDelay,
                self.startShow,
                self.taskName("delayedStartShow"),
                extraArgs=[
                    self.eventId, self.showStyle, showStartTimestamp, self.root
                ],
            )
    def stopMovie(self, timestamp):
        av = self.cr.doId2do.get(self.avId)
        if av:
            
            def endInteractSetup():
                
                def blah(task = None):
                    av.loop(av.getAnimInfo('LandRoam')[PiratesGlobals.STAND_INDEX][0])
                    self.adjustPos(av)
                    return task.done

                taskMgr.doMethodLater(0, blah, self.uniqueName('blahadjustpos'))

            
            def endInteractCleanup():
                av.canMove = True
                av.startSmooth()
                av.motionFSM.request('On')
                av.clearAnimProp()
                av.usingPropNoNotice = 0
                del self.myIvals[self.avId]
                self.avId = None

            self.cleanupMovies()
            ival = self.createTransitionIval(av, 'idleOutof', transitionBeginCallback = endInteractSetup, transitionEndCallback = endInteractCleanup)
            ival.start(startT = globalClockDelta.localElapsedTime(timestamp, bits = 32))
            self.myIvals[self.avId] = ival
Exemplo n.º 4
0
 def pickUp(self, toonId, pickupNum, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.pickUp(toonId, pickupNum, elapsedTime)
Exemplo n.º 5
0
    def setChatText(self, chatText, timeout=False, timestamp=None):
        if timeout:
            delay = len(chatText) * 0.5
            if delay < self.CHAT_TIMEOUT_MIN:
                delay = self.CHAT_TIMEOUT_MIN
            elif delay > self.CHAT_TIMEOUT_MAX:
                delay = self.CHAT_TIMEOUT_MAX
            if timestamp is not None:
                delay -= min(globalClockDelta.localElapsedTime(timestamp, bits=32), delay)
            if not delay:
                return

        # If we are currently displaying chat text, we need to "stomp" it. In
        # other words, we need to clear the current chat text, pause for a
        # brief moment, and then display the new chat text:
        if self.getChatText():
            self.clearChatText()
            self.stompChatText = chatText
            self.stompTask = taskMgr.doMethodLater(
                self.CHAT_STOMP_DELAY, self.__chatStomp, self.stompTaskName,
                extraArgs=[timeout])
            return

        self.clearChatText()

        self.chatPages = chatText.split('\x07')
        self.setChatPageIndex(0)

        if timeout:
            self.chatTimeoutTask = taskMgr.doMethodLater(
                delay, self.clearChatText, self.chatTimeoutTaskName)
Exemplo n.º 6
0
 def hasGag(self, toonId, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.hasGag(toonId, elapsedTime)
Exemplo n.º 7
0
    def setMovie(self, mode, avId, timestamp):
        timeStamp = globalClockDelta.localElapsedTime(timestamp)
        if mode in (PetConstants.PET_MOVIE_CALL, PetConstants.PET_MOVIE_SCRATCH, PetConstants.PET_MOVIE_FEED):
            if self.movieTrack is not None and self.movieTrack.isPlaying():
                self.movieTrack.finish()
        if avId != 0:
            self.isLocalToon = avId == base.localAvatar.doId
            av = base.cr.doId2do.get(avId)
            if av is None:
                self.notify.warning('Avatar %d not found in doId' % avId)
                return
        if mode == PetConstants.PET_MOVIE_CLEAR:
            self.clearMovie()
            return
        if mode == PetConstants.PET_MOVIE_CALL:
            try:
                self.movieTrack = Sequence(Func(self._petMovieStart, av), Parallel(av.getCallPetIval(), Sequence(Wait(0.54), SoundInterval(self.callSfx))), self._getPetMovieCompleteIval(av))
                self.movieTrack.start()
            except StandardError as error:
                print str(error)

        if mode == PetConstants.PET_MOVIE_SCRATCH:
            try:
                self.movieTrack = Sequence(Func(self._petMovieStart, av), Func(self.holdPetDownForMovie), Parallel(self.getInteractIval(self.Interactions.SCRATCH), av.getScratchPetIval(), SoundInterval(self.petSfx)), Func(self.releasePetFromHoldDown), self._getPetMovieCompleteIval(av))
                self.movieTrack.start()
            except StandardError as error:
                print str(error)

        if mode == PetConstants.PET_MOVIE_FEED:
            self.bean = loader.loadModel('phase_4/models/props/jellybean4')
            bean = self.bean.find('**/jellybean')
            bean.setColor(random.choice(BeanColors))
            self.movieTrack = Sequence(Func(self._petMovieStart, av), Func(self.holdPetDownForMovie), Parallel(Func(base.playSfx, self.swallowSfx, 0, 1, 1, 2.5, self.bean), Sequence(ActorInterval(self, 'toBeg'), ActorInterval(self, 'beg'), ActorInterval(self, 'fromBeg'), ActorInterval(self, 'eat'), ActorInterval(self, 'swallow'), Func(self.loop, 'neutral')), Sequence(Wait(0.3), ActorInterval(av, 'feedPet'), Func(av.animFSM.request, 'neutral')), Sequence(Wait(0.3), Func(self.bean.reparentTo, av.rightHand), Func(self.bean.setPos, 0.1, 0.0, 0.2), Wait(2.1), Func(av.update, 0), Func(av.update, 1), Func(av.update, 2), Func(self.bean.wrtReparentTo, render), Parallel(LerpHprInterval(self.bean, hpr=Point3(random.random() * 360.0 * 2, random.random() * 360.0 * 2, random.random() * 360.0 * 2), duration=1.2), ProjectileInterval(self.bean, endPos=self.find('**/joint_tongueBase').getPos(render), duration=1.2, gravityMult=0.45)), Func(self.bean.removeNode))), Func(self.releasePetFromHoldDown), self._getPetMovieCompleteIval(av))
            self.movieTrack.start()
        return
    def pieThrow(self, avId, timestamp, heading, pos, power):
        toon = self.activity.getAvatar(avId)
        if toon is None:
            return
        tossTrack, pieTrack, flyPie = self.getTossPieInterval(toon, pos[0], pos[1], pos[2], heading, 0, 0, power)
        if avId == base.localAvatar.doId:
            flyPie.setTag('throwerId', str(avId))
            collSphere = CollisionSphere(0, 0, 0, 0.5)
            collSphere.setTangible(0)
            name = 'PieSphere-%d' % avId
            collSphereName = self.activity.uniqueName(name)
            collNode = CollisionNode(collSphereName)
            collNode.setFromCollideMask(ToontownGlobals.PieBitmask)
            collNode.addSolid(collSphere)
            collNP = flyPie.attachNewNode(collNode)
            base.cTrav.addCollider(collNP, self.pieHandler)
            self.toonPieEventNames[collNP] = 'pieHit-' + collSphereName
            self.accept(self.toonPieEventNames[collNP], self.handlePieCollision)
        else:
            player = self.players.get(avId)
            if player is not None:
                player.faceForward()

        def matchRunningAnim(toon = toon):
            toon.playingAnim = None
            toon.setSpeed(toon.forwardSpeed, toon.rotateSpeed)

        newTossTrack = Sequence(tossTrack, Func(matchRunningAnim))
        pieTrack = Parallel(newTossTrack, pieTrack, name='PartyCogActivity.pieTrack-%d-%s' % (avId, timestamp))
        elapsedTime = globalClockDelta.localElapsedTime(timestamp)
        if elapsedTime < 16.0 / 24.0:
            elapsedTime = 16.0 / 24.0
        pieTrack.start(elapsedTime)
        self.pieIvals.append(pieTrack)
        self.toonPieTracks[avId] = pieTrack
    def stopMovie(self, timestamp):
        av = self.cr.doId2do.get(self.avId)
        if av:

            def endInteractSetup():
                def blah(task=None):
                    av.loop(av.getAnimInfo("LandRoam")[PiratesGlobals.STAND_INDEX][0])
                    self.adjustPos(av)
                    return task.done

                taskMgr.doMethodLater(0, blah, self.uniqueName("blahadjustpos"))

            def endInteractCleanup():
                av.canMove = True
                av.startSmooth()
                av.motionFSM.request("On")
                av.clearAnimProp()
                av.usingPropNoNotice = 0
                del self.myIvals[self.avId]
                self.avId = None

            self.cleanupMovies()
            ival = self.createTransitionIval(
                av, "idleOutof", transitionBeginCallback=endInteractSetup, transitionEndCallback=endInteractCleanup
            )
            ival.start(startT=globalClockDelta.localElapsedTime(timestamp, bits=32))
            self.myIvals[self.avId] = ival
Exemplo n.º 10
0
 def throwGear(self, point, timestamp=None):
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     point = Point3(point[0], point[1], point[2])
     self.fsm.request('throwGear', [point, ts])
    def playJoke(self, avId, timestamp):
        self.realJokeNetworkTime = globalClockDelta.localElapsedTime(timestamp)
        avatar = base.cr.doId2do.get(avId, None)

        if avatar:
            if self.jokeSeq:
                self.jokeSeq.pause()

            def playLaughTrack():
                base.playSfx(self.jokeSfx, time=1.30)

            doorJoke = KnockKnockGlobals.Jokes.get(
                KnockKnockGlobals.Zone2Block2Joke.get(self.zoneId).get(
                    self.block))
            knocker = doorJoke[0]
            punchline = doorJoke[1]
            holdTime = doorJoke[2] if len(
                doorJoke) == 3 else KnockKnockGlobals.DEF_PUNCHLINE_HOLD_TIME
            self.jokeSeq = Sequence()
            self.jokeSeq.append(Func(base.playSfx, self.knockSfx))
            self.jokeSeq.append(Wait(0.2))
            self.jokeSeq.append(Func(self.showName))
            self.jokeSeq.append(
                KnockKnockGlobals.generateBasicJoke(avatar, self, knocker,
                                                    punchline, holdTime,
                                                    playLaughTrack))
            self.jokeSeq.append(Func(self.hideName))
            self.jokeSeq.start(self.realJokeNetworkTime)
    def setAnimState(self, anim, loop=1, timestamp=None):
        prevAnim = self.anim
        self.anim = anim

        if timestamp == None:
            ts = 0.0
        else:
            ts = globalClockDelta.localElapsedTime(timestamp)

        if type(anim) == types.IntType:
            if anim != 44 and anim != 45:
                anim = SuitGlobals.getAnimById(anim)
                animName = anim.getName()
            elif anim == 44:
                animName = 'die'
            elif anim == 45:
                animName = 'flyNeutral'
        elif type(anim) == types.StringType:
            animName = anim

        if self.animFSM.hasStateNamed(animName):
            self.animFSM.request(animName, [ts])
        else:
            if loop:
                self.loop(animName)
            else:
                self.play(animName)
        messenger.send(SuitGlobals.animStateChangeEvent % (self.uniqueName),
                       [anim, prevAnim])
Exemplo n.º 13
0
 def startActive(self, showStartTimestamp):
     DistributedPartyFireworksActivity.notify.debug('startActive')
     messenger.send(FireworksStartedEvent)
     timeSinceStart = globalClockDelta.localElapsedTime(showStartTimestamp)
     if timeSinceStart > self.rocketActor.getDuration('launch'):
         self.rocketActor.hide()
         if timeSinceStart < 60:
             self.startShow(self.eventId, self.showStyle, self.songId,
                            showStartTimestamp)
     else:
         self.rocketActor.play('launch')
         self.rocketParticleSeq = Sequence(
             Wait(RocketSoundDelay), Func(base.playSfx, self.launchSound),
             Func(self.rocketExplosionEffect.start),
             Wait(RocketDirectionDelay),
             LerpHprInterval(self.rocketActor, 4.0, Vec3(0, 0, -60)),
             Func(self.rocketExplosionEffect.end),
             Func(self.rocketActor.hide))
         self.rocketParticleSeq.start()
         taskMgr.doMethodLater(FireworksPostLaunchDelay,
                               self.startShow,
                               self.taskName('delayedStartShow'),
                               extraArgs=[
                                   self.eventId, self.showStyle,
                                   self.songId, showStartTimestamp,
                                   self.root
                               ])
    def processStateRequest(self, avId, stateId, lastStateId, timestamp):
        """ This is the processing part of the state system that mimics the FSM system """
        avatar = base.cr.doId2do.get(avId, None)
        elapsedTime = globalClockDelta.localElapsedTime(timestamp)

        if not avatar:
            self.notify.warning(
                'SUSPICIOUS! Attempted to change the state of a non-existent avatar!'
            )
            return

        # Let's exit out of the previous state.
        if lastStateId == 0:
            self.exitFreezeUp(avatar)
        elif lastStateId == 1:
            self.exitFrozen(avatar)

        if stateId == 0:
            self.enterFreezeUp(avatar, elapsedTime)
        elif stateId == 1:
            self.enterFrozen(avatar, elapsedTime)
        elif stateId == 2:
            self.enterCooldown(avatar, elapsedTime)
        elif stateId == 3:
            self.enterCooldown(avatar, elapsedTime, fromFrozen=1)
        elif stateId == 4:
            self.handleCooldownFinish(avatar)
        elif stateId == 5:
            # The AI is just clearing the state of the specified avatar.
            self.__resetAvatarIvalAndUnloadIceCube(avatar)
        else:
            self.notify.warning(
                'Attempted to set state with unknown state id: {0}.'.format(
                    stateId))
Exemplo n.º 15
0
 def pickUp(self, toonId, pickupNum, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.pickUp(toonId, pickupNum, elapsedTime)
    def scan(self, timestamp = None, afterShooting = 0):
        if timestamp == None:
            ts = 0.0
        else:
            ts = globalClockDelta.localElapsedTime(timestamp)

        self.fsm.request('scan', [ts, afterShooting])
    def setChatText(self, chatText, timeout=False, timestamp=None):
        if timeout:
            delay = len(chatText) * 0.5
            if delay < self.CHAT_TIMEOUT_MIN:
                delay = self.CHAT_TIMEOUT_MIN
            elif delay > self.CHAT_TIMEOUT_MAX:
                delay = self.CHAT_TIMEOUT_MAX
            if timestamp is not None:
                delay -= min(
                    globalClockDelta.localElapsedTime(timestamp, bits=32),
                    delay)
            if not delay:
                return

        # If we are currently displaying chat text, we need to "stomp" it. In
        # other words, we need to clear the current chat text, pause for a
        # brief moment, and then display the new chat text:
        if self.getChatText():
            self.clearChatText()
            self.stompChatText = chatText
            self.stompTask = taskMgr.doMethodLater(self.CHAT_STOMP_DELAY,
                                                   self.__chatStomp,
                                                   self.stompTaskName,
                                                   extraArgs=[timeout])
            return

        self.clearChatText()

        self.chatPages = chatText.split('\x07')
        self.setChatPageIndex(0)

        if timeout:
            self.chatTimeoutTask = taskMgr.doMethodLater(
                delay, self.clearChatText, self.chatTimeoutTaskName)
 def startPosInterval(self, startX, startY, startZ, endX, endY, endZ, duration, blendType, ts=0.0):
     if ts != 0.0:
         ts = globalClockDelta.localElapsedTime(ts)
     self.stopMoveInterval()
     startPos = Point3(startX, startY, startZ)
     endPos = Point3(endX, endY, endZ)
     self.moveIval = LerpPosInterval(self, duration=duration, pos=endPos, startPos=startPos, blendType=blendType)
     self.moveIval.start(ts)
Exemplo n.º 19
0
 def setState(self, state, timestamp=None):
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     self.state = state
     if self.boat:
         self.fsm.request(state, [ts])
 def doAttack(self, attackId, avId, timestamp = None):
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     attackName = SuitAttacks.SuitAttackLengths.keys()[attackId]
     avatar = self.cr.doId2do.get(avId)
     self.animFSM.request('attack', [attackName, avatar, ts])
Exemplo n.º 21
0
 def setAnimState(self, anim, timestamp=None, callback=None, extraArgs=[]):
     self.anim = anim
     if timestamp is None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     if self.animFSM.getStateNamed(anim):
         self.animFSM.request(anim, [ts, callback, extraArgs])
 def setState(self, state, timestamp=None):
     if timestamp is None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     self.state = state
     if self.boat and base.cr.holidayManager.getHoliday(
     ) != HolidayType.CHRISTMAS:
         self.fsm.request(state, [ts])
Exemplo n.º 23
0
 def toonHitBySuit(self, toonId, suitType, suitNum, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     if toonId == localAvatar.doId:
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.toonHitBySuit(toonId, suitType, suitNum, elapsedTime)
Exemplo n.º 24
0
 def toonUsedGag(self, toonId, x, y, h, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     if toonId == localAvatar.doId:
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.toonUsedGag(toonId, x, y, h, elapsedTime)
Exemplo n.º 25
0
 def setState(self, state, timestamp = None):
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     self.state = state
     if self.boat:
         self.fsm.request(state, [ts])
     return
Exemplo n.º 26
0
 def toonHitBySuit(self, toonId, suitType, suitNum, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     if toonId == localAvatar.doId:
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.toonHitBySuit(toonId, suitType, suitNum, elapsedTime)
Exemplo n.º 27
0
 def toonUsedGag(self, toonId, x, y, h, networkTime):
     if not self._gameInProgress():
         return
     if not self.getToon(base.localAvatar.doId):
         return
     if toonId == localAvatar.doId:
         return
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.toonUsedGag(toonId, x, y, h, elapsedTime)
Exemplo n.º 28
0
 def doTrick(self, trickId, timestamp):
     if not self.isLockedDown():
         if self.trickIval is not None and self.trickIval.isPlaying():
             self.trickIval.finish()
         self.trickIval = PetTricks.getTrickIval(self, trickId)
         if trickId == PetTricks.Tricks.BALK:
             mood = self.getDominantMood()
             self.trickIval = Parallel(self.trickIval, Sequence(Func(self.handleMoodChange, 'confusion'), Wait(1.0), Func(self.handleMoodChange, mood)))
         self.trickIval.start(globalClockDelta.localElapsedTime(timestamp))
     return
 def playProjectile(self):
     ts = globalClockDelta.localElapsedTime(self.projTimestamp)
     self.ival = Sequence(
         FlightProjectileInterval(self,
                                  startPos=Point3(*self.projStart),
                                  endPos=Point3(*self.projEnd),
                                  duration=self.projDuration,
                                  gravityMult=self.projGravity),
         Func(self.ivalFinished))
     self.ival.start(0)  #ts)
 def setSuitState(self, index, startPoint, endPoint, timestamp=None):
     if timestamp != None:
         ts = globalClockDelta.localElapsedTime(timestamp)
     else:
         ts = 0.0
     self.suitState = self.stateIndex2suitState[index]
     self.startPoint = startPoint
     self.endPoint = endPoint
     self.suitFSM.request(self.suitState, [startPoint, endPoint, ts])
     return
Exemplo n.º 31
0
 def setAnimState(self, anim, timestamp=None, callback=None, extraArgs=[]):
     self.anim = anim
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     if type(anim) == types.IntType:
         anim = self.animId2animState[anim]
     if self.animFSM.getStateNamed(anim):
         self.animFSM.request(anim, [ts, callback, extraArgs])
     return
Exemplo n.º 32
0
 def setAnimState(self, anim, timestamp = None, callback = None, extraArgs = []):
     self.anim = anim
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     if type(anim) == types.IntType:
         anim = self.animId2animState[anim]
     if self.animFSM.getStateNamed(anim):
         self.animFSM.request(anim, [ts, callback, extraArgs])
     return
Exemplo n.º 33
0
    def pieThrow(self, avId, timestamp, heading, pos, power):
        """Show local or remote toon throwing a pie."""

        toon = self.activity.getAvatar(avId)

        if toon is None:
            return

        tossTrack, pieTrack, flyPie = self.getTossPieInterval(
            toon, pos[0], pos[1], pos[2], heading, 0, 0, power)

        if avId == base.localAvatar.doId:
            flyPie.setTag('throwerId', str(avId))

            collSphere = CollisionSphere(0, 0, 0, 0.5)
            # Make the sphere intangible
            collSphere.setTangible(0)
            name = "PieSphere-%d" % avId
            collSphereName = self.activity.uniqueName(name)
            collNode = CollisionNode(collSphereName)
            collNode.setFromCollideMask(ToontownGlobals.PieBitmask)
            collNode.addSolid(collSphere)
            collNP = flyPie.attachNewNode(collNode)

            base.cTrav.addCollider(collNP, self.pieHandler)

            self.toonPieEventNames[collNP] = 'pieHit-' + collSphereName
            self.accept(self.toonPieEventNames[collNP],
                        self.handlePieCollision)
        else:
            player = self.players.get(avId)
            if player is not None:
                player.faceForward()

        def matchRunningAnim(toon=toon):
            toon.playingAnim = None
            toon.setSpeed(toon.forwardSpeed, toon.rotateSpeed)

        newTossTrack = Sequence(tossTrack, Func(matchRunningAnim))

        pieTrack = Parallel(newTossTrack,
                            pieTrack,
                            name="PartyCogActivity.pieTrack-%d-%s" %
                            (avId, timestamp))

        elapsedTime = globalClockDelta.localElapsedTime(timestamp)

        if elapsedTime < 16. / 24.:
            elapsedTime = 16. / 24.  # make the pie fly immediately

        pieTrack.start(elapsedTime)

        self.pieIvals.append(pieTrack)
        self.toonPieTracks[avId] = pieTrack
Exemplo n.º 34
0
 def setAnimState(self, animName, animMultiplier=1.0, timestamp=None, animType=None, callback=None, extraArgs=[]):
     if self.animFSM.getCurrentState().getName() == animName:
         return None
     if not animName or animName == 'None':
         return None
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     self.animMultiplier = animMultiplier
     if self.animFSM.getStateNamed(animName):
         self.animFSM.request(animName, [animMultiplier, ts, callback, extraArgs])
 def doTrick(self, trickId, timestamp):
     if not self.isLockedDown():
         if self.trickIval is not None and self.trickIval.isPlaying():
             self.trickIval.finish()
         self.trickIval = PetTricks.getTrickIval(self, trickId)
         if trickId == PetTricks.Tricks.BALK:
             mood = self.getDominantMood()
             self.trickIval = Parallel(
                 self.trickIval,
                 Sequence(Func(self.handleMoodChange, 'confusion'),
                          Wait(1.0), Func(self.handleMoodChange, mood)))
         self.trickIval.start(globalClockDelta.localElapsedTime(timestamp))
    def start(self, timestamp):
        if self.doneTask is not None:
            self.stop()

        self.setup()

        for track in self.tracks.values():
            track.start(globalClockDelta.localElapsedTime(timestamp, bits=32))

        self.doneTask = taskMgr.doMethodLater(
            self.getDuration(), self.__handleMovieDone,
            self.getUniqueName() + '-done')
Exemplo n.º 37
0
    def start(self, timestamp):
        if self.doneTask is not None:
            self.stop()

        self.setup()

        for track in self.tracks.values():
            track.start(globalClockDelta.localElapsedTime(timestamp, bits=32))

        self.doneTask = taskMgr.doMethodLater(self.getDuration(),
                                              self.__handleMovieDone,
                                              self.getUniqueName() + '-done')
Exemplo n.º 38
0
    def toonHitByGag(self, toonId, hitToon, networkTime):
        if not self._gameInProgress():
            return None

        if not self.getToon(base.localAvatar.doId):
            return None

        if toonId == localAvatar.doId:
            return None

        elapsedTime = globalClockDelta.localElapsedTime(networkTime)
        self.game.toonHitByGag(toonId, hitToon, elapsedTime)
 def startProjInterval(self, startX, startY, startZ, endX, endY, endZ, duration, gravityMult, ts=0):
     if isinstance(ts, int) and ts != 0:
         ts = globalClockDelta.localElapsedTime(ts)
     self.disableRay()
     self.stopMoveInterval()
     startPos = Point3(startX, startY, startZ)
     endPos = Point3(endX, endY, endZ)
     oldHpr = self.getHpr(render)
     self.headsUp(endPos)
     newHpr = self.getHpr(render)
     self.setHpr(oldHpr)
     self.moveIval = Parallel(LerpHprInterval(self, duration=0.5, hpr=newHpr, startHpr=oldHpr, blendType='easeInOut'), Sequence(Func(self.animFSM.request, 'flyAway', [ts]), Wait(3.5), Func(self.animFSM.request, 'flyDown', [1.0])), Sequence(Wait(2.0), Func(self.headsUp, endPos), ProjectileInterval(self, startPos=startPos, endPos=endPos, gravityMult=gravityMult, duration=duration)))
     self.moveIval.start(ts)
 def doAttack(self, attackId, avId, timestamp=None):
     if timestamp == None:
         ts = 0.0
     else:
         ts = globalClockDelta.localElapsedTime(timestamp)
     attackName = SuitAttacks.SuitAttackLengths.keys()[attackId]
     attackTaunt = CIGlobals.SuitAttackTaunts[attackName][random.randint(0, len(CIGlobals.SuitAttackTaunts[attackName]) - 1)]
     avatar = self.cr.doId2do.get(avId)
     shouldChat = 0
     if self.suitPlan in [SuitBank.VicePresident, SuitBank.LucyCrossbill]:
         shouldChat = random.randint(0, 2)
     if shouldChat == 0:
         self.setChat(attackTaunt)
     self.animFSM.request('attack', [attackName, avatar, 0.0])
     return
 def doAction(self, action, data, networkTime):
     if not self._gameInProgress():
         return
     if action == Globals.GameActions.RevealDoor:
         self.game.toonRevealsDoor(data)
     elif action == Globals.GameActions.EnterDoor:
         self.game.toonEntersDoor(data)
     elif action == Globals.GameActions.OpenDoor:
         timeLeft = Globals.SecondsUntilGameEnds - globalClockDelta.localElapsedTime(networkTime)
         self.game.openDoor(timeLeft)
     elif action == Globals.GameActions.Countdown:
         countdownTimeLeft = Globals.SecondsUntilTimeout
         self.game.countdown(countdownTimeLeft)
     elif action == Globals.GameActions.TimeAlert:
         self.game.timeAlert()
 def startActive(self, showStartTimestamp):
     DistributedPartyFireworksActivity.notify.debug('startActive')
     messenger.send(FireworksStartedEvent)
     timeSinceStart = globalClockDelta.localElapsedTime(showStartTimestamp)
     if timeSinceStart > self.rocketActor.getDuration('launch'):
         self.rocketActor.hide()
         self.startShow(self.eventId, self.showStyle, showStartTimestamp)
     else:
         self.rocketActor.play('launch')
         self.rocketParticleSeq = Sequence(Wait(RocketSoundDelay), Func(base.playSfx, self.launchSound), Func(self.rocketExplosionEffect.start), Wait(RocketDirectionDelay), LerpHprInterval(self.rocketActor, 4.0, Vec3(0, 0, -60)), Func(self.rocketExplosionEffect.end), Func(self.rocketActor.hide))
         self.rocketParticleSeq.start()
         taskMgr.doMethodLater(FireworksPostLaunchDelay, self.startShow, self.taskName('delayedStartShow'), extraArgs=[self.eventId,
          self.showStyle,
          showStartTimestamp,
          self.root])
Exemplo n.º 43
0
 def doAction(self, action, data, networkTime):
     if not self._gameInProgress():
         return
     if action == Globals.GameActions.RevealDoor:
         self.game.toonRevealsDoor(data)
     elif action == Globals.GameActions.EnterDoor:
         self.game.toonEntersDoor(data)
     elif action == Globals.GameActions.OpenDoor:
         timeLeft = Globals.SecondsUntilGameEnds - globalClockDelta.localElapsedTime(networkTime)
         self.game.openDoor(timeLeft)
     elif action == Globals.GameActions.Countdown:
         countdownTimeLeft = Globals.SecondsUntilTimeout
         self.game.countdown(countdownTimeLeft)
     elif action == Globals.GameActions.TimeAlert:
         self.game.timeAlert()
 def showBoardingChoice(self, shipToBoard):
     if not self.boardingPanel:
         shipInfo = shipToBoard.getShipInfo()
         from direct.distributed.ClockDelta import globalClockDelta
         dt = globalClockDelta.localElapsedTime(shipToBoard.sinkTimestamp)
         time = shipToBoard.sinkTime - dt
         self.boardingPanel = ShipFrameBoard.ShipFrameBoard(
             shipName=shipInfo[1],
             shipClass=shipInfo[2],
             mastInfo=shipInfo[3],
             parent=base.a2dTopCenter,
             pos=(-0.45, 0, -0.5),
             time=time,
             command=self.__handleBoardingChoice)
         self._boardingTimer = taskMgr.doMethodLater(
             time, self._boardingChoiceTimeout, 'boardingTimer')
     self.boardingPanel.show()
    def showToonThrowingPie(self, avId, timestamp, heading, pos):
        toon = self.getAvatar(avId)
        if toon:
            (tossTrack, pieTrack, flyPie) = self.getTossPieInterval(toon, pos[0], pos[1], pos[2], heading, 0, 0, 0)
            
            def removePieFromTraverser(flyPie = flyPie):
                if base.cTrav:
                    if flyPie:
                        base.cTrav.removeCollider(flyPie)
                    
                

            if avId == self.localAvId:
                flyPie.setTag('throwerId', str(avId))
                collSphere = CollisionSphere(0, 0, 0, 0.5)
                collSphere.setTangible(0)
                name = 'PieSphere-%d' % avId
                collSphereName = self.uniqueName(name)
                collNode = CollisionNode(collSphereName)
                collNode.setFromCollideMask(ToontownGlobals.PieBitmask)
                collNode.addSolid(collSphere)
                colNp = flyPie.attachNewNode(collNode)
                colNp.show()
                base.cTrav.addCollider(colNp, self.pieHandler)
                self.accept('pieHit-' + collSphereName, self.handlePieHitting)
            
            
            def matchRunningAnim(toon = toon):
                toon.playingAnim = None
                toon.setSpeed(toon.forwardSpeed, toon.rotateSpeed)

            newTossTrack = Sequence(tossTrack, Func(matchRunningAnim))
            pieTrack = Parallel(newTossTrack, pieTrack)
            elapsedTime = globalClockDelta.localElapsedTime(timestamp)
            if elapsedTime < 16.0 / 24.0:
                elapsedTime = 16.0 / 24.0
            
            pieTrack.start(elapsedTime)
            self.toonPieTracks[avId] = pieTrack
    def showToonThrowingPie(self, avId, timestamp, heading, pos):
        toon = self.getAvatar(avId)
        if toon:
            (tossTrack, pieTrack,
             flyPie) = self.getTossPieInterval(toon, pos[0], pos[1], pos[2],
                                               heading, 0, 0, 0)

            def removePieFromTraverser(flyPie=flyPie):
                if base.cTrav:
                    if flyPie:
                        base.cTrav.removeCollider(flyPie)

            if avId == self.localAvId:
                flyPie.setTag('throwerId', str(avId))
                collSphere = CollisionSphere(0, 0, 0, 0.5)
                collSphere.setTangible(0)
                name = 'PieSphere-%d' % avId
                collSphereName = self.uniqueName(name)
                collNode = CollisionNode(collSphereName)
                collNode.setFromCollideMask(ToontownGlobals.PieBitmask)
                collNode.addSolid(collSphere)
                colNp = flyPie.attachNewNode(collNode)
                colNp.show()
                base.cTrav.addCollider(colNp, self.pieHandler)
                self.accept('pieHit-' + collSphereName, self.handlePieHitting)

            def matchRunningAnim(toon=toon):
                toon.playingAnim = None
                toon.setSpeed(toon.forwardSpeed, toon.rotateSpeed)

            newTossTrack = Sequence(tossTrack, Func(matchRunningAnim))
            pieTrack = Parallel(newTossTrack, pieTrack)
            elapsedTime = globalClockDelta.localElapsedTime(timestamp)
            if elapsedTime < 16.0 / 24.0:
                elapsedTime = 16.0 / 24.0

            pieTrack.start(elapsedTime)
            self.toonPieTracks[avId] = pieTrack
 def startFlying(self, timestamp):
     self.flyTrack.loop(globalClockDelta.localElapsedTime(timestamp, bits=32))
     self.loop('flying')
Exemplo n.º 48
0
 def gunShot(self, avId, timestamp):
     ts = globalClockDelta.localElapsedTime(timestamp)
     av = self.getRemoteAvatar(avId)
     if av:
         av.fsm.request('shoot', [ts])
Exemplo n.º 49
0
 def deadAvatar(self, avId, timestamp):
     ts = globalClockDelta.localElapsedTime(timestamp)
     av = self.getRemoteAvatar(avId)
     if av:
         av.fsm.request('die', [ts])
Exemplo n.º 50
0
 def setState(self, stateName, timestamp):
     ts = globalClockDelta.localElapsedTime(timestamp)
     self.fsm.request(stateName, [ts])
    def playMovie(self, av, timestamp):
        self.pendingMovie = None
        av.stopSmooth()
        av.motionFSM.request("Off")
        availAnims = CustomAnims.INTERACT_ANIMS.get(self.interactType)
        availProps = None
        if availAnims == None:
            self.notify.warning(
                "undefined interaction type %s, not found in CustomAnims.INTERACT_ANIMS" % self.interactType
            )
        else:
            availProps = availAnims.get("props")
            availIdles = availAnims.get("idles")
            intoAnims = availAnims.get("idleInto", [""])
        self.interactAnim = random.choice(availIdles)

        def interactSetup():
            av.usingPropNoNotice = 1
            av.abortNotice()
            self.adjustPos(av)
            av.loop(self.interactAnim)

        def playInteract():
            if self.interactType == "hit":
                av.play(self.interactAnim)
                if self.interactAnim == "boxing_kick":
                    reactDelay = 0.42999999999999999
                else:
                    reactDelay = 0.40000000000000002
                taskMgr.doMethodLater(reactDelay, self.playInteraction, self.uniqueName("playReact"))
            elif self.interactType == "sit":
                av.loop(self.interactAnim, blendT=av.motionFSM.BLENDAMT)
                (posOffset, hprOffset) = self.getLocatorOffset(av.getParent())
                av.setPos(posOffset[0], posOffset[1], posOffset[2])
                av.setHpr(hprOffset[0], hprOffset[1], hprOffset[2])
            elif self.interactType == "stockade":
                av.loop(self.interactAnim, blendT=av.motionFSM.BLENDAMT)
                myPos = self.getPos(av.getParent())
                myHpr = self.getHpr(av.getParent())
                av.setPos(myPos[0], myPos[1], myPos[2])
                av.setHpr(myHpr[0], myHpr[1], myHpr[2])
            else:
                av.loop(self.interactAnim, blendT=0)
                (posOffset, hprOffset) = self.getLocatorOffset(av.getParent())
                if self.interactType not in PiratesGlobals.INTERACT_TYPES_WITHOUT_FORCE_POS:
                    av.setPos(posOffset[0], posOffset[1], posOffset[2])
                    av.setHpr(hprOffset[0], hprOffset[1], hprOffset[2])

            if availProps:
                av.holdAnimProp(availProps)

            av.interactAnim = self.interactAnim
            del self.myIvals[self.avId]
            av.canMove = False
            self.sendUpdate("inPosition")

        self.cleanupMovies()
        ival = self.createTransitionIval(av, "idleInto", interactSetup, playInteract)
        startTime = globalClockDelta.localElapsedTime(timestamp, bits=32)
        ival.start(startT=startTime)
        self.myIvals[self.avId] = ival
 def eagleExitCooldown(self, eagleId, networkTime):
     self.notify.debugCall()
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.eagleExitCooldown(eagleId, elapsedTime)
 def debuffPowerup(self, toonId, pickupType, networkTime):
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.debuffPowerup(toonId, pickupType, elapsedTime)
 def toonClearAsEagleTarget(self, toonId, eagleId, networkTime):
     self.notify.debugCall()
     elapsedTime = globalClockDelta.localElapsedTime(networkTime)
     self.game.toonClearAsEagleTarget(toonId, eagleId, elapsedTime)
 def toonSpawn(self, toonId, networkTime):
     if toonId != base.localAvatar.doId:
         elapsedTime = globalClockDelta.localElapsedTime(networkTime)
         self.game.toonSpawn(toonId, elapsedTime)
    def __showToonHitBySuit(self, avId, timestamp):
        toon = self.getAvatar(avId)
        if toon == None:
            return
        rng = self.toonRNGs[self.avIdList.index(avId)]
        curPos = toon.getPos(render)
        oldTrack = self.toonHitTracks[avId]
        if oldTrack.isPlaying():
            oldTrack.finish()
        toon.setPos(curPos)
        toon.setZ(self.TOON_Z)
        parentNode = render.attachNewNode('mazeFlyToonParent-' + `avId`)
        parentNode.setPos(toon.getPos())
        toon.reparentTo(parentNode)
        toon.setPos(0,0,0)
        startPos = parentNode.getPos()
        dropShadow = toon.dropShadow.copyTo(parentNode)
        dropShadow.setScale(toon.dropShadow.getScale(render))
        trajectory = Trajectory.Trajectory(
            0,
            Point3(0,0,0),
            Point3(0,0,50),
            gravMult=1.0)
        flyDur = trajectory.calcTimeOfImpactOnPlane(0.0)
        while 1:
            endTile = [rng.randint(2, self.maze.width-1), rng.randint(2, self.maze.height-1)]
            if self.maze.isWalkable(endTile[0], endTile[1]):
                break
        endWorldCoords = self.maze.tile2world(endTile[0], endTile[1])
        endPos = Point3(endWorldCoords[0], endWorldCoords[1], startPos[2])
        def flyFunc(t, trajectory, startPos = startPos, endPos = endPos, dur = flyDur, moveNode = parentNode, flyNode = toon):
            u = t/dur
            moveNode.setX(startPos[0] + u * (endPos[0]-startPos[0]))
            moveNode.setY(startPos[1] + u * (endPos[1]-startPos[1]))
            flyNode.setPos(trajectory.getPos(t))
        flyTrack = Sequence(
            LerpFunctionInterval(flyFunc, fromData=0.0, toData=flyDur, duration=flyDur, extraArgs=[trajectory]),
            name=toon.uniqueName('hitBySuit-fly'))
        if avId != self.localAvId:
            cameraTrack = Sequence()
        else:
            self.camParent.reparentTo(parentNode)
            startCamPos = camera.getPos()
            destCamPos = camera.getPos()
            zenith = trajectory.getPos(flyDur/2.0)[2]
            destCamPos.setZ(zenith*1.3)
            destCamPos.setY(destCamPos[1]*0.3)
            def camTask(task, zenith = zenith, flyNode = toon, startCamPos = startCamPos, camOffset = destCamPos - startCamPos):
                u = flyNode.getZ()/zenith
                camera.setPos(startCamPos + camOffset*u)
                camera.lookAt(toon)
                return Task.cont
            camTaskName = 'mazeToonFlyCam-' + `avId`
            taskMgr.add(camTask, camTaskName, priority=20)
            def cleanupCamTask(self = self, toon = toon, camTaskName = camTaskName, startCamPos = startCamPos):
                taskMgr.remove(camTaskName)
                self.camParent.reparentTo(toon)
                camera.setPos(startCamPos)
                camera.lookAt(toon)

            cameraTrack = Sequence(
                Wait(flyDur),
                Func(cleanupCamTask),
                name='hitBySuit-cameraLerp')

        geomNode = toon.getGeomNode()
        startHpr = geomNode.getHpr()
        destHpr = Point3(startHpr)
        hRot = rng.randrange(1, 8)
        if rng.choice([0, 1]):
            hRot = -hRot
        destHpr.setX(destHpr[0] + hRot*360)
        spinHTrack = Sequence(
            LerpHprInterval(geomNode, flyDur, destHpr, startHpr=startHpr),
            Func(geomNode.setHpr, startHpr),
            name=toon.uniqueName('hitBySuit-spinH'))
        parent = geomNode.getParent()
        rotNode = parent.attachNewNode('rotNode')
        geomNode.reparentTo(rotNode)
        rotNode.setZ(toon.getHeight()/2.0)
        oldGeomNodeZ = geomNode.getZ()
        geomNode.setZ(-toon.getHeight()/2.0)
        startHpr = rotNode.getHpr()
        destHpr = Point3(startHpr)
        pRot = rng.randrange(1,3)
        if rng.choice([0, 1]):
            pRot = -pRot
        destHpr.setY(destHpr[1] + pRot*360)
        spinPTrack = Sequence(
            LerpHprInterval(rotNode, flyDur, destHpr, startHpr=startHpr),
            Func(rotNode.setHpr, startHpr),
            name=toon.uniqueName('hitBySuit-spinP'))
        i = self.avIdList.index(avId)
        soundTrack = Sequence(
            Func(base.playSfx, self.sndTable['hitBySuit'][i]),
            Wait(flyDur * (2.0/3.0)),
            SoundInterval(self.sndTable['falling'][i],
                          duration=flyDur * (1.0/3.0)),
            name=toon.uniqueName('hitBySuit-soundTrack'))

        def preFunc(self = self, avId = avId, toon = toon, dropShadow = dropShadow):
            forwardSpeed = toon.forwardSpeed
            rotateSpeed = toon.rotateSpeed
            if avId == self.localAvId:
                self.orthoWalk.stop()
            else:
                toon.stopSmooth()
            if forwardSpeed or rotateSpeed:
                toon.setSpeed(forwardSpeed, rotateSpeed)
            toon.dropShadow.hide()

        def postFunc(self = self, avId = avId, oldGeomNodeZ = oldGeomNodeZ, dropShadow = dropShadow, parentNode = parentNode):
            if avId == self.localAvId:
                base.localAvatar.setPos(endPos)
                if hasattr(self, 'orthoWalk'):
                    if self.gameFSM.getCurrentState().getName() == 'play':
                        self.orthoWalk.start()
            dropShadow.removeNode()
            del dropShadow
            toon.dropShadow.show()
            geomNode = toon.getGeomNode()
            rotNode = geomNode.getParent()
            baseNode = rotNode.getParent()
            geomNode.reparentTo(baseNode)
            rotNode.removeNode()
            del rotNode
            geomNode.setZ(oldGeomNodeZ)
            toon.reparentTo(render)
            toon.setPos(endPos)
            parentNode.removeNode()
            del parentNode
            if avId != self.localAvId:
                toon.startSmooth()

        preFunc()

        hitTrack = Sequence(Parallel(flyTrack, cameraTrack,
                                     spinHTrack, spinPTrack, soundTrack),
                            Func(postFunc),
                            name=toon.uniqueName('hitBySuit'))

        self.toonHitTracks[avId] = hitTrack

        hitTrack.start(globalClockDelta.localElapsedTime(timestamp))
 def setTrack(self, track, timestamp=0.0):
     self.track = Sequence()
     for screenIndex, duration in track:
         self.track.append(Func(self.setScreen, screenIndex))
         self.track.append(Wait(duration))
     self.track.loop(globalClockDelta.localElapsedTime(timestamp, bits=32))
    def showToonHitBySuit(self, avId, timestamp):
        toon = self.getAvatar(avId)
        if toon == None:
            return
        rng = self.toonRNGs[self.avIdList.index(avId)]
        curPos = toon.getPos(render)
        oldTrack = self.toonHitTracks[avId]
        if oldTrack.isPlaying():
            oldTrack.finish()
        toon.setPos(curPos)
        toon.setZ(self.TOON_Z)
        parentNode = render.attachNewNode('mazeFlyToonParent-' + `avId`)
        parentNode.setPos(toon.getPos())
        toon.reparentTo(parentNode)
        toon.setPos(0, 0, 0)
        startPos = parentNode.getPos()
        dropShadow = toon.dropShadow.copyTo(parentNode)
        dropShadow.setScale(toon.dropShadow.getScale(render))
        trajectory = Trajectory.Trajectory(0, Point3(0, 0, 0), Point3(0, 0, 50), gravMult=1.0)
        oldFlyDur = trajectory.calcTimeOfImpactOnPlane(0.0)
        trajectory = Trajectory.Trajectory(0, Point3(0, 0, 0), Point3(0, 0, 50), gravMult=0.55)
        flyDur = trajectory.calcTimeOfImpactOnPlane(0.0)
        avIndex = self.avIdList.index(avId)
        endPos = CTGG.ToonStartingPositions[avIndex]

        def flyFunc(t, trajectory, startPos = startPos, endPos = endPos, dur = flyDur, moveNode = parentNode, flyNode = toon):
            u = t / dur
            moveNode.setX(startPos[0] + u * (endPos[0] - startPos[0]))
            moveNode.setY(startPos[1] + u * (endPos[1] - startPos[1]))
            flyNode.setPos(trajectory.getPos(t))

        flyTrack = Sequence(LerpFunctionInterval(flyFunc, fromData=0.0, toData=flyDur, duration=flyDur, extraArgs=[trajectory]), name=toon.uniqueName('hitBySuit-fly'))
        geomNode = toon.getGeomNode()
        startHpr = geomNode.getHpr()
        destHpr = Point3(startHpr)
        hRot = rng.randrange(1, 8)
        if rng.choice([0, 1]):
            hRot = -hRot
        destHpr.setX(destHpr[0] + hRot * 360)
        spinHTrack = Sequence(LerpHprInterval(geomNode, flyDur, destHpr, startHpr=startHpr), Func(geomNode.setHpr, startHpr), name=toon.uniqueName('hitBySuit-spinH'))
        parent = geomNode.getParent()
        rotNode = parent.attachNewNode('rotNode')
        geomNode.reparentTo(rotNode)
        rotNode.setZ(toon.getHeight() / 2.0)
        oldGeomNodeZ = geomNode.getZ()
        geomNode.setZ(-toon.getHeight() / 2.0)
        startHpr = rotNode.getHpr()
        destHpr = Point3(startHpr)
        pRot = rng.randrange(1, 3)
        if rng.choice([0, 1]):
            pRot = -pRot
        destHpr.setY(destHpr[1] + pRot * 360)
        spinPTrack = Sequence(LerpHprInterval(rotNode, flyDur, destHpr, startHpr=startHpr), Func(rotNode.setHpr, startHpr), name=toon.uniqueName('hitBySuit-spinP'))
        i = self.avIdList.index(avId)
        soundTrack = Sequence(Func(base.playSfx, self.sndTable['hitBySuit'][i]), Wait(flyDur * (2.0 / 3.0)), SoundInterval(self.sndTable['falling'][i], duration=flyDur * (1.0 / 3.0)), name=toon.uniqueName('hitBySuit-soundTrack'))

        def preFunc(self = self, avId = avId, toon = toon, dropShadow = dropShadow):
            forwardSpeed = toon.forwardSpeed
            rotateSpeed = toon.rotateSpeed
            if avId == self.localAvId:
                self.stopGameWalk()
            else:
                toon.stopSmooth()
            if forwardSpeed or rotateSpeed:
                toon.setSpeed(forwardSpeed, rotateSpeed)
            toon.dropShadow.hide()

        def postFunc(self = self, avId = avId, oldGeomNodeZ = oldGeomNodeZ, dropShadow = dropShadow, parentNode = parentNode):
            if avId == self.localAvId:
                base.localAvatar.setPos(endPos)
                if hasattr(self, 'gameWalk'):
                    toon = base.localAvatar
                    toon.setSpeed(0, 0)
                    self.startGameWalk()
            dropShadow.removeNode()
            del dropShadow
            toon = self.getAvatar(avId)
            if toon:
                toon.dropShadow.show()
                geomNode = toon.getGeomNode()
                rotNode = geomNode.getParent()
                baseNode = rotNode.getParent()
                geomNode.reparentTo(baseNode)
                rotNode.removeNode()
                del rotNode
                geomNode.setZ(oldGeomNodeZ)
            if toon:
                toon.reparentTo(render)
                toon.setPos(endPos)
            parentNode.removeNode()
            del parentNode
            if avId != self.localAvId:
                if toon:
                    toon.startSmooth()

        preFunc()
        slipBack = Parallel(Sequence(ActorInterval(toon, 'slip-backward', endFrame=24), Wait(CTGG.LyingDownDuration - (flyDur - oldFlyDur)), ActorInterval(toon, 'slip-backward', startFrame=24)))
        if toon.doId == self.localAvId:
            slipBack.append(SoundInterval(self.sndOof))
        hitTrack = Sequence(Parallel(flyTrack, spinHTrack, spinPTrack, soundTrack), slipBack, Func(postFunc), name=toon.uniqueName('hitBySuit'))
        self.notify.debug('hitTrack duration = %s' % hitTrack.getDuration())
        self.toonHitTracks[avId] = hitTrack
        hitTrack.start(globalClockDelta.localElapsedTime(timestamp))
        return
Exemplo n.º 59
0
 def enterTeleportOut(self, timestamp):
     self.track = self.getTeleportOutTrack()
     self.track.start(globalClockDelta.localElapsedTime(timestamp))