コード例 #1
0
 def enterReload(self):
     self.gui.deleteNoAmmoLabel()
     if self.weaponName == "pistol":
         self.track = Parallel(Sequence(Wait(0.3), Func(self.reload.play), Func(self.resetAmmo)),
             ActorInterval(self.v_model, 'preload', playRate = 1.5), name = 'reloadTrack')
     elif self.weaponName == "shotgun":
         self.track = Sequence(Func(self.draw.play), LerpQuatInterval(self.v_model, duration = 0.5,
             quat = (70, -50, 0), startHpr = (0, 0, 0), blendType = 'easeIn'),
             SoundInterval(self.cockBack),
             SoundInterval(self.cockFwd),
             Func(self.resetAmmo),
             Func(self.draw.play),
             LerpQuatInterval(self.v_model, duration = 0.5, quat = (0, 0, 0), startHpr = (70, -50, 0),
                 blendType = 'easeOut'), name = 'reloadTrack')
     elif self.weaponName == "sniper":
         self.track = Sequence(Func(self.draw.play), LerpQuatInterval(self.v_model, duration = 0.5,
             quat = (70, -50, 0), startHpr = (0, 0, 0), blendType = 'easeIn'),
             SoundInterval(self.cockBack),
             SoundInterval(self.cockFwd),
             Func(self.resetAmmo),
             Func(self.draw.play),
             LerpQuatInterval(self.v_model, duration = 0.5, quat = (0, 0, 0), startHpr = (70, -50, 0),
                 blendType = 'easeOut'), name = 'reloadTrack')
     self.track.setDoneEvent('reloadTrack')
     self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request, ['idle'])
     self.track.start()
コード例 #2
0
    def enterWestToEast(self, ts=0):
        moPath = Mopath.Mopath()
        moPath.loadFile(self.westEast)
        moIval = MopathInterval(moPath, self.boat)

        self.track = Parallel(
            SoundInterval(self.soundShipBell, node=self.boat),
            SoundInterval(self.soundDockCreak, node=self.westPier), moIval,
            LerpQuatInterval(self.westPier,
                             duration=5.0,
                             quat=(-90, self.pierDownP, 0),
                             startHpr=(-90, self.pierUpP, 0)),
            Sequence(
                Wait(15.0),
                Parallel(
                    LerpQuatInterval(self.eastPier,
                                     duration=5.0,
                                     quat=(90, self.pierUpP, 0),
                                     startHpr=(90, self.pierDownP, 0)),
                    Sequence(
                        Wait(2.0),
                        SoundInterval(self.soundDockCreak,
                                      node=self.eastPier))),
                SoundInterval(self.soundFogHorn, node=self.boat)))
        self.track.start(ts)
コード例 #3
0
 def enterShoot(self):
     self.shoot.play()
     if self.weaponName == "pistol":
         self.track = ActorInterval(self.v_model, 'pshoot', playRate = 2, name = 'shootTrack')
     elif self.weaponName == "shotgun":
         self.track = Parallel(
             Sequence(
                 LerpQuatInterval(self.v_model, duration = 0.05, quat = (0, 3, 0), startHpr = (0, 0, 0)),
                 LerpQuatInterval(self.v_model, duration = 0.1, quat = (0, 0, 0), startHpr = (0, 3, 0))
             ),
             Sequence(
                 LerpPosInterval(self.v_model, duration = 0.05, pos = (0, -0.3, 0), startPos = (0, 0, 0)),
                 LerpPosInterval(self.v_model, duration = 0.1, pos = (0, 0, 0), startPos = (0, -0.3, 0)),
                 Wait(0.1)
             ),
         )
     elif self.weaponName == "sniper":
         self.track = Parallel(
             Sequence(
                 LerpQuatInterval(self.v_model, duration = 0.05, quat = (0, 3, 0), startHpr = (0, 0, 0)),
                 LerpQuatInterval(self.v_model, duration = 0.1, quat = (0, 0, 0), startHpr = (0, 3, 0))
             ),
             Sequence(
                 LerpPosInterval(self.v_model, duration = 0.05, pos = (0, -0.3, 0), startPos = (0, 0, 0)),
                 LerpPosInterval(self.v_model, duration = 0.1, pos = (0, 0, 0), startPos = (0, -0.3, 0)),
                 Wait(0.1)
             ),
         )
     self.track.setDoneEvent('shootTrack')
     self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request, ['idle'])
     self.track.start()
     self.ammo -= 1
     self.gui.adjustAmmoGui()
     self.mg.makeSmokeEffect(self.weapon.find('**/joint_nozzle').getPos(render))
     self.traverse()
コード例 #4
0
 def buildScanTrack(self, ts=None):
     if self.track:
         self.track.pause()
         self.track = None
     self.track = Parallel(
         Sequence(
             LerpQuatInterval(self.cannon.find('**/cannon'),
                              duration=3,
                              quat=(60, 0, 0),
                              startHpr=Vec3(-60, 0, 0),
                              blendType='easeInOut'),
             LerpQuatInterval(self.cannon.find('**/cannon'),
                              duration=3,
                              quat=(-60, 0, 0),
                              startHpr=Vec3(60, 0, 0),
                              blendType='easeInOut'),
         ),
         Sequence(
             LerpQuatInterval(self.cannon.find('**/square_drop_shadow'),
                              duration=3,
                              quat=(60, 0, 0),
                              startHpr=Vec3(-60, 0, 0),
                              blendType='easeInOut'),
             LerpQuatInterval(self.cannon.find('**/square_drop_shadow'),
                              duration=3,
                              quat=(-60, 0, 0),
                              startHpr=Vec3(60, 0, 0),
                              blendType='easeInOut'),
         ))
     if ts:
         self.track.loop(ts)
     else:
         self.track.loop()
コード例 #5
0
 def enterDraw(self):
     self.draw.play()
     if self.weaponName == 'pistol':
         self.track = ActorInterval(self.v_model,
                                    'pdraw',
                                    playRate=1.6,
                                    name='drawTrack')
     else:
         if self.weaponName == 'shotgun':
             self.v_model.pose('sidle', 15)
             self.track = LerpQuatInterval(self.v_model,
                                           duration=0.5,
                                           quat=(0, 0, 0),
                                           startHpr=(70, -50, 0),
                                           blendType='easeOut',
                                           name='drawTrack')
         else:
             if self.weaponName == 'sniper':
                 self.v_model.pose('sidle', 15)
                 self.track = LerpQuatInterval(self.v_model,
                                               duration=0.5,
                                               quat=(0, 0, 0),
                                               startHpr=(70, -50, 0),
                                               blendType='easeOut',
                                               name='drawTrack')
     self.track.setDoneEvent(self.track.getName())
     self.acceptOnce(self.track.getDoneEvent(), self.aliveFSM.request,
                     ['idle'])
     self.track.start()
コード例 #6
0
    def __reset_front_view(self, view_id=None, transition=True, reset_roll=True):
        """ Realigns the Front view to the world (or original user view space) """

        if view_id:
            current_view_id = GlobalData["view"]
            GlobalData["view"] = view_id

        if not self.is_front_custom:

            if view_id:
                GlobalData["view"] = current_view_id

            return

        cam = self.cam
        ref_node = NodePath("ref_node")
        def_front_quat = self.default_front_quat
        ref_node.set_quat(def_front_quat)
        hpr = cam.target.get_hpr(ref_node)
        quat = Quat()

        if reset_roll:
            forward_vec = ref_node.get_relative_vector(cam.target, Vec3.forward())
            look_at(quat, forward_vec, Vec3.up())
        else:
            quat.set_hpr(hpr)

        if transition and (not view_id or view_id == current_view_id):

            cam.target.set_hpr(hpr)
            cam.pivot.set_quat(def_front_quat)
            self._transition_done = False
            interval1 = LerpQuatInterval(cam.target, .5, quat, blendType="easeInOut")
            interval2 = LerpQuatInterval(Mgr.get("view_gizmo_root"), .5,
                                         def_front_quat, blendType="easeInOut")
            lerp_interval = Parallel(interval1, interval2)
            Mgr.do("start_view_gizmo_transition")
            self._lerp_interval = lerp_interval
            lerp_interval.start()
            Mgr.add_task(self.__transition_view, "transition_view", sort=30,
                         uponDeath=self.__adjust_transition_hpr)
            self._dest_view = ""

        else:

            cam.target.set_quat(quat)
            cam.pivot.set_quat(def_front_quat)

            if not view_id or view_id == current_view_id:
                Mgr.do("update_view_gizmo", False, True)

            if GlobalData["coord_sys_type"] == "screen":
                Mgr.get("selection").update_transform_values()

        self.is_front_custom = False

        if view_id:
            GlobalData["view"] = current_view_id
コード例 #7
0
    def __start_view_transition(self, dest_view, quat):

        self._dest_view = dest_view
        lerp_interval = LerpQuatInterval(self.cam.target, .5, quat,
                                         blendType="easeInOut")
        self._lerp_interval = lerp_interval
        lerp_interval.start()
        self._transition_done = False
        Mgr.add_task(self.__transition_view, "transition_view", sort=30,
                     uponDeath=self.__adjust_transition_hpr)
        Mgr.do("start_view_gizmo_transition")
 def enterScan(self, ts = 0, afterShooting = 0):
     if afterShooting:
         self.track = Parallel(
             LerpQuatInterval(self.cannon.find('**/cannon'), duration = 3, quat = (-60, 0, 0),
                 startHpr = self.cannon.find('**/cannon').getHpr(), blendType = 'easeInOut'),
             LerpQuatInterval(self.cannon.find('**/square_drop_shadow'), duration = 3, quat = (-60, 0, 0),
                 startHpr = self.cannon.find('**/square_drop_shadow').getHpr(), blendType = 'easeInOut'),
             name = "afterShootTrack" + str(id(self))
         )
         self.track.setDoneEvent(self.track.getName())
         self.acceptOnce(self.track.getDoneEvent(), self._afterShootTrackDone)
         self.track.start(ts)
     else:
         self.buildScanTrack(ts)
コード例 #9
0
    def enterFrozen(self):
        self.releaseSnowball()

        self.vModel.hide()
        base.localAvatar.getGeomNode().show()
        camera.wrtReparentTo(self.camPivotNode)
        camHeight = max(base.localAvatar.getHeight(), 3.0)
        nrCamHeight = base.localAvatar.getHeight()
        heightScaleFactor = camHeight * 0.3333333333
        defLookAt = Point3(0.0, 1.5, camHeight)
        idealData = (Point3(0.0, -12.0 * heightScaleFactor,
                            camHeight), defLookAt)
        self.camTrack = Parallel(
            LerpPosInterval(camera,
                            duration=1.0,
                            pos=idealData[0],
                            startPos=camera.getPos(),
                            blendType='easeOut'),
            LerpQuatInterval(camera,
                             duration=1.0,
                             hpr=idealData[1],
                             startHpr=camera.getHpr(),
                             blendType='easeOut'))
        self.camTrack.start()
        self.max_camerap = 0.0
        self.disableMouse()
コード例 #10
0
    def __get_reset_interval(self):

        interval1 = LerpPosInterval(self.cam.pivot,
                                    .5,
                                    self.home_pos,
                                    blendType="easeInOut")

        if self.cam.lens_type == "persp":
            interval2 = LerpQuatInterval(self.cam.target,
                                         .5,
                                         self.home_quat,
                                         blendType="easeInOut")
            interval3 = LerpPosInterval(self.cam.origin,
                                        .5,
                                        Point3(0., self.home_zoom, 0.),
                                        blendType="easeInOut")
            lerp_interval = Parallel(interval1, interval2, interval3)
        else:
            interval2 = LerpQuatScaleInterval(self.cam.target,
                                              .5,
                                              self.home_quat,
                                              self.home_zoom,
                                              blendType="easeInOut")
            lerp_interval = Parallel(interval1, interval2)

        return lerp_interval
コード例 #11
0
    def enterGuideIntroSpeech(self):
        base.localAvatar.attachCamera()
        renderPos = base.camera.getPos(render)
        renderHpr = base.camera.getHpr(render)
        base.localAvatar.detachCamera()
        endPos = base.localAvatar.getPos(render) + (0, 0, 4)
        base.camera.setPos(endPos)
        base.camera.lookAt(self.guide, 0, 0, 3)
        endHpr = base.camera.getHpr(render)
        base.camera.setPos(renderPos)
        base.camera.setHpr(renderHpr)

        self.__prepareTutChat()
        self.__doTutChat(DistributedTutorial.GUIDE_INTRO_SPEECH)

        self.camMoveTrack = Sequence(
            Parallel(
                LerpPosInterval(base.camera,
                                duration=3.0,
                                pos=endPos,
                                startPos=renderPos,
                                blendType='easeOut'),
                LerpQuatInterval(base.camera,
                                 duration=3.0,
                                 hpr=endHpr,
                                 startHpr=renderHpr,
                                 blendType='easeOut')),
            Func(base.localAvatar.getGeomNode().hide))
        self.camMoveTrack.start()
コード例 #12
0
 def enterGuideIntroSpeech(self):
     base.localAvatar.attachCamera()
     renderPos = base.camera.getPos(render)
     renderHpr = base.camera.getHpr(render)
     base.localAvatar.detachCamera()
     endPos = base.localAvatar.getPos(render) + (0, 0, 4)
     base.camera.setPos(endPos)
     base.camera.lookAt(self.guide, 0, 0, 3)
     endHpr = base.camera.getHpr(render)
     base.camera.setPos(renderPos)
     base.camera.setHpr(renderHpr)
     self.chatIndex = -1
     self.doNextIntroSpeech()
     self.camMoveTrack = Sequence(
         Parallel(
             LerpPosInterval(base.camera,
                             duration=3.0,
                             pos=endPos,
                             startPos=renderPos,
                             blendType='easeOut'),
             LerpQuatInterval(base.camera,
                              duration=3.0,
                              hpr=endHpr,
                              startHpr=renderHpr,
                              blendType='easeOut')),
         Func(base.localAvatar.getGeomNode().hide))
     self.camMoveTrack.start()
コード例 #13
0
 def enterIdle(self):
     if self.weaponName == "pistol":
         self.v_model.loop('pidle')
     elif self.weaponName == "shotgun":
         self.track = Sequence(LerpQuatInterval(self.v_model, duration = 2.0, quat = (0, 1, 0), startHpr = (0, 0, 0), blendType = 'easeInOut'),
             LerpQuatInterval(self.v_model, duration = 2.0, quat = (0, 0, 0), startHpr = (0, 1, 0), blendType = 'easeInOut'))
         self.track.loop()
     elif self.weaponName == "sniper":
         self.track = Sequence(LerpQuatInterval(self.v_model, duration = 2.0, quat = (0, 1, 0), startHpr = (0, 0, 0), blendType = 'easeInOut'),
             LerpQuatInterval(self.v_model, duration = 2.0, quat = (0, 0, 0), startHpr = (0, 1, 0), blendType = 'easeInOut'))
         self.track.loop()
     self.accept('mouse1', self.requestShoot)
     if self.ammo <= 0:
         self.gui.notifyNoAmmo()
     if self.ammo < 14:
         self.accept('r', self.aliveFSM.request, ['reload'])
コード例 #14
0
 def enterRightDoorClosing(self, ts = 0):
     if self.rightTrack:
         self.rightTrack.finish()
         self.rightTrack = None
     self.rightTrack = Sequence(LerpQuatInterval(self.rightDoor, duration = 1.0, quat = (self.getRightDoorClosedH(), 0, 0),
         startHpr = (self.getRightDoorOpenH(), 0, 0), blendType = 'easeIn'),
         Func(base.playSfx, self.doorShutSound, 0, 1, None, 0.0, self.rightDoor))
     self.rightTrack.start()
	def _afterShootTrackDone(self):
		self.track = None
		self.track = Parallel(
			Sequence(
				LerpQuatInterval(self.cannon.find('**/cannon'), duration = 3, quat = (60, 0, 0),
					startHpr = Vec3(-60, 0, 0), blendType = 'easeInOut'),
				LerpQuatInterval(self.cannon.find('**/cannon'), duration = 3, quat = (-60, 0, 0),
					startHpr = Vec3(60, 0, 0), blendType = 'easeInOut'),
			),
			Sequence(
				LerpQuatInterval(self.cannon.find('**/square_drop_shadow'), duration = 3, quat = (60, 0, 0),
					startHpr = Vec3(-60, 0, 0), blendType = 'easeInOut'),
				LerpQuatInterval(self.cannon.find('**/square_drop_shadow'), duration = 3, quat = (-60, 0, 0),
					startHpr = Vec3(60, 0, 0), blendType = 'easeInOut'),
			)
		)
		self.track.loop()
コード例 #16
0
 def enterLeftDoorOpening(self, ts = 0):
     self.toggleDoorHole('Left', show = True)
     self.leftDoor.show()
     if self.leftTrack:
         self.leftTrack.finish()
         self.leftTrack = None
     self.leftTrack = Sequence(Wait(0.5), Parallel(LerpQuatInterval(self.leftDoor, duration = 0.7, quat = (self.getLeftDoorOpenH(), 0, 0),
         startHpr = (self.getLeftDoorClosedH(), 0, 0), blendType = 'easeInOut'), SoundInterval(self.doorOpenSound, node = self.leftDoor)))
     self.leftTrack.start()
コード例 #17
0
    def avatarEnter(self, slot, avId, x, y):
        toon = self.cr.doId2do.get(avId)
        if toon:

            toon.stopSmooth()

            def doTurn():
                turn = Sequence(
                    NPCLookInterval(toon,
                                    self.sign,
                                    fluid=1,
                                    durationFactor=0.0035),
                    Func(toon.loop, 'neutral'))
                turn.start()

            circle2Run2 = self.circles[slot - 1]

            if avId == base.localAvatar.doId:
                self.mySlot = slot

                localAvatar.stopSmartCamera()

                oPos = camera.getPos(render)
                oHpr = camera.getHpr(render)

                localAvatar.detachCamera()

                camPos = self.numPlayers2CamPos[len(self.circles)]
                camera.setPos(self, camPos)
                camPos = camera.getPos(render)

                camera.lookAt(self)
                camHpr = camera.getHpr()

                self.camIval = Sequence(
                    Parallel(
                        LerpPosInterval(camera,
                                        duration=1.5,
                                        pos=camPos,
                                        startPos=oPos,
                                        blendType='easeOut'),
                        LerpQuatInterval(camera,
                                         duration=1.5,
                                         hpr=camHpr,
                                         startHpr=oHpr,
                                         blendType='easeOut')),
                    Func(self.createStationAbortGui))
                self.camIval.start()

            runTrack = Sequence(
                Func(toon.loop, 'run'),
                NPCWalkInterval(toon,
                                circle2Run2.getPos(render),
                                0.1,
                                startPos=(x, y, toon.getZ())), Func(doTurn))
            runTrack.start()
 def fillSlot(self, index, avId):
     toon = self.cr.doId2do.get(avId)
     toon.stopSmooth()
     if toon:
         toon.wrtReparentTo(self.trolleyCar)
         if index <= 3:
             slotPos = Point3(-5, -4.5 + index * 3, 1.4)
             sitStartDuration = toon.getDuration('start-sit')
             toon.headsUp(slotPos)
             track = Sequence(
                 Func(toon.setAnimState, 'run'),
                 LerpPosInterval(toon, 0.75,
                                 Point3(-5, -4.5 + index * 3, 1.4)),
                 LerpHprInterval(toon, 0.25, Point3(90, 0, 0)),
                 Parallel(
                     ActorInterval(toon, 'start-sit'),
                     Sequence(
                         Wait(sitStartDuration * 0.25),
                         LerpPosInterval(
                             toon, sitStartDuration * 0.25,
                             Point3(-3.9, -4.5 + index * 3, 3.0)))),
                 Func(toon.loop, 'sit'))
         else:
             slotPos = self.STAND_POSITIONS[index]
             toon.headsUp(slotPos)
             track = Sequence(
                 Func(toon.setAnimState, 'run'),
                 LerpPosInterval(toon,
                                 duration=1.0,
                                 pos=slotPos,
                                 startPos=toon.getPos()),
                 Func(toon.setAnimState, 'neutral'),
                 Func(toon.setHpr, 90, 0, 0))
         track.start()
     if avId == base.localAvatar.doId:
         self.localAvOnTrolley = True
         base.localAvatar.stopSmartCamera()
         base.camera.wrtReparentTo(self.trolleyCar)
         camTrack = Sequence(
             Parallel(
                 LerpPosInterval(base.camera,
                                 duration=1.5,
                                 pos=self.CAM_POS,
                                 startPos=base.camera.getPos(),
                                 blendType='easeOut'),
                 LerpQuatInterval(base.camera,
                                  duration=1.5,
                                  hpr=self.CAM_HPR,
                                  startHpr=base.camera.getHpr(),
                                  blendType='easeOut')),
             Func(self.enableExitButton))
         camTrack.start()
 def enterRightDoorOpening(self, ts=0):
     if self.rightTrack:
         self.rightTrack.finish()
         self.rightTrack = None
     self.rightTrack = Sequence(
         Wait(0.5),
         Parallel(
             Func(self.toggleDoorHole, 'right', True),
             LerpQuatInterval(self.rightDoor,
                              duration=0.7,
                              quat=(self.getRightDoorOpenH(), 0, 0),
                              startHpr=(self.getRightDoorClosedH(), 0, 0),
                              blendType='easeInOut'),
             SoundInterval(self.doorOpenSound, node=self.rightDoor)))
     self.rightTrack.start()
    def doCameraNPCInteraction(self):
        currCamPos = camera.getPos()
        currCamHpr = camera.getHpr()
        camera.setX(camera.getX() + 5)
        camera.setY(camera.getY() + 5)
        camera.headsUp(self)
        newCamPos = camera.getPos()
        newCamHpr = camera.getHpr()
        camera.setPos(currCamPos)
        camera.setHpr(currCamHpr)

        self.cameraTrack = Parallel(
            LerpPosInterval(camera, duration = 1.0, pos = newCamPos, startPos = currCamPos, blendType = 'easeOut'),
            LerpQuatInterval(camera, duration = 1.0, quat = newCamHpr, startHpr = currCamHpr, blendType = 'easeOut')
        )
        self.cameraTrack.start()
コード例 #21
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
コード例 #22
0
 def enterIntroSpeech2Training(self):
     startCamPos = base.camera.getPos(render)
     startCamHpr = base.camera.getHpr(render)
     base.camera.setPosHpr(0, 0, 0, 0, 0, 0)
     base.localAvatar.attachCamera()
     endCamPos = base.camera.getPos(render)
     endCamHpr = base.camera.getHpr(render)
     base.localAvatar.detachCamera()
     startHpr = self.guide.getHpr(render)
     self.guide.headsUp(self.GUIDE_WATCH_POS)
     endHpr = self.guide.getHpr(render)
     self.guide.loop('run')
     self.camMoveIval = Parallel(
         LerpPosInterval(base.camera,
                         duration=2.0,
                         pos=endCamPos,
                         startPos=startCamPos,
                         blendType='easeOut'),
         LerpQuatInterval(base.camera,
                          duration=2.0,
                          hpr=endCamHpr,
                          startHpr=startCamHpr,
                          blendType='easeOut'),
         Sequence(
             LerpPosInterval(self.guide,
                             duration=2.0,
                             pos=self.GUIDE_WATCH_POS,
                             startPos=self.guide.getPos(render)),
             Func(self.guide.loop, 'walk'),
             LerpHprInterval(self.guide,
                             duration=1.0,
                             hpr=self.GUIDE_WATCH_HPR,
                             startHpr=endHpr),
             Func(self.guide.loop, 'neutral')),
         LerpHprInterval(self.guide,
                         duration=1.0,
                         hpr=endHpr,
                         startHpr=startHpr))
     self.camMoveIval.setDoneEvent('introSpeech2TrainingDone')
     self.acceptOnce('introSpeech2TrainingDone', self.__handleIS2TDone)
     self.camMoveIval.start()
 def getAvatarEnterTrack(self, av):
     track = Sequence(name=av.uniqueName('avatarEnterDoorTrack'))
     track.append(Func(av.setAnimState, 'walkBack'))
     track.append(
         ParallelEndTogether(
             LerpPosInterval(av,
                             duration=0.5,
                             pos=self.enterDoorWalkBackNode.getPos(render),
                             startPos=av.getPos(render)),
             LerpQuatInterval(av,
                              duration=0.5,
                              quat=self.enterDoorWalkInNode.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,
             pos=self.enterDoorWalkInNode.getPos(render),
             startPos=self.enterDoorWalkBackNode.getPos(render)))
     if base.localAvatar.doId == av.doId:
         parallel.append(
             Sequence(
                 Wait(0.5),
                 Func(messenger.send,
                      'DistributedDoor_localAvatarGoingInDoor'), Wait(1.0)))
     track.append(parallel)
     if base.localAvatar.doId == av.doId:
         track.append(
             Func(messenger.send, 'DistributedDoor_localAvatarWentInDoor'))
     track.setDoneEvent(track.getName())
     track.delayDelete = DelayDelete.DelayDelete(av, track.getName())
     self.acceptOnce(track.getDoneEvent(), self.__avatarTrackDone, [track])
     return track
コード例 #24
0
 def getQuatInterval(self):
     duration = abs((self.quatB.getHpr()-self.quatA.getHpr())[0]) / self.speed
     return LerpQuatInterval(
         self.avatar, duration, quat=self.quatB, startQuat=self.quatA
     )
コード例 #25
0
    def enterFaceOff(self, suitId, tauntIndex, ts):
        suit = self.cr.doId2do.get(suitId)
        if self.isTopFloor():
            song = self.topFloorMusic
            taunt = DistributedCogOfficeBattle.TOP_FLOOR_TAUNT
        else:
            song = self.bottomFloorsMusic
            taunt = CIGlobals.SuitFaceoffTaunts[
                suit.suitPlan.getName()][tauntIndex]
        base.playMusic(song, looping=1, volume=0.8)
        base.camLens.setMinFov(30.0 / (4.0 / 3.0))
        camera.reparentTo(suit)
        height = suit.getHeight()
        offsetPnt = Point3(0, 0, height)
        MidTauntCamHeight = height * 0.66
        MidTauntCamHeightLim = height - 1.8
        if MidTauntCamHeight < MidTauntCamHeightLim:
            MidTauntCamHeight = MidTauntCamHeightLim
        TauntCamY = 18
        TauntCamX = 0
        TauntCamHeight = random.choice((MidTauntCamHeight, 1, 11))
        camera.setPos(TauntCamX, TauntCamY, TauntCamHeight)
        camera.lookAt(suit, offsetPnt)

        def setCamRunY():
            camera.setY(camera.getY() + 5)

        self.faceOffTrack = Sequence()
        self.faceOffTrack.append(Func(suit.setAutoClearChat, False))
        self.faceOffTrack.append(Func(suit.setChat, taunt))
        self.faceOffTrack.append(Wait(3.5))
        self.faceOffTrack.append(Func(suit.nametag.clearChatText))
        self.faceOffTrack.append(Func(suit.setAutoClearChat, True))
        self.faceOffTrack.append(
            Func(base.camLens.setMinFov,
                 CIGlobals.DefaultCameraFov / (4.0 / 3.0)))
        self.faceOffTrack.append(Func(base.localAvatar.attachCamera))
        self.faceOffTrack.append(
            Func(camera.lookAt, base.localAvatar.smartCamera.getLookAtPoint()))
        self.faceOffTrack.append(Func(setCamRunY))
        runTrack = Parallel()
        for i in xrange(len(self.avatars)):
            avId = self.avatars[i]
            toon = self.cr.doId2do.get(avId)
            if toon:
                toon.stopSmooth()
                toon.wrtReparentTo(render)
                points = self.getPoints('faceoff')
                point = points[i]
                pos = Point3(point[0], point[1], point[2])
                hpr = Vec3(point[3], point[4], point[5])
                toon.headsUp(pos)
                track = Sequence(
                    Func(toon.setAnimState, 'run'),
                    LerpPosInterval(toon,
                                    duration=1.0,
                                    pos=pos,
                                    startPos=toon.getPos(render)),
                    Func(toon.setAnimState, 'walk'),
                    LerpQuatInterval(
                        toon,
                        duration=1.0,
                        hpr=hpr,
                        startHpr=lambda toon=toon: toon.getHpr(render)),
                    Func(toon.setAnimState, 'neutral'))
                runTrack.append(track)

        self.faceOffTrack.append(runTrack)
        self.faceOffTrack.start(ts)
コード例 #26
0
    def __center_view_on_objects(self, transition=True, obj_to_align_to=None, obj_id=None):

        if self._lerp_interval:
            return

        from math import tan, radians

        if obj_to_align_to:

            objs = [obj_to_align_to]

        elif obj_id:

            obj = Mgr.get("object", obj_id)
            objs = [obj]

        else:

            pixel_color = Mgr.get("pixel_under_mouse")
            obj = Mgr.get("object", pixel_color=pixel_color)

            if obj:

                objs = [obj]

            else:

                selection = Mgr.get("selection_top")

                if selection:
                    objs = selection
                else:
                    objs = Mgr.get("objects")

        if not objs:
            return

        obj_root = Mgr.get("object_root")
        cam = self.cam
        bounds_np = cam.origin.attach_new_node("cam_aligned_node")
        tmp_np = bounds_np.attach_new_node("tmp_node")

        if obj_to_align_to:
            bounds_np.set_hpr(obj_to_align_to.get_pivot(), 0., 0., 0.)

        parents = {}
        parent_copies = {}

        bboxes = dict((obj, obj.get_bbox()) for obj in objs if obj.get_type() == "model")

        for bbox in bboxes.values():
            bbox.get_origin().detach_node()

        for obj in objs:

            orig = obj.get_origin()
            parent = orig.get_parent()
            parents[orig] = parent

            if parent in parent_copies:
                parent_copy = parent_copies[parent]
            else:
                parent_copy = NodePath("parent_copy")
                parent_copy.set_transform(parent.get_transform(self.world))
                parent_copy.wrt_reparent_to(tmp_np)
                parent_copies[parent] = parent_copy

            orig.reparent_to(parent_copy)

        bounds = tmp_np.get_tight_bounds()

        for orig, parent in parents.items():
            orig.reparent_to(parent)

        for obj, bbox in bboxes.items():
            bbox.get_origin().reparent_to(obj.get_origin())

        centers = {}

        for obj in objs:

            center = obj.get_center_pos(tmp_np)

            if centers:
                centers["min"].x = min(centers["min"].x, center.x)
                centers["min"].y = min(centers["min"].y, center.y)
                centers["min"].z = min(centers["min"].z, center.z)
                centers["max"].x = max(centers["max"].x, center.x)
                centers["max"].y = max(centers["max"].y, center.y)
                centers["max"].z = max(centers["max"].z, center.z)
            else:
                centers = {"min": center, "max": VBase3(center)}

        if bounds:
            point_min, point_max = bounds
            point_min.x = min(point_min.x, centers["min"].x)
            point_min.y = min(point_min.y, centers["min"].y)
            point_min.z = min(point_min.z, centers["min"].z)
            point_max.x = max(point_max.x, centers["max"].x)
            point_max.y = max(point_max.y, centers["max"].y)
            point_max.z = max(point_max.z, centers["max"].z)
        else:
            point_min, point_max = centers["min"], centers["max"]

        if cam.lens.is_perspective():
            vec = (point_min - point_max) * .5
            center_pos = self.world.get_relative_point(tmp_np, point_max + vec)
        else:
            vec = point_max - point_min
            center_pos = self.world.get_relative_point(tmp_np, point_min + vec * .5)

        bounds_np.remove_node()

        if cam.lens.is_perspective():

            fov_h, fov_v = cam.lens.get_fov()
            x, y, z = vec
            x = min(-.01, x)
            y = min(-.01, y)
            z = min(-.01, z)

            if vec.length_squared() < .000001:
                zoom = None
            else:
                zoom = y + ((x / tan(radians(fov_h * .5))) if x / z > fov_h / fov_v
                    else (z / tan(radians(fov_v * .5))))
                zoom = max(-1000000., min(-cam.lens.get_near(), zoom))

            if transition:
                if zoom is None:
                    interval1 = None
                else:
                    interval1 = LerpPosInterval(cam.origin, .3, Point3(0., zoom, 0.),
                                                blendType="easeInOut")
            else:
                set_zoom = lambda: None if zoom is None else cam.origin.set_y(zoom)

        else:

            size_h, size_v = cam.lens.get_film_size()
            x, y, z = vec
            x = max(.01, x)
            y = max(.01, y)
            z = max(.01, z)

            if vec.length_squared() < .000001:
                zoom = None
            else:
                zoom = (x / size_h) if x / z > size_h / size_v else (z / size_v)
                zoom *= cam.target.get_sx()
                zoom = min(100000., max(.0004, zoom))

            if transition:
                if zoom is None:
                    interval1 = None
                else:
                    interval1 = LerpScaleInterval(cam.target, .3, zoom, blendType="easeInOut")
            else:
                set_zoom = lambda: None if zoom is None else cam.target.set_scale(zoom)

        if transition:

            interval2 = LerpPosInterval(cam.pivot, .3, center_pos, blendType="easeInOut")
            lerp_interval = Parallel(interval2)

            if interval1 is not None:
                lerp_interval.append(interval1)

            if obj_to_align_to:
                quat = obj_to_align_to.get_pivot().get_quat(self.world)
                interval3 = LerpQuatInterval(cam.pivot, .3, quat, blendType="easeInOut")
                interval4 = LerpQuatInterval(cam.target, .3, Quat(), blendType="easeInOut")
                interval5 = LerpQuatInterval(Mgr.get("view_gizmo_root"), .5,
                                             quat, blendType="easeInOut")
                lerp_interval.append(interval3)
                lerp_interval.append(interval4)
                lerp_interval.append(interval5)

            self._lerp_interval = lerp_interval
            lerp_interval.start()
            Mgr.add_task(self.__transition_view, "transition_view", sort=30)
            Mgr.do("start_view_gizmo_transition")
            self._dest_view = "obj_extents"
            self._transition_done = False

        else:

            cam.pivot.set_pos(center_pos)
            set_zoom()
            Mgr.do("update_transf_gizmo")
            Mgr.do("update_coord_sys")
            Mgr.do("update_zoom_indicator")

            if obj_to_align_to:
                Mgr.do("update_view_gizmo", False, True)

            if GlobalData["coord_sys_type"] == "screen":
                Mgr.get("selection").update_transform_values()

        if obj_to_align_to:
            self.is_front_custom = True
            quat = Quat()
            zoom = cam.zoom if zoom is None else zoom
            self.custom_home_default_pos = center_pos
            self.custom_home_default_quat = quat
            self.custom_home_default_zoom = zoom
            self.home_pos = center_pos
            self.home_quat = quat
            self.home_zoom = zoom
コード例 #27
0
    def goThroughTunnel(self, toZone, inOrOut, requestStatus=None):
        # inOrOut: 0 = in; 1 = out

        if self.tunnelTrack:
            self.ignore(self.tunnelTrack.getDoneEvent())
            self.tunnelTrack.finish()
            self.tunnelTrack = None

        linkTunnel = LinkTunnel.getTunnelThatGoesToZone(toZone)
        if not linkTunnel:
            return
        self.tunnelTrack = Parallel(
            name=self.uniqueName('Place.goThroughTunnel'))

        if inOrOut == 0:
            # Going in a tunnel!
            pivotPoint = linkTunnel.inPivotPoint
            pivotPointNode = linkTunnel.tunnel.attachNewNode(
                'tunnelPivotPoint')
            pivotPointNode.setPos(pivotPoint)
            pivotPointNode.setHpr(linkTunnel.inPivotStartHpr)

            x, y, z = self.getPos(render)
            surfZ = PhysicsUtils.getNearestGroundSurfaceZ(
                self,
                self.getHeight() + self.getHeight() / 2.0)

            if not surfZ == -1:
                # Let's use the ray-tested surface z-point instead so we don't come out of the tunnel hovering.
                # This is just in case the user jumped into the tunnel, which in that case would mean that they are
                # airborne and we can't depend on their current Z value.
                z = surfZ

            if base.localAvatar.doId == self.doId:
                doneMethod = self._handleWentInTunnel
                extraArgs = [requestStatus]
                base.localAvatar.walkControls.setCollisionsActive(
                    0, andPlaceOnGround=1)
                self.resetHeadHpr(override=True)
                camera.wrtReparentTo(linkTunnel.tunnel)
                currCamPos = camera.getPos()
                currCamHpr = camera.getHpr()
                tunnelCamPos = linkTunnel.camPos
                tunnelCamHpr = linkTunnel.camHpr
                camera.setPos(tunnelCamPos)
                camera.setHpr(tunnelCamHpr)
                self.tunnelTrack.append(
                    LerpPosInterval(camera,
                                    duration=0.7,
                                    pos=tunnelCamPos,
                                    startPos=currCamPos,
                                    blendType='easeOut'))
                self.tunnelTrack.append(
                    LerpQuatInterval(camera,
                                     duration=0.7,
                                     quat=tunnelCamHpr,
                                     startHpr=currCamHpr,
                                     blendType='easeOut'))

            self.wrtReparentTo(pivotPointNode)
            self.setPos(x, y, z)
            self.resetTorsoRotation()
            self.stopLookAround()

            if linkTunnel.__class__.__name__ == "SafeZoneLinkTunnel":
                self.setHpr(180, 0, 0)
            else:
                self.setHpr(0, 0, 0)

            exitSeq = Sequence(Func(self.loop, 'run'))
            if base.localAvatar.doId == self.doId:
                exitSeq.append(Wait(2.0))
                exitSeq.append(Func(base.transitions.irisOut))
            self.tunnelTrack.append(exitSeq)
            self.tunnelTrack.append(
                Sequence(
                    LerpHprInterval(
                        pivotPointNode,
                        duration=2.0,
                        hpr=linkTunnel.inPivotEndHpr,
                        startHpr=linkTunnel.inPivotStartHpr,
                    ),
                    LerpPosInterval(pivotPointNode,
                                    duration=1.0,
                                    pos=(linkTunnel.inPivotEndX,
                                         pivotPointNode.getY(),
                                         pivotPointNode.getZ()),
                                    startPos=(linkTunnel.inPivotStartX,
                                              pivotPointNode.getY(),
                                              pivotPointNode.getZ())),
                    Func(self.reparentTo, hidden)))
        elif inOrOut == 1:

            # Going out!
            pivotPoint = linkTunnel.outPivotPoint
            pivotPointNode = linkTunnel.tunnel.attachNewNode(
                'tunnelPivotPoint')
            pivotPointNode.setPos(pivotPoint)
            pivotPointNode.setHpr(linkTunnel.outPivotStartHpr)

            exitSeq = Sequence()

            if base.localAvatar.doId == self.doId:
                base.localAvatar.walkControls.setCollisionsActive(
                    0, andPlaceOnGround=1)
                base.localAvatar.detachCamera()
                camera.reparentTo(linkTunnel.tunnel)
                tunnelCamPos = linkTunnel.camPos
                tunnelCamHpr = linkTunnel.camHpr
                camera.setPos(tunnelCamPos)
                camera.setHpr(tunnelCamHpr)
                doneMethod = self._handleCameOutTunnel
                extraArgs = []

                exitSeq.append(Func(base.transitions.irisIn))
            else:
                self.stopSmooth()

            self.reparentTo(pivotPointNode)
            self.setHpr(linkTunnel.toonOutHpr)
            self.setPos(linkTunnel.toonOutPos)

            seq = Sequence(
                Func(self.loop, 'run'),
                LerpPosInterval(pivotPointNode,
                                duration=1.0,
                                pos=(linkTunnel.outPivotEndX,
                                     pivotPointNode.getY(),
                                     pivotPointNode.getZ()),
                                startPos=(linkTunnel.outPivotStartX,
                                          pivotPointNode.getY(),
                                          pivotPointNode.getZ())),
                LerpHprInterval(
                    pivotPointNode,
                    duration=2.0,
                    hpr=linkTunnel.outPivotEndHpr,
                    startHpr=linkTunnel.outPivotStartHpr,
                ))
            if base.localAvatar.doId != self.doId:
                seq.append(Func(self.startSmooth))
            seq.append(Func(self.wrtReparentTo, render))
            exitSeq.append(seq)
            self.tunnelTrack.append(exitSeq)

        if base.localAvatar.doId == self.doId:
            self.tunnelTrack.setDoneEvent(self.tunnelTrack.getName())
            self.acceptOnce(self.tunnelTrack.getDoneEvent(), doneMethod,
                            extraArgs)

        self.tunnelTrack.start()
コード例 #28
0
ファイル: CharSelection.py プロジェクト: NoraTheGamer/cio-src
    def enterOnStage(self):
        dna = self.choice.dna
        name = self.choice.name
        self.stageToon.setName(name)
        self.stageToon.setDNAStrand(dna)
        self.stageToon.nametag.setNametagColor(
            NametagGlobals.NametagColors[NametagGlobals.CCLocal])
        self.stageToon.nametag.setActive(0)
        self.stageToon.nametag.nametag3d.request('Rollover')
        self.stageToon.nametag.unmanage(base.marginManager)
        self.stageToon.nametag.updateAll()
        self.stageToon.animFSM.request('neutral')
        self.stageToon.setPosHpr(0, 0, 0, 10, 0, 0)
        self.stageToon.show()

        dat = HOOD_STAGE_DATA[self.choice.lastHood]

        self.stageToonRoot.setPos(dat[2])
        self.stageToonRoot.setHpr(dat[3])

        camera.reparentTo(self.stageToonRoot)

        camera.setPos(dat[0])
        camera.lookAt(self.stageToonRoot, 0, 0, 3)
        startHpr = camera.getHpr()
        camera.setPos(dat[1])
        camera.lookAt(self.stageToonRoot, 0, 0, 3)
        endHpr = camera.getHpr()

        self.camIval = Parallel(
            LerpPosInterval(camera,
                            5.0,
                            dat[1] - (1.6, 0, 0),
                            dat[0] - (1.6, 0, 0),
                            blendType='easeInOut'),
            LerpQuatInterval(camera,
                             5.0,
                             hpr=endHpr,
                             startHpr=startHpr,
                             blendType='easeInOut'),
            LerpFunc(self.__changeCamFOV,
                     duration=5.0,
                     fromData=80.0,
                     toData=CIGlobals.DefaultCameraFov,
                     blendType='easeInOut'))
        if self.isNewToon:
            self.camIval.append(
                Sequence(
                    Func(self.stageToon.hide), Func(base.stopMusic),
                    SoundInterval(self.newToonAnnounceSfx,
                                  startTime=1.674,
                                  duration=4.047),
                    SoundInterval(self.newToonDrumrollSfx),
                    Func(self.stageToon.pose, 'tele',
                         self.stageToon.getNumFrames('tele')),
                    Func(self.newToonAppear), Func(self.stageToon.show),
                    SoundInterval(self.newToonRevealSfx),
                    Func(base.cr.playTheme)))
        else:
            self.camIval.append(
                Sequence(Func(self.showActionButtons),
                         Func(self.enableAllCharButtons), Wait(5.0),
                         Func(self.beginRandomAnims)))

        self.camIval.start()
    def enterFaceOff(self, tauntIndex, ts):

        tauntSuit = self.suits.get(self.tauntSuitId)

        if self.isTopFloor():
            song = self.topFloorMusic
            taunt = DistributedCogOfficeBattle.TOP_FLOOR_TAUNT
        else:
            song = self.bottomFloorsMusic
            taunt = SuitGlobals.FaceoffTaunts[
                tauntSuit.suitPlan.getName()][tauntIndex]

        base.playMusic(song, looping=1)

        base.camLens.setMinFov(30.0 / (4. / 3.))

        def posCamera_run():
            pos, lookAt = base.localAvatar.walkControls.fpsCam.getThirdPersonBattleCam(
            )
            base.camera.setPos(pos)
            base.camera.lookAt(lookAt)

        camera.reparentTo(tauntSuit)
        height = tauntSuit.getHeight()
        offsetPnt = Point3(0, 0, height)
        MidTauntCamHeight = height * 0.66
        MidTauntCamHeightLim = height - 1.8
        if MidTauntCamHeight < MidTauntCamHeightLim:
            MidTauntCamHeight = MidTauntCamHeightLim
        TauntCamY = 18
        TauntCamX = 0
        TauntCamHeight = random.choice((MidTauntCamHeight, 1, 11))
        camera.setPos(TauntCamX, TauntCamY, TauntCamHeight)
        camera.lookAt(tauntSuit, offsetPnt)

        self.faceOffTrack = Sequence()
        self.faceOffTrack.append(Func(tauntSuit.setAutoClearChat, False))
        self.faceOffTrack.append(Func(tauntSuit.setChat, taunt))
        self.faceOffTrack.append(Wait(3.5))
        self.faceOffTrack.append(Func(tauntSuit.nametag.clearChatText))
        self.faceOffTrack.append(Func(tauntSuit.setAutoClearChat, True))
        self.faceOffTrack.append(
            Func(base.camLens.setMinFov,
                 CIGlobals.DefaultCameraFov / (4. / 3.)))
        self.faceOffTrack.append(Func(base.localAvatar.attachCamera))
        self.faceOffTrack.append(Func(posCamera_run))

        faceoffs = base.bspLoader.findAllEntities("cogoffice_faceoff_point")

        runTrack = Parallel()
        for i in xrange(len(self.avIds)):
            avId = self.avIds[i]
            toon = self.cr.doId2do.get(avId)
            if toon:
                toon.stopSmooth()
                toon.wrtReparentTo(render)
                faceoff = faceoffs[i]
                pos = faceoff.cEntity.getOrigin()
                hpr = faceoff.cEntity.getAngles()
                toon.headsUp(pos)
                track = Sequence(
                    Func(toon.setAnimState, 'run'),
                    LerpPosInterval(toon,
                                    duration=1.5,
                                    pos=pos,
                                    startPos=toon.getPos(render)),
                    Func(toon.setAnimState, 'walk'),
                    LerpQuatInterval(
                        toon,
                        duration=1.0,
                        hpr=hpr,
                        startHpr=lambda toon=toon: toon.getHpr(render)),
                    Func(toon.setAnimState, 'neutral'))
                if avId != base.localAvatar.doId:
                    track.append(Func(toon.startSmooth))
                runTrack.append(track)

        #for suit in self.suits.values():
        #    if suit.hangoutPoint[0]:
        #        track = Sequence(
        #            Func(suit.setAnimState, 'walk'),
        #            NPCWalkInterval(
        #                suit, Point3(suit.guardPoint[0][0], suit.guardPoint[0][1], suit.guardPoint[0][2]), durationFactor = 0.19),
        #            Func(suit.setHpr, Vec3(suit.guardPoint[1], 0, 0)),
        #            Func(suit.setAnimState, 'neutral'))
        #        runTrack.append(track)

        self.faceOffTrack.append(runTrack)
        self.faceOffTrack.start(ts)
コード例 #30
0
    def __reset_view(self, to_default=True, transition=False):
        """ Make the Home view the current view """

        cam = self.cam
        lerp_view_gizmo = False

        if to_default:

            if transition and self.is_front_custom:
                lerp_view_gizmo = True
                gizmo_root = Mgr.get("view_gizmo_root")
                hpr = gizmo_root.get_hpr()

            self.__reset_front_view(transition=False, reset_roll=False)
            self.__reset_home_view()
            Mgr.update_app("active_grid_plane", self.default_grid_plane)
            GlobalData["render_mode"] = self.default_render_mode
            Mgr.update_app("render_mode")

            if lerp_view_gizmo:
                gizmo_root.set_hpr(hpr)

        current_quat = cam.target.get_quat()
        pos = self.home_pos
        quat = self.home_quat
        zoom = self.home_zoom
        almost_same_zoom = Vec3(0., zoom, 0.) == Vec3(0., cam.zoom, 0.)
        def_front_quat = self.default_front_quat

        if current_quat.almost_same_direction(quat, .000001) \
                and cam.pivot.get_pos() == pos and almost_same_zoom:

            if lerp_view_gizmo:
                gizmo_interval = LerpQuatInterval(gizmo_root, .5, def_front_quat, blendType="easeInOut")
                self._lerp_interval = gizmo_interval
                gizmo_interval.start()
                Mgr.add_task(self.__transition_view, "transition_view", sort=30,
                             uponDeath=self.__adjust_transition_hpr)
                Mgr.do("start_view_gizmo_transition")
                self._dest_view = "home"
                self._transition_done = False

            return

        if transition:

            lerp_interval = self.reset_interval

            if lerp_view_gizmo:
                gizmo_interval = LerpQuatInterval(gizmo_root, .5, def_front_quat, blendType="easeInOut")
                lerp_interval.append(gizmo_interval)

            self._lerp_interval = lerp_interval
            lerp_interval.start()
            Mgr.add_task(self.__transition_view, "transition_view", sort=30,
                         uponDeath=self.__adjust_transition_hpr)
            Mgr.do("start_view_gizmo_transition")
            self._dest_view = "home"
            self._transition_done = False

        else:

            cam.pivot.set_pos(pos)
            cam.target.set_quat(quat)
            cam.zoom = zoom
            Mgr.do("update_transf_gizmo")
            Mgr.do("update_coord_sys")
            Mgr.do("update_zoom_indicator")
            Mgr.do("update_view_gizmo")

            if GlobalData["coord_sys_type"] == "screen":
                Mgr.get("selection").update_transform_values()