def handleToonExited(self, toonId):
     DistributedPartyTeamActivity.handleToonExited(self, toonId)
     if toonId == base.localAvatar.doId:
         self.cameraMoveIval.pause()
         if toonId not in self.fallenToons:
             if toonId in self.toonIdsToAnimIntervals and self.toonIdsToAnimIntervals[
                     toonId] is not None:
                 self.toonIdsToAnimIntervals[toonId].finish()
             toon = self.getAvatar(toonId)
             targetH = fitDestAngle2Src(toon.getH(self.root), 180.0)
             targetPos = self.hopOffPositions[self.getTeam(toonId)][
                 self.getIndex(toonId, self.getTeam(toonId))]
             hopOffAnim = Sequence(
                 Func(toon.startPosHprBroadcast, 0.1),
                 toon.hprInterval(0.2,
                                  VBase3(targetH, 0.0, 0.0),
                                  other=self.root),
                 Func(toon.b_setAnimState, 'jump', 1.0), Wait(0.4),
                 PartyUtils.arcPosInterval(0.75, toon, targetPos, 5.0,
                                           self.root),
                 Func(toon.stopPosHprBroadcast),
                 Func(toon.sendCurrentPosition),
                 Func(self.hopOffFinished, toonId))
             self.toonIdsToAnimIntervals[toonId] = hopOffAnim
             self._hopOffFinishedSV.set(False)
             self.toonIdsToAnimIntervals[toonId].start()
         else:
             self._hopOffFinishedSV.set(True)
             del self.toonIdsToAnimIntervals[toonId]
 def handleToonJoined(self, toonId):
     DistributedPartyTeamActivity.handleToonJoined(self, toonId)
     self.toonIdsToAnimIntervals[toonId] = None
     if toonId == base.localAvatar.doId:
         base.cr.playGame.getPlace().fsm.request('activity')
         camera.wrtReparentTo(self.root)
         self.cameraMoveIval = LerpPosHprInterval(camera, 1.5, PartyGlobals.TugOfWarCameraPos, PartyGlobals.TugOfWarCameraInitialHpr, other=self.root)
         self.cameraMoveIval.start()
         self.localToonPosIndex = self.getIndex(base.localAvatar.doId, self.localToonTeam)
         self.notify.debug('posIndex: %d' % self.localToonPosIndex)
         toon = self.getAvatar(toonId)
         targetPos = self.dockPositions[self.localToonTeam][self.localToonPosIndex]
         if toon.getZ(self.root) < PartyGlobals.TugOfWarToonPositionZ:
             toon.setZ(self.root, PartyGlobals.TugOfWarToonPositionZ)
         targetH = fitDestAngle2Src(toon.getH(self.root), PartyGlobals.TugOfWarHeadings[self.localToonTeam])
         travelVector = targetPos - toon.getPos(self.root)
         duration = travelVector.length() / 5.0
         if self.toonIdsToAnimIntervals[toonId] is not None:
             self.toonIdsToAnimIntervals[toonId].finish()
         self.toonIdsToAnimIntervals[toonId] = Sequence(Func(toon.startPosHprBroadcast, 0.1), Func(toon.b_setAnimState, 'run'), LerpPosHprInterval(toon, duration, targetPos, VBase3(targetH, 0.0, 0.0), other=self.root), Func(toon.stopPosHprBroadcast), Func(toon.b_setAnimState, 'neutral'))
         self.toonIdsToAnimIntervals[toonId].start()