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