Esempio n. 1
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))
Esempio n. 2
0
    def handleToonJoined(self, toonId):
        DistributedPartyTeamActivity.handleToonJoined(self, toonId)

        self.toonIdsToAnimIntervals[toonId] = None

        if toonId == base.localAvatar.doId:
            base.cr.playGame.getPlace().fsm.request("activity")

            # set camera to a 3rd person view of play area
            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]
            # prevent toons from clipping through the dock by warping them to dock height
            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()
Esempio n. 3
0
 def enterControlled(self, avId):
     self.prepareForPhaseFour()
     self.avId = avId
     toon = base.cr.doId2do.get(avId)
     if not toon:
         return
     self.toon = toon
     self.grabTrack = self.makeToonGrabInterval(toon)
     self.notify.debug('grabTrack=%s' % self.grabTrack)
     self.pitcherCamPos = Point3(0, -50, 40)
     self.pitcherCamHpr = Point3(0, -21, 0)
     if avId == localAvatar.doId:
         self.boss.toMovieMode()
         self.__enableControlInterface()
         self.startPosHprBroadcast()
         self.grabTrack = Sequence(
             self.grabTrack, Func(camera.wrtReparentTo, localAvatar),
             LerpPosHprInterval(camera, 1, self.pitcherCamPos,
                                self.pitcherCamHpr),
             Func(self.boss.toCraneMode))
         if self.TugOfWarControls:
             self.__spawnUpdateKeyPressRateTask()
         self.accept('exitCrane', self.gotBossZapped)
     else:
         self.startSmooth()
         toon.stopSmooth()
     self.grabTrack.start()
Esempio n. 4
0
 def fillSlot(self, index, avId):
     toon = self.cr.doId2do.get(avId)
     if toon:
         point = ElevatorPoints[index]
         toon.stopSmooth()
         toon.wrtReparentTo(self.getElevatorModel())
         toon.headsUp(point)
         track = Sequence()
         track.append(Func(toon.animFSM.request, 'run'))
         track.append(
             LerpPosInterval(toon,
                             duration=0.5,
                             pos=point,
                             startPos=toon.getPos(self.getElevatorModel())))
         track.append(
             LerpHprInterval(toon,
                             duration=0.1,
                             hpr=(180, 0, 0),
                             startHpr=toon.getHpr(self.getElevatorModel())))
         track.append(Func(toon.animFSM.request, 'neutral'))
         if avId == base.localAvatar.doId:
             self.localAvOnElevator = True
             track.append(Func(self.showHopOffButton))
             base.localAvatar.stopSmartCamera()
             base.localAvatar.walkControls.setCollisionsActive(0)
             base.camera.wrtReparentTo(self.getElevatorModel())
             cameraBoardTrack = LerpPosHprInterval(camera, 1.5,
                                                   Point3(0, -16, 5.5),
                                                   Point3(0, 0, 0))
             cameraBoardTrack.start()
         track.start()
Esempio n. 5
0
    def doFirstPersonCameraTransition(self):
        if self.isFirstPerson():
            # Fancy little camera transition for first person
            camHeight = max(self.getHeight(), 3.0)
            heightScaleFactor = camHeight * 0.3333333333

            LerpPosHprInterval(nodePath = camera, other = self, duration = 1.0,
                               pos = (0, -9.0 * heightScaleFactor, camHeight), hpr = (0, 0, 0),
                               blendType = 'easeInOut').start()
Esempio n. 6
0
 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()
     return
Esempio n. 7
0
 def getIntroTrack(self):
     base.camera.setPosHpr(0, -13.66, 13.59, 0, -51.6, 0)
     result = Sequence(
         Wait(2),
         LerpPosHprInterval(base.camera,
                            13,
                            Point3(self.cameraTopView[0],
                                   self.cameraTopView[1],
                                   self.cameraTopView[2]),
                            Point3(self.cameraTopView[3],
                                   self.cameraTopView[4],
                                   self.cameraTopView[5]),
                            blendType='easeIn'))
     return result
Esempio n. 8
0
 def getAvatarEnterTrack(self, av):
     track = Sequence(name = av.uniqueName('avatarEnterDoorTrack'))
     track.append(Func(av.setAnimState, 'walkBack'))
     track.append(
         ParallelEndTogether(
             LerpPosInterval(
                 av,
                 duration = 0.5,
                 blendType = 'easeInOut',
                 pos = self.enterWalkBackPos,
                 startPos = av.getPos(render)
             ),
             LerpQuatInterval(
                 av,
                 duration = 0.5,
                 hpr = self.doorNode.getHpr(render),
                 startHpr = av.getHpr(render)
             )
         )
     )
     track.append(Func(av.setPlayRate, 1.0, 'walk'))
     track.append(Func(av.loop, 'neutral'))
     track.append(Wait(1.0))
     track.append(Func(av.loop, 'walk'))
     parallel = Parallel()
     parallel.append(
         LerpPosInterval(
             av,
             duration = 1.0,
             blendType = 'easeInOut',
             pos = self.enterWalkInPos,
             startPos = self.enterWalkBackPos
         )
     )
     if base.localAvatar.doId == av.doId:
         parallel.append(LerpPosHprInterval(nodePath = camera, other = av, duration = 1.0,
                                            pos = (0, -8, av.getHeight()), hpr = (0, 0, 0),
                                            blendType = 'easeInOut'))
         parallel.append(Sequence(Wait(0.5), Func(self.sendGoingIn), Wait(1.0)))
     track.append(parallel)
     if base.localAvatar.doId == av.doId:
         track.append(Func(self.sendWentInDoor))
     track.setDoneEvent(track.getName())
     track.delayDelete = DelayDelete.DelayDelete(av, track.getName())
     self.acceptOnce(track.getDoneEvent(), self.__avatarTrackDone, [track])
     return track
Esempio n. 9
0
    def goto_home(self):
        self.soft_destroy()

        LerpPosHprInterval(base.camera, 0.35, Point3(0, 0, 0),
                           Point3(0, 0, 0)).start()

        logo = OnscreenImage(image=loader.loadTexture('mainmenu/logo.png'),
                             pos=(0, 0, 0.625),
                             scale=(1, 1, 0.4))
        logo.setTransparency(TransparencyAttrib.MAlpha)

        exit_button = DirectButton(
            geom=(self.sprites.find('**/mm-exit-ready'),
                  self.sprites.find('**/mm-exit-click'),
                  self.sprites.find('**/mm-exit-hover'),
                  self.sprites.find('**/mm-exit-disabled')),
            relief=None,
            geom_scale=(0.666, 0, 0.25),
            geom_pos=(0, 0, -0.75),
            command=self.level_holder.exit_game)
        settings_button = DirectButton(
            geom=(self.sprites.find('**/mm-settings-ready'),
                  self.sprites.find('**/mm-settings-click'),
                  self.sprites.find('**/mm-settings-hover'),
                  self.sprites.find('**/mm-settings-disabled')),
            relief=None,
            geom_scale=(0.666, 0, 0.25),
            geom_pos=(0, 0, -0.4),
            command=self.goto_settings)
        play_button = DirectButton(
            geom=(self.sprites.find('**/mm-play-ready'),
                  self.sprites.find('**/mm-play-click'),
                  self.sprites.find('**/mm-play-hover'),
                  self.sprites.find('**/mm-play-disabled')),
            relief=None,
            geom_scale=(1, 0, 0.3),
            geom_pos=(0, 0, 0.1),
            command=self.goto_play)

        if not self.level_holder.check_connection():
            play_button["state"] = DGG.DISABLED

        self.images["img_logo"] = logo
        self.gui["btn_exit"] = exit_button
        self.gui["btn_settings"] = settings_button
        self.gui["btn_play"] = play_button
Esempio n. 10
0
    def goto_settings(self):
        self.soft_destroy()

        LerpPosHprInterval(base.camera, 0.35, Point3(1, 12, 0),
                           Point3(-7, 0, 0)).start()

        settings_image = OnscreenImage(image='mainmenu/mm-settings-ready.png',
                                       pos=(0, 0, 0.7),
                                       scale=(0.5, 1, 0.2))
        settings_image.setTransparency(TransparencyAttrib.MAlpha)

        back_button = DirectButton(
            geom=(self.sprites.find('**/mm-back-ready'),
                  self.sprites.find('**/mm-back-click'),
                  self.sprites.find('**/mm-back-hover'),
                  self.sprites.find('**/mm-back-disabled')),
            relief=None,
            geom_scale=(0.666, 0, 0.25),
            geom_pos=(0, 0, -0.75),
            command=self.goto_home)

        self.gui["btn_settings_back"] = back_button
        self.images["img_settings"] = settings_image
    def run(self):

        boss = base.bspLoader.getPyEntityByTargetName("groom_boss_suit")
        boss.show()
        boss.cleanupPropeller()
        boss.animFSM.request('neutral')
        camera.reparentTo(boss)

        onBtn = base.bspLoader.getPyEntityByTargetName("powerovrd_on_button")

        # press animation (fingerwag): 1-31 32-1

        buttonPos = (-1105 / 16.0, 2683 / 16.0, 76 / 16.0)
        camBtnPosHpr = (-1027 / 16.0, 2638 / 16.0, 96 / 16.0, 135 - 90, 30, 0)
        camBtnPosHpr2 = (-1009 / 16.0, 2764 / 16.0, 169 / 16.0, 232 - 90, 0, 0)

        def __pingpongboss_speak():
            boss.pingpong("speak", fromFrame=95, toFrame=100)

        def __boss_pressseq():
            return Sequence(
                ActorInterval(boss, "fingerwag", startFrame=1, endFrame=31),
                Func(onBtn.d_requestPress),
                ActorInterval(boss, "fingerwag", startFrame=32, endFrame=1))

        def __localavplay_duck():
            base.localAvatar.setAnimState('off')
            base.localAvatar.play("duck", fromFrame=19)

        numGoons = 6

        goonWakeup = Parallel()
        for i in xrange(numGoons):
            delay = random.uniform(0.0, 0.5)
            goon = base.bspLoader.getPyEntityByTargetName(
                "groom_goon_{0}".format(i))
            goonWakeup.append(Sequence(Wait(delay), Func(goon.wakeup)))

        bdoor = base.bspLoader.getPyEntityByTargetName("to_groom_botdoor")
        tdoor = base.bspLoader.getPyEntityByTargetName("to_groom_topdoor")

        oldHpr = boss.getHpr(render)

        bossTrack = Parallel(
            Sequence(
                Wait(10.0),
                Func(boss.setHpr, oldHpr),
                ActorInterval(boss,
                              "speak",
                              startFrame=55,
                              endFrame=105,
                              playRate=1.5),
                #Func(__pingpongboss_speak),
                Wait(2.0),
                Func(boss.loop, "neutral")),
            Sequence(
                Func(boss.play, "speak"),
                Func(boss.setChat,
                     "What's this?! How did a Toon get down here?"), Wait(2.5),
                Func(
                    boss.setChat,
                    "The only place you'll be going is back to the playground."
                ), Func(boss.loop, "walk"), Func(boss.headsUp, *buttonPos),
                LerpPosInterval(boss, 2.5, buttonPos), __boss_pressseq(),
                Wait(2.5), Func(boss.setChat, "Goons, ATTACK!!!")))
        camTrack = Sequence(
            Func(camera.setPos, 2.5, 14, 7), Func(camera.lookAt, boss, 0, 0,
                                                  4), Wait(2.5),
            Func(camera.reparentTo, render),
            Func(camera.setPosHpr, *camBtnPosHpr), Wait(2.0),
            Func(camera.setPosHpr, *camBtnPosHpr2), Wait(0.5), Wait(3.0),
            Func(camera.setPosHpr, 4.351, 126.686, 5.5, -154.16, 16.11, 0),
            Wait(0.3), Func(bdoor.request, 'Closing'),
            Func(tdoor.request, 'Closing'), Func(__localavplay_duck),
            Wait(0.9), Func(base.doCamShake, 0.5, 0.35), Wait(0.9),
            Func(camera.reparentTo, boss), Func(camera.setPos, 2.5, 17, 7),
            Func(camera.lookAt, boss, 0, 0, 4),
            LerpPosHprInterval(camera,
                               duration=0.75,
                               blendType='easeOut',
                               pos=(1, 5, 4),
                               hpr=(165, 20, 0)), Wait(1.75),
            Func(camera.reparentTo, render),
            Func(camera.setPosHpr, 88 / 16.0, 2746 / 16.0, 127 / 16.0, 71 - 90,
                 -10, 0))
        goonTrack = Sequence(Wait(12.6), goonWakeup)

        self.ival = Parallel(camTrack, bossTrack, goonTrack)
        self.ival.start()